我正在寻找一种简单的方式来转换一个MAC地址到相应的IP地址在一个本地网络。在我的例子中,只有两个设备:一个非常普通的PC (192.168.0.1)和一个在ROM中硬编码的具有任意IP地址(192.168.0.xxx)的科学仪器。PC机和仪器通过CAT5电缆直接连接到UDP插座上。
我知道该仪器的MAC地址,但请假定它的IP地址未知。我想写一个C/C++应用程序,它使用套接字连接与仪器对话。但是在打开套接字之前,我需要知道IP地址(WinSock在Windows上,sys/socket在OS和Linux上)。
目前,我使用了一个非常肮脏的方式,如下所示。
ping 192.168.0.2 (注意:仪器不响应ping)arp -a打印IP和MAC地址列表我想知道如何以更复杂的方式检索IP地址。如果我能在Mac、Linux和Windows机器上使用相同的方法,那就太好了。
据我所知,为了从已知的IP地址中检索MAC地址,我必须向网络广播一个ARP数据包。但是我找不到从MAC地址获取IP地址的方法。
发布于 2014-02-13 22:46:20
这方面没有好的通用解决方案,因为它与预期的行为相反。低层协议不需要知道更高层的协议,所以MAC层的操作没有找到IP地址的好方法。然后你就陷入了你现在的处境。因此,您可以使用像您已经拥有的代码这样的黑客,或者您可以从另一个方向处理这个问题。是否有任何非编码方式来确定设备的IP地址?例如,显式地设置它,或者将其放入应用程序的配置文件中。或者,你能让设备发送虚假的ARP请求吗?PC应该根据传入的请求以及对请求的响应来更新其ARP缓存。
发布于 2014-02-13 23:13:19
我们之前必须这么做,但我不认为我们让它正常工作了。
我没有直接调用API,但是在Windows中很容易找到它们。这就是我们所使用的,所以我们的解决方案将不会移植到非Windows系统。
在我们的例子中,我们遇到了同样的障碍--不容易翻译。我们最终要做的是得到所有可用NIC的列表,然后循环遍历每一个试图将我们给定的MAC地址与从NIC结构中获得的MAC地址相匹配的每个up地址。
一旦找到匹配的地址,我们就查找给NIC结构的IP地址。
为了记录错误,我们继续查看是否找到了其他匹配项。这是一件好事,我们做了,因为我相信我们确实找到了多次,这不是因为一个MAC地址被克隆。
当我们知道这将是一个更困难的问题时,我们决定放弃所有的事情,只使用IP地址。
发布于 2014-02-13 22:40:40
不如试试系统命令arp try c++
system("arp");这给你一个IP-MAC转换表。
https://stackoverflow.com/questions/21766052
复制相似问题