如何将MAC地址转换为相应的IP地址?

时间:2014-02-13 21:39:15

标签: c++ c sockets networking

我正在寻找一种将MAC地址转换为本地网络中相应IP地址的简便方法。在我的例子中,只有两个设备:一个非常普通的PC(192.168.0.1)和一个科学仪器,它的ROM中有一个硬编码的任意IP地址(192.168.0.xxx)。 PC和仪器通过UDP插座与CAT5电缆直接连接。

我知道该仪器的MAC地址,但请假设其IP地址未知。我想编写一个C / C ++应用程序,它使用套接字连接与仪器进行通信。但是我需要在打开套接字之前知道IP地址(Windows上的WinSock,OS X和Linux上的sys / socket)。

目前我使用非常脏的方式,如下所示。

  1. 执行ping命令ping 192.168.0.2(注意:该工具不响应ping
  2. 从192.168.0.2重复此操作到192.168.0.255
  3. 执行arp -a以打印IP和MAC地址列表
  4. 从列表中找到已知的MAC地址和相应的IP地址
  5. 我想知道如何以更复杂的方式检索IP地址。如果我可以在Mac,Linux和Windows机器上使用相同的方法,那将是非常好的。

    据我所知,我必须向网络广播ARP数据包,以便从已知的IP地址检索MAC地址。但我找不到从MAC地址获取IP地址的方法。

4 个答案:

答案 0 :(得分:2)

对此没有好的通用解决方案,因为它与预期行为相反。较低级别的协议不应该需要知道更高层的协议,因此MAC层的操作没有任何好的方法来查找IP地址。然后你就会陷入你现在所处的境地。所以你可以像你已经拥有的代码一样使用hack,或者你可以从不同的方向解决这个问题。是否有任何非代码方式可以预先确定设备的IP地址?例如明确设置或将其放入应用程序的配置文件中。或者,您可以让设备发送虚假ARP请求吗? PC应根据传入的请求以及对其发出的请求的响应来更新其ARP缓存。

答案 1 :(得分:1)

我们不得不这样做一段时间,但我认为我们没有让它正常运作。

我没有现成的API调用,但在Windows API中很容易找到它们。这就是我们使用的,因此我们的解决方案无法移植到非Windows系统。

在我们的案例中,我们遇到了同样的障碍 - 没有简单的翻译。我们最终要做的是获取所有可用网卡的列表,然后遍历每个网络,尝试匹配我们给定的MAC地址与从NIC结构获得的MAC地址。

找到匹配后,我们查找了给NIC结构的IP地址。

我们一直在查看是否找到了其他匹配项以便记录错误。这是我们做的一件好事,因为我相信我们确实发现过多次,而且不是因为克隆了MAC地址。

当我们得知这将是一个更难的问题时,我们决定放弃整个事情并坚持使用IP地址。

答案 2 :(得分:0)

如何在 c ++

中尝试系统命令arp
system("arp");

这为您提供了一个IP-MAC转换表。

答案 3 :(得分:-1)

几天前,我也遇到了这个问题,但经过很多努力,我在下面找到了解决方案 MAC到IP地址转换器工具如何工作? MAC address converter可以将MAC地址转换为IPv4 IP地址,也可以将MAC地址转换为IPv6 IP地址,这些Internet协议地址非常常用。它以MAC地址作为输入字符串,并针对给定的MAC到IP地址和MAC转换选项(如MAC到IPV6或MAC到IPV4或两者)生成查询,以一起进行MAC地址转换。完成此MAC转换后,您还可以使用IPv6 to IPv4将MAC转换为IP转换更改。查询会根据所选选项生成输出响应。如果插入任何无效输入,则会生成无效输入消息响应