本文实例讲述了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