c++ - 如何将MAC地址转换为对应的IP地址?

标签 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 地址

我想知道如何以更复杂的方式检索 IP 地址。如果我能在 Mac、Linux 和 Windows 机器上使用相同的方法,那就太好了。

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

最佳答案

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

关于c++ - 如何将MAC地址转换为对应的IP地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21766052/

相关文章:

c++ - SetupAPI.DLL 到 HID.DLL

c++ - 我可以在核心 i7 上获得的最大 cpu 使用率是多少

C:如何扩展可变长度字符串以设置长度

python - 错误: incompatible types when assigning to type ‘__complex__ double *’ from type ‘complex double’

c# - 我如何判断套接字何时断开连接

iPhone sdk 套接字 - 使用的带宽

C++ vector 插入开始

c - 接受第一个数字后链接列表崩溃

java - Java中的Netcat通信

c++ - 如果字符串中有空格,String.size() 返回不正确的数字