如何在C++中发送 ARP 请求

How to send ARP requests in C++

本文关键字:ARP 请求 C++      更新时间:2023-10-16

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

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

如果您需要确保每个主机都有与默认网关关联的正确 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教程。