使用scapy包以及icmp协议,实现一个局域网全IP地址扫描器,扫描出本网段所有在线主机,并打印IP地址到屏幕上。
时间: 2024-05-09 18:18:53 浏览: 137
以下是使用scapy包和icmp协议实现局域网全IP地址扫描器的Python代码:
```python
from scapy.all import *
def scan_network(ip):
# 构造icmp请求包
packet = IP(dst=ip)/ICMP()
# 发送icmp请求包并等待响应
response = sr1(packet, timeout=1, verbose=0)
# 如果有响应,则表示该主机在线
if response:
print(ip)
# 获取本机IP地址和子网掩码
conf.verb = 0
ip, subnet_mask = sr1(IP(dst="google.com")/ICMP(), verbose=0).src, get_if_raw_hwaddr(conf.iface)[1]
# 计算本网段IP地址范围
network_address = str(IPAddress(ip) & IPAddress(subnet_mask))
broadcast_address = str(IPAddress(ip) | IPAddress(~subnet_mask))
ip_range = [str(x) for x in range(int(network_address)+1, int(broadcast_address)-1)]
# 扫描本网段所有IP地址
for ip in ip_range:
scan_network(ip)
```
首先,我们需要使用scapy包中的sr1函数来发送icmp请求包并等待响应。如果有响应,则表示该主机在线,我们就可以将其IP地址打印到屏幕上。
为了扫描本网段所有IP地址,我们需要获取本机IP地址和子网掩码,并计算出本网段IP地址范围。这可以通过发送ICMP请求包到任意外部IP地址来获取本机IP地址和子网掩码,然后使用IPAddress类计算出本网段IP地址范围。
最后,我们循环遍历IP地址范围,并调用scan_network函数来扫描每个IP地址。注意,我们需要将conf.verb设置为0来禁止scapy输出详细的调试信息,以减少不必要的干扰。
阅读全文
相关推荐


















