首页 文章

在Linux上使用C解析IP地址的MAC地址

提问于
浏览
5

我需要生成一个包含目标MAC地址的以太网头,(因为libnfnetlink在预先路由发生之前只给出了IP头),外出接口号也是已知的,因此可以在正确的网络中进行查找 .

从IP地址解析MAC地址的库/功能是什么?

3 回答

  • 1

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

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

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

    您可以进一步阅读:

  • 8

    显然,您只能找到直接连接的IP地址的MAC地址,但是没有与平台无关的方法 . 在Linux上,您可以在向目标发送内容后查看 /proc/net/arp 以触发内核发送ARP .

    编辑添加你也可以使用 SIOCGARP ioctl() 虽然只是查看ARP缓存,所以它赢得了't send an ARP if there isn' t已经存在 .

    否则,您将不得不制作自己的ARP请求数据包 . 如果你走那条路,你可能会重用arping中的一堆代码 .

  • 4

    您通常无法从IP地址获取MAC地址,事实上,由于IP可以在除以太网之外的数据链路协议上运行,因此某些IP地址没有相应的MAC地址 .

    MAC地址仅可用,并且仅在相同的以太网段上相关 . 在该段上,可以通过ARP请求检索它 .

相关问题