Python_网络攻击之端口

 1 #绝大多数成功的网络攻击都是以端口扫描开始的,在网络安全和黑客领域,端口扫描是经常用到的技术,可以探测指定主机上是否
 2 #开放了指定端口,进一步判断主机是否运行了某些重要的网络服务,最终判断是否存在潜在的安全漏洞,从一定意义上将也属于系统运维的范畴
 3 
 4 #端口扫描器程序:模拟端口扫描器的工作原理,并采用多进程技术提高扫描速度
 5 import socket
 6 import sys
 7 import multiprocessing
 8 
 9 def ports(ports_serve):
10     #获取常用端口对应的服务名称
11     for port in list(range(1,100))+[143,145,113,443,445,3389,8080]:
12         try:
13             ports_serve[port]=socket.getservbyport(port)
14         except socket.error:
15             pass
16 
17 def ports_scan(host,ports_service):
18     ports_open=[]
19     try:
20         sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
21         #超时时间的不同会影响扫描结果的精确度
22         socket.timeout(0.01)
23     except socket.error:
24         print('socket creation error')
25         sys.exit()
26     for port in ports_service:
27         try:
28             #尝试连接指定端口
29             sock.connect((host,port))
30             #记录打开的端口
31             ports_open.append(port)
32             sock.close()
33         except socket.error:
34             pass
35     return ports_open
36 
37 if __name__ == '__main__':
38     m=multiprocessing.Manager()
39     ports_service=dict()
40     results=dict()
41     ports(ports_service)
42     #创建进程池,允许最多8个进程同时运行
43     pool = multiprocessing.Pool(processes=8)
44     net = '10.2.1.'
45     for host_number in map(str,range(8,10)):
46         host = net + host_number
47         #创建一个新进程,同时记录其运行结果
48         results[host] = pool.apply_async(ports_scan,(host,ports_service))
49         print('starting '+host+'...')
50     #关闭进程池,close()必须在join()之前调用
51     pool.close()
52     #等待进程池中的进程全部执行结束
53     pool.join()
54 
55     #打印输出结果
56     for host in results:
57         print('='*30)
58         print(host,'.'*10)
59         for port in results[host].get():
60             print(port,':',ports_service[port])
61 
62 #Python扩展库netaddr提供了大量可以处理网络地址的类和对象,例如netaddr.valid_ipv4(addr)可以判断addr时否为合法IPv4地址
63 #netaddr.IPNetwork('10.2.1.0/24')和netaddr.IPRange('10.2.1.0','10.2.1.255')都可以用来生成包含介于10.2.1.0到10.2.1.255之间的IP地址的迭代对象。
原文地址:https://www.cnblogs.com/cmnz/p/7087123.html