Python扫描IP段查看指定端口是否开放的方法
本文实例讲述了Python扫描IP段查看指定端口是否开放的方法。分享给大家供大家参考。具体实现方法如下:
#!/usr/local/bin/python #-*-coding:UTF-8-*- #################################################################### ################################################## #BLOG:http://hi.baidu.com/alalmn #Python扫描IP段指定端口是否开放 ################################################## importsocket importthreading,time socket.setdefaulttimeout(10)#设置了全局默认超时时间 #查看IP端口是否开放 classsocket_port(threading.Thread): def__init__(self,cond,name): super(socket_port,self).__init__() self.cond=cond self.cond.set()#将标识位设为Ture self.HOST=name defrun(self): #time.sleep(1)#确保先运行Seeker中的方法 try: PORT=21 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((self.HOST,PORT)) print"" printself.HOST,u":",PORT,u"端口开放" #self.cond.wait()#堵塞线程,直到Event对象内部标识位被设为True或超时(如果提供了参数timeout)。 self.cond.set()#将标识位设为Ture return1 except: print".", #printself.HOST,u":",PORT,u"端口未开放" #self.cond.wait()#堵塞线程,直到Event对象内部标识位被设为True或超时(如果提供了参数timeout)。 self.cond.set()#将标识位设为Ture return0 ## #socket_port("192.168.2.1") #ifsocket_port("192.168.2.100"): #print"开放" #else: #print"未开放" defip2num(ip): ip=[int(x)forxinip.split('.')] returnip[0]<<24|ip[1]<<16|ip[2]<<8|ip[3] defnum2ip(num): #time.sleep(0.05)#50ms #time.sleep(0.1)#s #data='%s.%s.%s.%s'%((num&0xff000000)>>24, #(num&0x00ff0000)>>16, #(num&0x0000ff00)>>8, #num&0x000000ff) ##socket_port(data)#查看IP端口是否开放 ifnum>=IPend: printu"IP导入数组完成" return'%s.%s.%s.%s'%((num&0xff000000)>>24, (num&0x00ff0000)>>16, (num&0x0000ff00)>>8, num&0x000000ff) defgen_ip(ip1,ip2):#返回数组 #ip #globalIPend #start,IPend=[ip2num(x)forxinip.split('-')] globalIPend IPend=ip2 return[num2ip(num)fornuminrange(ip1,ip2+1)ifnum&0xff] importini if__name__=='__main__': ini.ini_get()#读取INI list_ip=gen_ip(ip2num(ini.IP1),ip2num(ini.IP2)) I1=0#得到list的第一个元素 printu"开始扫描IP" ip=0 whileI1<len(list_ip): #printlist_ip[I1] time.sleep(0.3)#确保先运行Seeker中的方法 cond=threading.Event() hider=socket_port(cond,list_ip[I1]) hider.start() ifip>=255: ini.ini_write(list_ip[I1],ini.IP2)#修改INI printip ip=0 ip=ip+1 I1=I1+1#一层
ini.py:
#!/usr/local/bin/python #-*-coding:UTF-8-*- ################################################## #qq:316118740 #BLOG:http://hi.baidu.com/alalmn #Python操作ini文件 #刚学写的不好请大家见谅 ################################################## IP1=""#扫描IP IP2=""#当前已经扫到的IP INITXT="IP.ini"#INI文件名字 importConfigParser defini_get():#读取INI try: globalIP1 globalIP2 globalINITXT config=ConfigParser.ConfigParser() config.readfp(open(INITXT)) IP1=config.get("ipdata","ip1") IP2=config.get("ipdata","ip2") except: print"读取INI错误" ini_add("","")#写入INI defini_add(ip1,ip2):#写入INI try: globalINITXT config=ConfigParser.ConfigParser() config.add_section("ipdata")#设置section段及对应的值 config.set("ipdata","ip1",ip1) config.set("ipdata","ip2",ip2) config.write(open(INITXT,"w"))#写入文件 except: print"写入INI错误" defini_write(ip1,ip2):#修改INI try: globalINITXT config=ConfigParser.ConfigParser() config.read(INITXT) ifnotconfig.has_section("ipdata"):#看是否存在该Section,不存在则创建 temp=config.add_section("") config.set("ipdata","ip1",ip1) config.set("ipdata","ip2",ip2) config.write(open(INITXT,"r+")) except: print"修改INI错误" ini_add("","")#写入INI #if__name__=='__main__': ##ini_get()#读取INI ##printIP1 ##printIP2 # ##ini_add("222222222","3333333333333")#写入INI ##ini_get()#读取INI ##printIP1 ##printIP2 # #ini_write("999999999","0000000000")#修改INI #ini_get()#读取INI #printIP1 #printIP2
运行:
pythonTCP21.py
希望本文所述对大家的Python程序设计有所帮助。