我是Mac上编程的新手。我想始终确保我的程序管理的所有网络接口都具有ARP缓存中GW的MAC地址。为此,我想以编程方式向GW发送ARP请求,如果我检测到它的MAC地址丢失。
对于AF_PACKET / PF_PACKET地址系列和协议上的原始套接字,Mac OS X似乎没有支持。还有其他方法可以在C ++中执行此操作吗?例如,是否有可用于发送ARP请求的API?
答案 0 :(得分:0)
如果您需要确保每个主机都有与默认网关关联的正确ARP条目,您可以设置静态ARP条目。静态ARP表项永远保留在ARP表中,因此您不需要定期发送ARP请求。
arp -s“IP_GW”“MAC_GW”-i“您想要设置的设备,E.G:en0”
无论如何,您可以使用C库“libnet”发送ARP请求(也适用于Windows和Linux)。这是一个较低级别的库,您需要处理字节级别的数据包及其标头。要创建ARP请求,您必须使用:
libnet_autobuild_arp() libnet_autobuild_ethernet()
在这里你可以找到一个libnet教程: https://repolinux.wordpress.com/2011/09/18/libnet-1-1-tutorial/#introduction