gpt4 book ai didi

c++ - 以编程方式使用 Mac 地址解析 IP 地址

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:56 28 4
gpt4 key购买 nike

我正在编写一个用 C++ 编写的发现程序,该程序将在 Linux 上运行,使我能够确定某些设备是否连接到网络。我有其他设备的 Mac 地址,我需要解析它们的 IP 地址。

我检查了/proc/net/arp 并且设备没有出现。我尝试 ping 广播地址,但未到达目标,因此 ARP 缓存未更新。但是,如果我直接 ping ip 地址,它就是(但这不是一个选项)。

此外,设备可以配置静态 IP,也可以通过 dhcp 获取它们。

有什么方法可以确定给定 Mac 地址的 IP 地址吗?

最佳答案

几年前我曾建议使用 RARP,但 Linux 内核不再支持它。除非已经有解决方案,否则我建议您使用以下自制解决方案:

-您可以使用数据包套接字来实现您自己的第 2 层协议(protocol):您可以选择自己的协议(protocol)代码,而不是使用 IP 作为以太网帧的有效负载(例如:对于 IP,请使用 0xABAB,而不是 0x0800,始终大于 1536)

-在每个节点中,您实现一个简单的服务器,该服务器使用数据包套接字来读取具有该协议(protocol)代码的帧,或者您可以根据需要使用 pcap。

- 每当您需要另一个节点的 IP 地址时,您都会向该 MAC 地址发送以太网帧。服务器将读取新帧并用另一个传送其自己的 IP 地址的帧进行响应。

-如果您选择此解决方案,请记住有效负载必须至少为 46 字节长,因此您可能需要使用填充。您还可以将 TLV(类型长度值)格式用于您自己的协议(protocol)。

阅读此内容:

http://en.wikipedia.org/wiki/Ethernet_frame

http://man7.org/linux/man-pages/man7/packet.7.html

我希望这会有所帮助。

关于c++ - 以编程方式使用 Mac 地址解析 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24677452/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com