Python 3.x 使用scapy发送ARP请求并捕获响应,扫描本地网络的正确方式是什么?

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

我想做一个网络扫描器,将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_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数据包,并在看到的每个数据包上注册客户端
  • 保留当前代码:-)

您能否澄清执行多次扫描并总结结果是什么意思?提前感谢:-)