telnet 扫描公网IP的22号端口是否存在暴露问题,并及时发送邮件

#!/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
 
 
 
# 功能:扫描主机的22号端口是否开放并将成功的导出日志,如果有22号端口被检测到公开出去了,则导出日志,并立即发送邮件给责任人aochaunfei
 
    # 第一步:打开文件(文件存放了私网IP = 公网IP 22 格式),对文件的内容一行一行的读取,同时进行telnte操作
          # a.如果telnet返回值为0说明telnet成功,则公网的22号端口被公开出去,有被攻击的风险,那么将对应得 公共IP 写入到以一个时间打头的文件里面
          # b.反之则将 公网IP 写入到另外一个时间打头的文件里面作为区分
 
Time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))

# 定义要发送的附件名 
file_postion = "/root/python/telnet/ExposePort/" + Time + "_" +"ExposePort.log"

f = open("/root/python/telnet.txt","r")
ExposePort_log = open(file_postion,"w")
NoExposePort_log = open("/root/python/telnet/NoExposePort/NoExposePort.log","w")
 
 
for ip_port in f.readlines():
    ip = ip_port.split("=")[-1].strip().split()[0]
        
    # 此步非常重要,如果不把ip地址转换成字符串来处理,后面执行nmap命令的时候会出现问题
    os.environ['ip'] = str(ip)
        
    (status, optput) = commands.getstatusoutput('nmap $ip -p 22 | grep \"22/tcp open  ssh\"')
    if status == 0:
        NoExposePort_log.write(ip + "\n")
    else:
        ExposePort_log.write(ip + "\n")
 
f.close()
ExposePort_log.close()
NoExposePort_log.close()




    # 第二步:将暴露公网IP 22号端口的文件通过邮件附件的形式发送个邮箱

From = "aochuanfei@126.com"
To = "1585051879@qq.com"
file_name = file_postion     #附件名

server = smtplib.SMTP("smtp.126.com")
server.login("aochuanfei","aixocm111111")  #仅smtp服务器需要验证时

# 构造MIMEMultipart对象做为根容器
main_msg = email.MIMEMultipart.MIMEMultipart()

# 构造MIMEText对象做为邮件显示内容并附加到根容器
text_msg = email.MIMEText.MIMEText("你好,请及时处理问题,谢谢!",_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'] = "如附件所示公网IP 22号端口以及暴露请注意!!!"
main_msg['Date'] = email.Utils.formatdate( )

# 得到格式化后的完整文本
fullText = main_msg.as_string( )

# 用smtp发送邮件
try:
    server.sendmail(From, To, fullText)
finally:
    server.quit()

 

posted @ 2017-05-26 21:02  大都比2号  阅读(1952)  评论(0编辑  收藏  举报