本文实例讲述了python实现的多线程端口扫描功能。分享给大家供大家参考,具体如下:
下面的程序给出了对给定的ip主机进行多线程扫描的Python代码
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
|
#!/usr/bin/env python #encoding: utf-8 import socket, sys, thread, time openPortNum = 0 socket.setdefaulttimeout( 3 ) def usage(): print '''''Usage: Scan the port of one IP: python port_scan_multithread.py -o <ip> Scan the port of one IP: python port_scan_multithread.py -m <ip1, ip2, ip3, ip4 ...> ''' print 'Exit' sys.exit( 1 ) def socket_port(ip, PORT): global openPortNum if PORT > 65535 : print 'Port scanning beyond the port range, interrupt to scan' sys.exit( 1 ) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = s.connect_ex((ip, PORT)) if (result = = 0 ): print ip, PORT, 'is open' openPortNum + = 1 s.close() def start_scan(IP): for port in range ( 0 , 65535 + 1 ): thread.start_new_thread(socket_port, (IP, int (port))) time.sleep( 0.006 ) if __name__ = = '__main__' : t = 0 if len (sys.argv)< 2 or sys.argv[ 1 ] = = '-h' : usage() elif sys.argv[ 1 ] = = '-o' : ONE_IP = raw_input ( 'Please input ip of scanning: ' ) t = time.time() start_scan(ONE_IP) elif sys.argv[ 1 ] = = '-m' : MANY_IP = raw_input ( 'Please input many ip of scanning: ' ) IP_SEG = MANY_IP.split( ',' ) t = time.time() for i in IP_SEG: start_scan(i) print print 'total open port is %s, scan used time is: %f ' % (openPortNum, time.time() - t) |
运行效果图
希望本文所述对大家Python程序设计有所帮助。