首页 > 编程 > Python > 正文

Python扫描IP段查看指定端口是否开放的方法

2019-11-25 17:18:01
字体:
来源:转载
供稿:网友

本文实例讲述了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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表