标签:smtplib 存在 login multipart lines 格式 stream att 附件
#!/usr/bin/env python3 #coding: utf-8 import time import commands import os import smtplib import email.MIMEMultipart import email.MIMEText import email.MIMEBase import mimetypes import email.MIMEImage #import MIMEImage # 功能:扫描主机的22号端口是否开放并将成功的导出日志,如果有22号端口被检测到公开出去了,则导出日志,并立即发送邮件给责任人aochaunfei # 第一步:打开文件(文件存放了私网IP = 公网IP 22 格式),对文件的内容一行一行的读取,同时进行telnte操作 # a.如果telnet返回值为0说明telnet成功,则公网的22号端口被公开出去,有被攻击的风险,那么将对应得 公共IP 写入到以一个时间打头的文件里面 # b.反之则将 公网IP 写入到另外一个时间打头的文件里面作为区分 f = open("/lianxi/aochuanfei/telnet/telnet.txt","r") ExposePort_log = open("/lianxi/aochuanfei/telnet/ExposePort/ExposePort.log","w") NoExposePort_log = open("/lianxi/aochuanfei/telnet/NoExposePort/NoExposePort.log","w") for ip_port in f.readlines(): # 此处有问题,截取出来的不是 # os.environ[‘ip_port‘] = str(ip_port) #ip = str(ip_port.strip()) ip = ip_port.split("=")[-1].strip() print ip status = commands.getstatusoutput(‘telnet $ip‘) if status == 0: ExposePort_log.write(ip_port) else: NoExposePort_log.write(ip_port) f.close() ExposePort_log.close() NoExposePort_log.close() Time = time.strftime(‘%Y-%m-%d %H:%M:%S‘,time.localtime(time.time())) commands.getstatusoutput(‘mv /lianxi/aochuanfei/telnet/ExposePort/ExposePort.log /lianxi/aochuanfei/telnet/ExposePort/$Time_ExposePort.log‘) commands.getstatusoutput(‘mv /lianxi/aochuanfei/telnet/NoExposePort/NoExposePort.log /lianxi/aochuanfei/telnet/NoExposePort/$Time_NoExposePort.log‘) # 第二步:将暴露公网IP 22号端口的文件通过邮件附件的形式发送个邮箱 From = "aochuanfei@163.com" To = "158505233239@qq.com,123456@qq.com" file_name = "/lianxi/aochuanfei/telnet/ExposePort/$Time_ExposePort.log" #附件名 server = smtplib.SMTP("smtp.163.com") server.login("aochuanfei","aixocm123") #仅smtp服务器需要验证时 # 构造MIMEMultipart对象做为根容器 main_msg = email.MIMEMultipart.MIMEMultipart() # 构造MIMEText对象做为邮件显示内容并附加到根容器 text_msg = email.MIMEText.MIMEText("请注意附件里的公网的22号端口已经暴露",_charset="utf-8") main_msg.attach(text_msg) # 构造MIMEBase对象做为文件附件内容并附加到根容器 ctype,encoding = mimetypes.guess_type(file_name) if ctype is None or encoding is not None: ctype=‘application/octet-stream‘ maintype,subtype = ctype.split(‘/‘,1) file_msg=email.MIMEImage.MIMEImage(open(file_name,‘rb‘).read(),subtype) print ctype,encoding ## 设置附件头 basename = os.path.basename(file_name) file_msg.add_header(‘Content-Disposition‘,‘attachment‘, filename = basename)#修改邮件头 main_msg.attach(file_msg) # 设置根容器属性 main_msg[‘From‘] = From main_msg[‘To‘] = To main_msg[‘Subject‘] = "请注意!!!" main_msg[‘Date‘] = email.Utils.formatdate( ) # 得到格式化后的完整文本 fullText = main_msg.as_string( ) # 用smtp发送邮件 try: server.sendmail(From, To.split(‘,‘), fullText) finally: server.quit()
telnet 扫描公网IP的22号端口是否存在暴露问题,并及时发送邮件
标签:smtplib 存在 login multipart lines 格式 stream att 附件
原文地址:http://www.cnblogs.com/blog-acf/p/6910437.html