【问题标题】:How to get the IP address of a remote host from its Ethernet address?如何从其以太网地址获取远程主机的 IP 地址?
【发布时间】:2010-03-20 22:49:42
【问题描述】:

我正在寻找一些 Linux 代码以从以太网地址中查找 IP 地址。我想我必须做一些逆向 ARP 技巧,但我没有找到任何例子......

【问题讨论】:

  • 你的意思是你想要一个来自mac的ip吗?
  • @Fred:当您说“Linux 代码”时,您是指编程语言中的代码吗?什么语言?
  • 以太网地址是 MAC 地址,所以是的 - 您需要使用 ARP/RARP 在 MAC 和 IP 地址之间进行转换。
  • 是来自 MAC 的 IP 以任何语言。我会根据自己的需要调整它。

标签: ip ethernet arp


【解决方案1】:

http://compnetworking.about.com/od/networkprotocolsip/f/convertipmacadd.htm

尝试发送 IP 广播(例如,ping 192.168.1.255,如果您的子网是 192.168.1.0/24)来填充您的 ARP 缓存,然后发送arp -a 将其全部吐出。

【讨论】:

    【解决方案2】:

    对于您与之通信的计算机,您可以查看它们的 arp 条目。例如,这在 /proc/net/arp 中以文本格式提供。为您知道但尚未与之通信的 MAC 查找 IP 地址要困难得多。在协议方面,最接近的匹配是 RARP,但它几乎从未使用过,因此您不太可能得到响应。

    您始终可以扫描您的本地子网,以确保在您的 arp 表中获得完整的视图。例如,请参阅 fping 以了解执行此操作的有效方法。请注意,主机实际上不需要响应相关 ping 来显示在 ARP 表中,因此即使在存在本地防火墙等情况下这也很有用。

    【讨论】:

    • @calmh 好的,所以没有其他办法。使用 ping 或 fping 发送 ICMP 数据包更好还是使用 arping 之类的方法更好?
    • Arping 会更有效,因为它避免了对您的目的而言不必要的 ICMP 步骤。但总体而言,fping 可能会更快,因为它并行化更多并且实际上用于快速扫描子网。最好的方法可能是自己快速发送 arp 问题,就像 arping 一样。让一个线程尽可能快地发送请求(或以合理的速率限制),另一个线程监听传入的响应。这样,您可能会在几秒钟内获得 /24 子网的全貌。
    【解决方案3】:

    看看 Thomas Habet 的Arping。我没有尝试过,但基本的想法是使用 IP 标头中的 broadcast 目标 IP 地址将 ICMP Ping 网络数据包发送到相关 MAC 地址。只有具有指定 MAC 地址的主机才会回复,并且回复将(通常)包含其 IP 地址。它并不总是有效,但它可能对你来说已经足够了。有关限制,请参阅项目自述文件。

    【讨论】:

    猜你喜欢
    • 2012-03-22
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2015-06-28
    • 2012-05-31
    • 1970-01-01
    相关资源
    最近更新 更多