我对在Mac上编程是个新手。我希望始终确保我的程序管理的所有网络接口在ARP缓存中都有一个网关的MAC地址。为此,如果我检测到GW的MAC地址丢失,我希望以编程方式向GW发送一个ARP请求。
在Mac上似乎不支持AF_PACKET/PF_PACKET地址族和协议上的原始套接字。在C++中有没有其他方法可以做到这一点?例如,是否有可用于发送ARP请求的API?
发布于 2013-11-10 17:22:25
如果需要确保每台主机都有与默认网关关联的正确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 tutorial。
https://stackoverflow.com/questions/19787783
复制相似问题