本文實例講述了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
44
45
46
47
48
49
50
51
|
import sys import socket import multiprocessing def ports(ports_service): #獲取常用端口對應的服務名稱 for port in list ( range ( 1 , 100 )) + [ 143 , 145 , 113 , 443 , 445 , 3389 , 8080 ]: try : ports_service[port] = socket.getservbyport(port) except socket.error: pass def ports_scan(HOST, ports_service): ports_open = [] try : sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #sock.settimeout(60) except socket.error: print ( 'socket creation error' ) sys.exit() for port in ports_service: try : #嘗試連接指定端口 sock.connect((HOST,port)) #記錄打開的端口 ports_open.append(port) sock.close() except socket.error: pass return ports_open if __name__ = = '__main__' : m = multiprocessing.Manager() ports_service = dict () results = dict () ports(ports_service) #創建進程池,允許最多8個進程同時運行 pool = multiprocessing.Pool(processes = 8 ) net = '192.168.0.' for host_number in map ( str , range ( 105 , 106 )): host = net + host_number #創建一個新進程,同時記錄其運行結果 results[host] = pool.apply_async(ports_scan, (host, ports_service)) print ( 'starting ' + host + '...' ) #關閉進程池,close()必須在join()之前調用 pool.close() #等待進程池中的進程全部執行結束 pool.join() #打印輸出結果 for host in results: print ( '=' * 30 ) print (host, '.' * 10 ) for port in results[host].get(): print (port, ':' , ports_service[port]) |
二 運行結果
starting 192.168.0.105...
==============================
192.168.0.105 ..........
80 : http
希望本文所述對大家Python程序設計有所幫助。
原文鏈接:https://blog.csdn.net/chengqiuming/article/details/78601148