我正在寻找一种简单的方法将 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)。
目前我使用一种非常肮脏的方式,如下所示。
- 执行 ping 命令
ping 192.168.0.2
(注:仪器不响应ping
) - 从 192.168.0.2 到 192.168.0.255 重复此操作
- 执行
arp -a
打印IP和MAC地址列表 - 从列表中查找已知的 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/