Python 扫描IP段 指定端口是否开放

Python 扫描IP段 指定端口是否开放

TCP21.py 

01 #!/usr/local/bin/python
02 #-*- coding: UTF-8 -*-
03 ####################################################################
04 ##################################################
05 #qq:316118740
07 # Python 扫描IP段  指定端口是否开放
08 #  刚学写的不好请大家见谅
09 ##################################################
10 import socket
11 import threading,time
12 socket.setdefaulttimeout(10)  #设置了全局默认超时时间
13 #查看IP端口是否开放
14 class socket_port(threading.Thread):
15     def __init__(self,cond, name):
16         super(socket_port, self).__init__()
17         self.cond = cond
18         self.cond.set()#将标识位设为Ture
19         self.HOST = name
20     def run(self):
21         #time.sleep(1) #确保先运行Seeker中的方法
22         try:
23             PORT=21
24             = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
25             s.connect((self.HOST,PORT))
26             print""
27             print self.HOST,u":",PORT,u"端口开放"
28             #self.cond.wait()#堵塞线程,直到Event对象内部标识位被设为True或超时(如果提供了参数timeout)。
29             self.cond.set()#将标识位设为Ture
30             return 1
31         except:
32             print ".",
33             #print self.HOST,u":",PORT,u"端口未开放"
34             #self.cond.wait()#堵塞线程,直到Event对象内部标识位被设为True或超时(如果提供了参数timeout)。
35             self.cond.set()#将标识位设为Ture
36         return 0
37 ##
38 #socket_port("192.168.2.1")
39 #if socket_port("192.168.2.100"):
40 #    print "开放"
41 #else:
42 #    print "未开放"
43  
44 def ip2num(ip):
45     ip = [int(x) for in ip.split('.')]
46     return ip[0]<<24 | ip[1]<<16 | ip[2]<<8 | ip[3]
47  
48 def num2ip(num):
49     #time.sleep(0.05) #50ms
50     #time.sleep(0.1) #s
51 #    data='%s.%s.%s.%s' % (  (num & 0xff000000) >> 24,
52 #                                 (num & 0x00ff0000) >> 16,
53 #                                 (num & 0x0000ff00) >> 8,
54 #                                  num & 0x000000ff  )
55 #    #socket_port(data)  #查看IP端口是否开放
56     if num>=IPend:
57         print u"IP导入数组完成"
58     return '%s.%s.%s.%s' % (  (num & 0xff000000) >> 24,
59                               (num & 0x00ff0000) >> 16,
60                               (num & 0x0000ff00) >> 8,
61                               num & 0x000000ff  )
62  
63 def gen_ip(ip1,ip2):  #返回数组
64 #    ip
65 #    global IPend
66 #    start, IPend = [ip2num(x) for x in ip.split('-')]
67     global IPend
68     IPend=ip2
69     return [num2ip(num) for num in range(ip1,ip2+1if num & 0xff]
70  
71 import ini
72 if __name__=='__main__':
73     ini.ini_get()  #读取INI
74     list_ip=gen_ip(ip2num(ini.IP1),ip2num(ini.IP2))
75     I1 = 0 #得到list的第一个元素
76     print u"开始扫描IP"
77     ip=0
78     while I1 < len(list_ip):
79         #print list_ip[I1]
80         time.sleep(0.3#确保先运行Seeker中的方法
81         cond = threading.Event()
82         hider = socket_port(cond,list_ip[I1])
83         hider.start()
84         if ip>=255:
85             ini.ini_write(list_ip[I1],ini.IP2)  #修改INI
86             print ip
87             ip=0
88         ip=ip+1
89         I1 = I1 + 1   #一层
 ini.py 
01 #!/usr/local/bin/python
02 #-*- coding: UTF-8 -*-
03 ##################################################
04 #qq:316118740
06 # Python 操作ini文件
07 #  刚学写的不好请大家见谅
08 ##################################################
09  
10 IP1=""  #扫描IP
11 IP2=""   #当前已经扫到的IP
12 INITXT="IP.ini"  #INI文件名字
13  
14 import ConfigParser
15 def ini_get():  #读取INI
16     try:
17         global IP1
18         global IP2
19         global INITXT
20         config = ConfigParser.ConfigParser()
21         config.readfp(open(INITXT))
22         IP1 = config.get("ipdata","ip1")
23         IP2 = config.get("ipdata","ip2")
24     except:
25         print "读取INI错误"
26         ini_add("","")  #写入INI
27  
28 def ini_add(ip1,ip2):  #写入INI
29     try:
30         global INITXT
31         config = ConfigParser.ConfigParser()
32         config.add_section("ipdata")# 设置section段及对应的值
33         config.set("ipdata","ip1",ip1)
34         config.set("ipdata","ip2",ip2)
35         config.write(open(INITXT, "w"))# 写入文件
36     except:
37        print "写入INI错误"
38  
39 def ini_write(ip1,ip2):  #修改INI
40     try:
41         global INITXT
42         config = ConfigParser.ConfigParser()
43         config.read(INITXT)
44         if not config.has_section("ipdata"):#看是否存在该Section,不存在则创建
45             temp = config.add_section("")
46         config.set("ipdata","ip1",ip1)
47         config.set("ipdata","ip2",ip2)
48         config.write(open(INITXT, "r+"))
49     except:
50         print "修改INI错误"
51         ini_add("","")  #写入INI
52  
53  
54 #if __name__=='__main__':
55 ##    ini_get()  #读取INI
56 ##    print IP1
57 ##    print IP2
58 #
59 ##    ini_add("222222222","3333333333333")  #写入INI
60 ##    ini_get()  #读取INI
61 ##    print IP1
62 ##    print IP2
63 #
64 #    ini_write("999999999","0000000000")  #修改INI
65 #    ini_get()  #读取INI
66 #    print IP1
67 #    print IP2
运行
1 python TCP21.py
转自: http://www.sharejs.com/codes/python/5338

利用了里面的两个函数

def ip2num(ip):
    ip = [int(x) for x in ip.split('.')]
46
    return ip[0]<<24 | ip[1]<<16 | ip[2]<<8 | ip[3]
def num2ip(num):
    return '%s.%s.%s.%s' % (  (num & 0xff000000) >> 24,
                              (num & 0x00ff0000) >> 16,
                              (num & 0x0000ff00) >> 8,
                              num & 0x000000ff  )

其它地方没仔细验证



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值