视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Python扫描IP段查看指定端口是否开放的方法
2020-11-27 14:41:04 责编:小采
文档

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

#!/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:

#!/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程序设计有所帮助。

下载本文
显示全文
专题