本文实例讲述了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,# (num & 0x0000ff00) >> 8,# num & 0x000000ff )# #socket_port(data) #查看ip端口是否开放 if num>=ipend: print uip导入数组完成 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 =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程序设计有所帮助。