各位用户为了找寻关于Python扫描IP段查看指定端口是否开放的方法的资料费劲了很多周折。这里教程网为您整理了关于Python扫描IP段查看指定端口是否开放的方法的相关资料,仅供查阅,以下为您介绍关于Python扫描IP段查看指定端口是否开放的方法的详细内容

本文实例讲述了Python扫描IP段查看指定端口是否开放的方法。分享给大家供大家参考。具体实现方法如下:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 #!/usr/local/bin/python #-*- coding: UTF-8 -*- #################################################################### ################################################## #BLOG:http://hi.baidu.com/alalmn # Python 扫描IP段 指定端口是否开放 ################################################## import socket import threading,time socket.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 ini if __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:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 #!/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文件名字 import ConfigParser def 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程序设计有所帮助。