首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将MAC地址转换为相应的IP地址?

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

Stack Overflow用户
提问于 2014-02-13 21:39:15
回答 4查看 7.1K关注 0票数 2

我正在寻找一种简单的方式来转换一个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上)。

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

  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机器上使用相同的方法,那就太好了。

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

EN

回答 4

Stack Overflow用户

发布于 2014-02-13 22:46:20

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

票数 3
EN

Stack Overflow用户

发布于 2014-02-13 23:13:19

我们之前必须这么做,但我不认为我们让它正常工作了。

我没有直接调用API,但是在Windows中很容易找到它们。这就是我们所使用的,所以我们的解决方案将不会移植到非Windows系统。

在我们的例子中,我们遇到了同样的障碍--不容易翻译。我们最终要做的是得到所有可用NIC的列表,然后循环遍历每一个试图将我们给定的MAC地址与从NIC结构中获得的MAC地址相匹配的每个up地址。

一旦找到匹配的地址,我们就查找给NIC结构的IP地址。

为了记录错误,我们继续查看是否找到了其他匹配项。这是一件好事,我们做了,因为我相信我们确实找到了多次,这不是因为一个MAC地址被克隆。

当我们知道这将是一个更困难的问题时,我们决定放弃所有的事情,只使用IP地址。

票数 1
EN

Stack Overflow用户

发布于 2014-02-13 22:40:40

不如试试系统命令arp try c++

代码语言:javascript
复制
system("arp");

这给你一个IP-MAC转换表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21766052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档