python批量Telnet遠程主機查看端口開放狀況

    週末被Wanna Cry病毒轟炸的朋友圈,特寫了個小腳本,能夠批量檢測網絡內全部主機的445端口是否開啓,python

針對檢測出來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)
相關文章
相關標籤/搜索