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

标签 c++ macos arp

我是 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/

相关文章:

c++ - Boost.Python - 公开一个类

C++。如何返回空指针而不是函数返回类型?

c++ - 在 C++ 中实现 Hashmap::模板化数据类型的散列函数

macos - 使用 Core Graphics 绘制雾

c++ - 为什么将引用分配给非引用会改变其动态行为

git 状态不能与 Virtualbox 共享文件夹一起正常工作

swift - macOS 上的 CoreLocation 始终返回禁用位置服务

ip - 如何在 Linux 中 ping MAC 地址

c++ - 为什么我的程序不发送 ARP 请求 (c++)?

将 ARP 表复制到数组