Python 3.x 使用scapy发送ARP请求并捕获响应,扫描本地网络的正确方式是什么?
我想做一个网络扫描器,将ARP请求发送到ff:ff:ff:ff:ff:ff的广播mac地址。 我编写的代码从局域网中的所有设备获得响应,但当我再次运行它时,与第一次扫描相比,它总是显示较少的设备Python 3.x 使用scapy发送ARP请求并捕获响应,扫描本地网络的正确方式是什么?,python-3.x,pip,scapy,Python 3.x,Pip,Scapy,我想做一个网络扫描器,将ARP请求发送到ff:ff:ff:ff:ff:ff的广播mac地址。 我编写的代码从局域网中的所有设备获得响应,但当我再次运行它时,与第一次扫描相比,它总是显示较少的设备 def check_arping(ip): arp_request = scapy.ARP(pdst = ip) broadcast = scapy.Ether(dst = "ff:ff:ff:ff:ff:ff") arp_request_broadcast = broadcast / arp_re
def check_arping(ip):
arp_request = scapy.ARP(pdst = ip)
broadcast = scapy.Ether(dst = "ff:ff:ff:ff:ff:ff")
arp_request_broadcast = broadcast / arp_request
answered_list = scapy.srp(arp_request_broadcast, timeout = 1, verbose = False)[0]
clients_list = []
for eachelement in answered_list:
client_dict = {
"IP": eachelement[1].psrc,
"MAC": eachelement[1].hwsrc
}
clients_list.append(client_dict)
return clients_list
您的代码似乎是正确的 ARP结果变化很大。事实上,出于安全原因,一些设备(例如大多数苹果设备)不回复广播请求或注册免费ARP(并且只在需要时回复)。并非所有设备都可用于扫描,导致扫描结果不同 你能做的是:
- 在超时的情况下执行多个扫描,并对结果求和
- 执行被动ARP扫描(需要更长的时间):嗅探网络中其他客户端之间的ARP数据包,并在看到的每个数据包上注册客户端
- 保留当前代码:-)