从 MAC 地址获取 IP。 arp -a 不显示设备

Posted

技术标签:

【中文标题】从 MAC 地址获取 IP。 arp -a 不显示设备【英文标题】:Get IP from MAC address. arp -a not showing device 【发布时间】:2014-10-13 19:08:01 【问题描述】:

我正在尝试编写一个批处理文件,该文件应该在我的 android 手机连接到网络(Tenda WiFi 路由器)时找到动态分配的 IP。

所以我正在尝试arp -a 并搜索我手机的 MAC 地址,以便从表中获取它的 IP。

C:\Users\Leeroy>arp -a

Interface: 192.168.0.100 --- 0xb
  Internet Address      Physical Address      Type
  192.168.0.1           c8-3a-35-35-f6-68     dynamic
  192.168.0.255         ff-ff-ff-ff-ff-ff     static
  224.0.0.22            01-00-5e-00-00-16     static
  224.0.0.251           01-00-5e-00-00-fb     static
  224.0.0.252           01-00-5e-00-00-fc     static
  239.255.255.250       01-00-5e-7f-ff-fa     static
  255.255.255.255       ff-ff-ff-ff-ff-ff     static

问题是它没有出现在表格中!我试过ping 192.168.0.255,但它仍然没有出现。我尝试从手机的浏览器请求 192.168.0.100(我的台式电脑的 IP),这确实让手机受到关注。但是每次我希望它出现在 arp 表中时,我都无法选择手动执行此操作。

我如何让 Android 手机出现在 arp 表中(除了连​​接到 WiFi 之外不做任何事情)?

【问题讨论】:

This 可能会有所帮助。 我试图只依赖 Windows 命令。不安装任何东西。我宁愿只遍历所有地址并 ping 它们,即使这需要很长时间。 this怎么样 抱歉,刚刚看到您已经尝试过了。 我会在您的第二个 for 循环之前粘贴 timeout 1 > nul 或等效项,以避免出现竞争条件,即在您调用 arp -a 之前,您所使用的设备的 ping 回复没有回来。 【参考方案1】:

我已经尝试过了,它确实有效:

for /L %N in (1,1,254) do start /b ping -n 1 -w 200 192.168.0.%N

如果手机启用了ICMP,应该没问题。

【讨论】:

你可以使用 'start /b' 不会打开新的命令窗口 @jeb 完全正确,我忘记了那个选项。还添加了一些 ping 选项以使其更快返回。 我害怕去 ping 路由,因为我想象它会花费很长时间,但这真的很漂亮...... 使用已知 MAC 地址的过滤器表达式(如 eth.src == 12:34:56:78:9a:bc && eth.type == 0x0806)并行运行 Wireshark。这将在匹配时产生一个带有 Info 192.168.0.123 is at 12:34:56:78:9a:bc 的帧。如果网络上有很多设备,则从小型 ARP 缓存中刷新要找到的 IP 地址会很有帮助。 上述命令的更易读版本:for /L %N in (1,1,254) do @start /b ping -n 1 -w 200 192.168.0.%N | findstr -i 回复【参考方案2】:

M.S.Arun's 答案接近最佳。我在检索一些我只有 MAC 地址的虚拟机 IP 地址时遇到了这个问题。很多答案,如 M.S.Aruns 在 *** 和其他地方,但没有人解释它们,也没有正确解释解决方案(恕我直言)。

我尝试了 ping 所有子网的技术,然后执行 arp 命令。问题是我的 IP 范围有 60k+ 个可能的 IP 地址,并且在扫描了所有这些之后(这不是那么简单,而且使用 start 命令真的很难看)arp 表的填充量真的很差......顺便说一句,它花了大约 30 秒,即使在尝试“开始 ping”时。我最终发现,作为缓存表的 arp 会定期刷新自身,这就是为什么这种方法很少成功的原因。

解决方案是 ping 所有子网,但在每次 ping 后执行 arp 命令以查看 IP 是否与您的 MAC 地址匹配,这样可以确保您不会因为 arp 表的缓存特性而丢失信息。为了使它正确,我用Java实现了它; isReachable() 方法非常干净,并且在我的屏幕上到处都没有 cmd 提示。此外,使用 Java 线程扫描 60k+ 范围的 IP 最多需要 10 秒。我认为这是一种比批处理脚本更安全的方式...

请参阅threadedScan() method here,它接收 IP 数组并查找 MAC 地址。

希望这能有所帮助;)

【讨论】:

【参考方案3】:

如果您想从 MAC 中查找 IP,请执行此操作

$  arp -n | grep -w -i 'YOUR-MAC' | awk 'print $1'

注意你必须用你的mac地址替换YOUR-MAC,保留单引号

现在,如果你想从某个 IP 中找到 MAC 地址,试试这个:

$  arp -n | grep -w -i 'YOUR-IP' | awk 'print $3'

享受吧!

【讨论】:

【参考方案4】:

此批处理代码将获取以下内容,

    电脑名称 IP 地址 MAC 地址 计算机说明(如果有)

请将以下代码保存为 anyname.bat 格式并运行。它将在单独的文本文件中输出结果。

    :: This Windows Batch(CMD) File fetches All the Details of the Nearby PC's of Same VLAN (Upto 254 host's).
    :: Windows OS (CMD)
    :: Author : [M.S.Arun][1]

    :: #****************************************************************** Start of Script ********************************************************************#

    @echo off
    title Remote PC Details Fetching Script(PC Name / IP's / Computer Description)
    echo. > %cd%\PC_Details_Temp.txt
    echo Remote PC Details Fetching Script (PC Name / IP's / Computer Description) details of the Nearby PC's of Same VLAN.(Upto 254 Hosts)
    echo.
    set /p input_ip="Please Enter the IP Range(Eg:192.168.1) :  " && echo
    set /p input_ip_start="Please Enter Start IP Range(Eg:1) :  " && echo
    set /p input_ip_end="Please Enter End IP Range(Eg:254) :  " && echo
    echo. >> %cd%\PC_Details_Temp.txt
    @echo on
    for /l %%i in (%input_ip_start%, 1, %input_ip_end%) do nbtstat -a %input_ip%.%%i | findstr /c:"MAC" /c:"<00>" | findstr /c:"MAC" /c:"UNIQUE" >> %cd%\PC_Details_Temp.txt && echo     IP Address  = %input_ip%.%%i >> %cd%\PC_Details_Temp.txt
    @echo off
    echo. > %cd%\PC_Details_Logs.txt
    echo. > %cd%\PC_Details_Logs.txt
    echo This Batch Script fetches All the Details of the Nearby PC's of Same VLAN.(Starting from 1 to 254 host's) >> %cd%\PC_Details_Logs.txt
    echo. >> %cd%\PC_Details_Logs.txt
    echo. >> %cd%\PC_Details_Logs.txt
    echo PC Host Name: >> %cd%\PC_Details_Logs.txt
    find "UNIQUE" PC_Details_Temp.txt >> %cd%\PC_Details_Logs.txt
    echo. >> %cd%\PC_Details_Logs.txt
    echo PC IP Address: >> %cd%\PC_Details_Logs.txt
    find "IP" PC_Details_Temp.txt >> %cd%\PC_Details_Logs.txt
    echo. >> %cd%\PC_Details_Logs.txt
    echo PC MAC Address: >> %cd%\PC_Details_Logs.txt
    find "MAC" PC_Details_Temp.txt >> %cd%\PC_Details_Logs.txt
    echo. >> %cd%\PC_Details_Logs.txt
    echo PC Seat No's. and Vnet No's: >> %cd%\PC_Details_Logs.txt
    echo. >> %cd%\PC_Details_Logs.txt
    echo. >> %cd%\PC_Details_Logs.txt
    net view /all >> %cd%\PC_Details_Logs.txt
    echo. >> %cd%\PC_Details_Logs.txt
    echo. >> %cd%\PC_Details_Logs.txt
    arp -a >> %cd%\PC_Details_Logs.txt
    :: del %cd%\PC_Details_Temp.txt
    echo.
    echo Completed Successfully..!
    echo.
    pause

    :: #****************************************************************** End of Script ********************************************************************#

参考截图,

【讨论】:

以上是关于从 MAC 地址获取 IP。 arp -a 不显示设备的主要内容,如果未能解决你的问题,请参考以下文章

IP地址利用ARP协议获取MAC地址进行数据包的传送

ARP协议报文详解

ARP报文详解

ARP报文详解

认识ARP协议

ARP协议简介