周末被Wanna Cry病毒轰炸的朋友圈,特写了个小脚本,可以批量检测网络内所有主机的445端口是否开启,
针对检测出来445端口开放的ip全部简单记录在txt中,支持协程和单线程2种模式
#!/usr/bin/env python2.7 # encoding:utf-8 import telnetlib import sys from gevent import monkey; reload(sys) sys.setdefaultencoding("utf-8") monkey.patch_all() import gevent #ip转换方法 def ip2num(ip): ip=[int(x) for x in ip.split(‘.‘)] return ip[0] <<24 | ip[1]<<16 | ip[2]<<8 |ip[3] def num2ip(num): return ‘%s.%s.%s.%s‘ %( (num & 0xff000000) >>24, (num & 0x00ff0000) >>16, (num & 0x0000ff00) >>8, num & 0x000000ff ) #把输入的ip范围组合成一个list形式 def get_ip(ip): start,end = [ip2num(x) for x in ip.split(‘-‘) ] return [ num2ip(num) for num in range(start,end+1) if num & 0xff ] #确认指定的ip是否连通的方法 def check_port(ip): #调用系统的telnetlib,telnet指定ip的指定端口,如果成功,则 try: tn = telnetlib.Telnet(ip, port=445, timeout=10) #给ip后面加一个换行符,用来在txt里面换行显示 new_ip = ip + ‘\n‘ #以追加的形式将端口开放的ip列出来 file_object = open(‘thefile.txt‘, ‘a‘) file_object.write(new_ip) file_object.close() print ip+True except: print(‘{}ip 的端口不通‘.format(ip)) iplist = get_ip(‘192.168.1.1-192.168.2.1‘) print iplist #单线程模式 # for ip in iplist: # print check_point(ip) #协程模式,多并发 #下面这句的意思就是循环列表里面的ip,全部加到协程(gevent)里面,一起并发启动执行 threads = [gevent.spawn(check_port, ip) for ip in iplist] gevent.joinall(threads)
时间: 2024-10-16 12:35:14