在Linux上使用C ++parsingIP地址的MAC地址

我需要生成一个包含目标MAC地址的以太网报头(由于libnfnetlink在预发送之前只给出IP报头),因此出接口号也是已知的,所以可以在正确的networking中进行查找。

从IP地址parsingMAC地址的库/函数是什么?

Solutions Collecting From Web of "在Linux上使用C ++parsingIP地址的MAC地址"

目前还不清楚为什么你需要MAC地址,因为这通常是在较低的级别处理。

但是,假设您的目标位于本地以太网段上,则可以使用arp命令在本地高速缓存中查找值。 如果价值没有被缓存…那么,这是一个问题。 也许arping会帮助…

(通常情况下,你会发送一个数据包到,例如IP地址10.10.10.10,你的系统会发送一个ARP数据包,询问谁拥有10.10.10.10,并且一个响应会从该目标系统返回,并且其MAC地址,然后它会被缓存(你可以用tcpdump来观察这个情况)或者当一个系统上线的时候,它会发出一个广播信息,通知其他人的MAC地址,当然,如果你的目标位于另一个以太网段,你路由到一个网关,而不是直接到目的地,没有目的地的MAC地址可用。)

您可以阅读更多:

显然,你只能找到直接连接的IP地址的MAC地址,但没有平台无关的方式。 在Linux上,你可以在/proc/net/arp中找到目标后触发内核发送ARP。

编辑添加你也可以使用SIOCGARP ioctl()虽然它只是在ARP缓存中查找,所以如果没有已经存在的ARP,它将不会发送ARP。

否则,你将不得不制作自己的ARP请求数据包。 如果你走这条路线,你可能可以重用一堆arping的代码。

一般不能从IP地址获取MAC地址,实际上IP可以在以太网以外的数据链路协议上运行,有些IP地址没有对应的MAC地址。

MAC地址只可用,只在相同的以太网段有关。 在该段上,它可以通过ARP请求来检索。