码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2017-05-26 23:26:31      阅读:410      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!