Ip以编程方式使用Mac地址解析地址

时间:2014-07-10 13:10:32

标签: c++ linux network-programming

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

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

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

有没有办法确定Mac地址的IP地址?

1 个答案:

答案 0 :(得分:0)

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

- 您可以使用Packet套接字来实现您自己的第2层协议:您可以选择自己的协议代码而不是使用IP作为以太网帧的有效负载(例如:IP代替0x0800使用0xABAB,总是更大的数字比1536)

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

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

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

阅读本文:

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

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

我希望这会有所帮助。