(ARP = 地址解析协议 - RFC 826)有没有办法通过用户世界程序在 Windows 上发送和接收 ARP 流量?在 Linux 上,我们可以只创建原始套接字来发送 ARP 流量,但在 Windows 上,我的研究表明我们需要编写一个可用于发送此类流量的驱动程序。我考虑过使用 WinPcap,但它在内部安装了一个可用于发送/接收此类流量的驱动程序。
我的问题是:在不安装驱动程序的情况下,Windows 是否有任何方式允许传输/接收 ARP 数据包?
(ARP = 地址解析协议 - RFC 826)有没有办法通过用户世界程序在 Windows 上发送和接收 ARP 流量?在 Linux 上,我们可以只创建原始套接字来发送 ARP 流量,但在 Windows 上,我的研究表明我们需要编写一个可用于发送此类流量的驱动程序。我考虑过使用 WinPcap,但它在内部安装了一个可用于发送/接收此类流量的驱动程序。
我的问题是:在不安装驱动程序的情况下,Windows 是否有任何方式允许传输/接收 ARP 数据包?
发送 ARP 数据包的最简单方法可能是使用SendARP
.
然后,您可以使用GetIpNetTable
从 IP 堆栈的 ARP 表中检索地址。为确保您获得当前地址,您通常需要DeleteIpNetEntry
删除该地址,然后SendARP
,然后等待一段时间GetIpNetTable
(如果需要重复几次,直到您获得一个包含所需地址条目的条目)。
或者,对于 Vista 或更新版本,您可以ResolveIpNetEntry2
更直接地检索数据。这会自动刷新地址的当前条目(如果有),发送 ARP 数据包,并返回当前结果(如果我没记错的话,它也用于更新堆栈的 ARP 表)。