本文執行個體講述了Python掃描IP段查看指定連接埠是否開放的方法。分享給大家供大家參考。具體實現方法如下:
#!/usr/local/bin/python#-*- coding: UTF-8 -*-#######################################################################################################################BLOG:http://hi.baidu.com/alalmn# Python 掃描IP段 指定連接埠是否開放##################################################import socketimport threading,timesocket.setdefaulttimeout(10) #設定了全域預設逾時時間#查看IP連接埠是否開放class socket_port(threading.Thread): def __init__(self,cond, name): super(socket_port, self).__init__() self.cond = cond self.cond.set()#將標識位設為Ture self.HOST = name def run(self): #time.sleep(1) #確保先運行Seeker中的方法 try: PORT=21 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((self.HOST,PORT)) print"" print self.HOST,u":",PORT,u"連接埠開放" #self.cond.wait()#堵塞線程,直到Event對象內部標識位被設為True或逾時(如果提供了參數timeout)。 self.cond.set()#將標識位設為Ture return 1 except: print ".", #print self.HOST,u":",PORT,u"連接埠未開放" #self.cond.wait()#堵塞線程,直到Event對象內部標識位被設為True或逾時(如果提供了參數timeout)。 self.cond.set()#將標識位設為Ture return 0###socket_port("192.168.2.1")#if socket_port("192.168.2.100"):# print "開放"#else:# print "未開放"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): #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連接埠是否開放 if num>=IPend: print u"IP匯入數組完成" return '%s.%s.%s.%s' % ( (num & 0xff000000) >> 24, (num & 0x00ff0000) >> 16, (num & 0x0000ff00) >> 8, num & 0x000000ff )def gen_ip(ip1,ip2): #返回數組# ip# global IPend# start, IPend = [ip2num(x) for x in ip.split('-')] global IPend IPend=ip2 return [num2ip(num) for num in range(ip1,ip2+1) if num & 0xff]import iniif __name__=='__main__': ini.ini_get() #讀取INI list_ip=gen_ip(ip2num(ini.IP1),ip2num(ini.IP2)) I1 = 0 #得到list的第一個元素 print u"開始掃描IP" ip=0 while I1 < len(list_ip): #print list_ip[I1] time.sleep(0.3) #確保先運行Seeker中的方法 cond = threading.Event() hider = socket_port(cond,list_ip[I1]) hider.start() if ip>=255: ini.ini_write(list_ip[I1],ini.IP2) #修改INI print ip 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="" #掃描IPIP2="" #當前已經掃到的IPINITXT="IP.ini" #INI檔案名稱字import ConfigParserdef ini_get(): #讀取INI try: global IP1 global IP2 global INITXT config = ConfigParser.ConfigParser() config.readfp(open(INITXT)) IP1 = config.get("ipdata","ip1") IP2 = config.get("ipdata","ip2") except: print "讀取INI錯誤" ini_add("","") #寫入INI def ini_add(ip1,ip2): #寫入INI try: global INITXT 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錯誤"def ini_write(ip1,ip2): #修改INI try: global INITXT config = ConfigParser.ConfigParser() config.read(INITXT) if not config.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## print IP1## print IP2### ini_add("222222222","3333333333333") #寫入INI## ini_get() #讀取INI## print IP1## print IP2## ini_write("999999999","0000000000") #修改INI# ini_get() #讀取INI# print IP1# print IP2
運行:
代碼如下:
python TCP21.py
希望本文所述對大家的Python程式設計有所協助。