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

18

我正试图编写一个批处理文件,该文件应该能够在我的安卓手机连接到网络(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表中。但我不想每次想要在arp表中看到它时都手动执行此操作。
如何使Android手机出现在arp表中(除了连接到WiFi之外,不需要从手机上执行任何操作)?

1
这个可能会有帮助:http://security.stackexchange.com/questions/36198/how-to-find-live-hosts-on-my-network - PaddyD
我正在尝试仅依赖于Windows命令,而不安装任何东西。我宁愿循环遍历所有地址并对它们进行ping操作,即使这将花费太长时间。 - SouPress
这个怎么样?(http://superuser.com/questions/110817/finding-all-icmp-enabled-hosts-on-local-subnet) - PaddyD
抱歉,刚看到你已经尝试过了。 - PaddyD
1
我建议在第二个for循环之前加入timeout 1 > nul或等效命令,以避免竞争条件的发生。竞争条件指的是当你调用arp -a时,你所寻找的设备还没有返回ping响应。 - PaddyD
如果您已经找到了解决方案,请将其作为回答发布,而不是将其编辑到问题中。 - Rob
4个回答

13

我尝试过这个方法,它有效:

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

只要手机启用了ICMP,你就不应该有任何问题。


2
你可以使用 'start /b' 命令,这样就不会打开新的命令窗口。 - jeb
@jeb 说得对,我忘记了那个选项。还添加了一些ping的选项,使其更快地返回。 - PaddyD
我一开始很担心采用ping的方式,因为我想这可能会花费很长时间,但实际上这非常顺畅... - SouPress
在已知MAC地址的情况下,使用类似于eth.src == 12:34:56:78:9a:bc && eth.type == 0x0806的过滤表达式并行运行Wireshark。这将在匹配时产生一个信息为“192.168.0.123 is at 12:34:56:78:9a:bc”的帧。如果网络上有很多设备,且IP地址被清除了小型ARP缓存,则此方法非常有用。 - Burkart
1
以下是一个稍微易读一些的命令版本: for /L %N in (1,1,254) do @start /b ping -n 1 -w 200 192.168.0.%N | findstr -i reply - Scrybe

4

M.S.Arun's的回答接近最佳。我曾经遇到这样的问题,需要检索一些虚拟机的IP地址,但我只有MAC地址。像M.S.Aruns在stackoverflow和其他地方的许多答案都没有解释它们,也没有正确解释解决方案(在我看来)。

我尝试了先ping所有子网,然后执行arp命令的技术。问题是我的IP范围有60k+个可能的IP地址,扫描所有这些地址并不简单,而且使用"start ping"也非常麻烦。arp表格也很少被填充...顺便说一下,即使使用"start ping",也需要30秒左右的时间。最终,我发现arp作为缓存表,会定期清除自己,这就是为什么这种方法很少成功的原因。

解决方案是对所有子网进行ping,但每次ping后执行arp命令以查看IP是否与您的MAC地址匹配,这可以确保您不会因ARP表的缓存特性而丢失信息。为了使其更加规范,我用Java实现了这个功能;isReachable()方法真的很干净,屏幕上没有出现任何cmd提示。此外,使用Java线程扫描60k+范围的IP需要最多10秒钟。我认为这比批处理脚本更安全...请参见threadedScan()方法,它接受一个IP数组并查找MAC地址。希望这能有所帮助;)

1
如果你想从MAC地址中查找IP,请执行以下操作。
$  arp -n | grep -w -i 'YOUR-MAC' | awk '{print $1}'

请注意,您必须将 YOUR-MAC 替换为您的 MAC 地址,保留单引号。
现在,如果您想从某个 IP 查找 MAC 地址,请尝试以下操作:
$  arp -n | grep -w -i 'YOUR-IP' | awk '{print $3}'

享受!


1

这个批处理代码将获取以下信息:

  1. 计算机名称
  2. IP地址
  3. MAC地址
  4. 计算机描述(如果可用)

请将下面的代码保存为任意名称.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 ********************************************************************#

参考截图, 在此输入图片描述

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接