Python中的网络扫描仪
网络扫描仪是分析网络上可用主机的一种主要工具。网络扫描仪是一种 IP 扫描仪,用于扫描连接到多台计算机的网络。
要获取网络上可用主机的列表,有两种基本方法 -
ICMP 回显请求
也可以通过使用“ping 命令”来了解。使用 IP 地址将 ICMP 数据包发送到主机,如果收到 ICMP 回显,则表示主机在线并正在接收信号。为此,有必要获取您希望测试主机是否连接的所有 IP 地址。此方法的工作原理是假设网络设备启用了 ICMP。
import subprocess for ping in range(1,10): address = "127.0.0." + str(ping) res = subprocess.call(['ping', '-c', '3', address]) if res == 0: print( "ping to", address, "OK") elif res == 2: print("no response from", address) else: print("ping to", address, "failed!")
输出:
此代码遍历所有可用的 IP 地址,ping 它们并检查回复。如果收到回声,则意味着主机已连接,如果没有收到回声,则看起来主机已关闭。
注意:个人防火墙或通用防火墙通常设置为所谓的“隐身模式”,用于不对 ICMP 回显请求做出反应。TCP 扫描
为了克服回声请求方法的缺点,引入了TCP扫描方法,该方法适用于三次握手方法。这种方法有一个预先假设,即网络上的主机是开放的端口,我们必须猜测哪个端口是开放的。端口因您使用的操作系统而异。不同的操作系统具有下面列出的开放依赖端口。
- linux:[20、21、22、23、25、80、111、443、445、631、993、995]
- 窗户:[135、137、138、139、445]
- 麦克:[22、445、548、631]
3 次握手方法
三向握手是 TCP/IP 网络中用于在本地主机/客户端和服务器之间创建连接的方法。这是一个三步方法,要求客户端和服务器在实际数据通信开始之前交换 SYN 和 ACK(确认)数据包。
三向握手主要用于创建 TCP 套接字连接。它在以下情况下起作用:- 客户端节点通过 IP 网络将 SYN 数据包发送到同一网络或外部网络上的服务器。此数据包的目的是询问/推断服务器是否为新连接打开。
- 目标服务器必须具有可以接受和启动新连接的开放端口。当服务器收到来自客户端节点的 SYN 数据包时,它会做出响应并返回一个确认回执——ACK 数据包或 SYN/ACK 数据包。
- 客户端节点接收来自服务器的 SYN/ACK 并以 ACK 数据包进行响应。
完成此过程后,将创建连接并且主机和服务器可以通信。
#importing socket module import socket #creates a new socket using the given address family. socket_obj = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #setting up the default timeout in seconds for new socket object socket.setdefaulttimeout(1) #returns 0 if connection succeeds else raises error result = socket_obj.connect_ex((addr,port)) #address and port in the tuple format #closes te object socket_obj.close()