我是 Mac 编程新手。我想始终确保我的程序管理的所有网络接口(interface)在 ARP 缓存中都有一个 GW 的 MAC 地址。为此,如果我检测到 GW 的 MAC 地址丢失,我想以编程方式向 GW 发送 ARP 请求。
Mac OS X 似乎不支持 AF_PACKET/PF_PACKET 地址系列和协议(protocol)上的原始套接字。在 C++ 中还有其他方法可以做到这一点吗?比如有没有API可以用来发送ARP请求?
最佳答案
如果您需要确保每个主机都有正确的 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 请求。这是一个较低级别的库,您需要处理字节级别的数据包及其 header 。要创建 ARP 请求,您必须使用:
libnet_autobuild_arp()
libnet_autobuild_ethernet()
在这里你可以找到一个 libnet tutorial .
关于c++ - 如何在C++中发送ARP请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19787783/