2

我是在 Mac 上编程的新手。我想始终确保由我的程序管理的所有网络接口在 ARP 缓存中都有一个 GW 的 MAC 地址。为此,如果我检测到它的 MAC 地址丢失,我想以编程方式向 GW 发送一个 ARP 请求。

Mac OS X 上似乎不支持 AF_PACKET/PF_PACKET 地址系列和协议上的原始套接字。在 C++ 中还有另一种方法可以做到这一点吗?例如,是否有可用于发送 ARP 请求的 API?

4

1 回答 1

1

如果您需要确保每个主机都有与默认网关关联的正确 ARP 条目,您可以设置静态 ARP 条目。静态 ARP 条目永远保留在 ARP 表中,因此您不需要定期发送 ARP 请求。

arp -s "IP_GW" "MAC_GW" -i "DEVICE YOU WANT TO SET, E.G: en0"

无论如何,您可以使用 C 库“libnet”(也适用于 Windows 和 Linux)发送 ARP 请求。这是一个较低级别的库,您需要处理字节级别的数据包及其标头。要创建 ARP 请求,您必须使用:

libnet_autobuild_arp()
libnet_autobuild_ethernet()

在这里你可以找到一个libnet 教程

于 2013-11-10T09:22:24.550 回答