使用ARP从已知的MAC地址获取未知的IP地址?

3
我在Windows平台(Win7)上,有这样一个场景:我知道设备的MAC地址,但它们的IP地址是动态选择的,当设备启动时会自动获取IP地址。
我想编写一个批处理脚本,用于ping这些特定设备以确保它们正常运行。网络中还有许多其他设备,我不想对它们进行ping操作,只想对一组10个特定的MAC地址进行ping操作,并从中获取IP地址。这些设备的IP地址都在10.1.(1-255).(1-255)的地址范围内。
我已经知道了如何ping整个地址范围,现在只需要将其修改为ping特定的MAC地址即可。
arp -a > arp.txt

在此格式中输出包含 IP 列表和相关 MAC 地址的文档

Interface: 192.168.2.27 --- 0xb
  Internet Address      Physical Address      Type
  192.168.2.1           00-1f-90-c0-25-fd     dynamic   
  192.168.2.3           00-00-aa-a1-d3-78     dynamic   
  192.168.2.16          ac-72-89-a7-7e-98     dynamic   
  192.168.2.17          78-45-c4-2f-71-0b     dynamic   
  192.168.2.18          68-b5-99-8e-1c-35     dynamic   
  192.168.2.24          b8-ac-6f-30-00-34     dynamic   
  192.168.2.26          00-90-a9-6f-e0-be     dynamic   

我的问题是,我如何(通过批处理脚本或其他自动化方法)找到我感兴趣的MAC地址所在的行,并将IP地址放入一个变量中,以便我随后使用。在UNIX中,我可以使用grep命令,但在Windows中我不知道该怎么做。谢谢提前帮助。

2
安装Cygwin并按照您已经了解的Unix方式进行操作? - Brian Knoblauch
findstr 对你有用吗...? - Joachim Isaksson
@rpax,typecat的等价命令,findfindstrgrep的等价命令。 - Drew Chapin
@druciferre 谢谢你!我把一个命令和另一个搞混了。 - rpax
@BrianKnoblauch 我无法以那种方式修改我正在工作的系统。如果需要,我可以运行便携式exe文件,但不幸的是无法安装Cygwin :( - eumoria
2个回答

2
将输出管道传输到find并使用for循环。
for /f "tokens=1,2,3 delims= " %%i in ('arp -a ^| find "00-1f-90-c0-25-fd"') do (
    set ip=%%i
    set mac=%%j
)

您可以稍微更改一下,制作一个批处理脚本,通过输入MAC地址进行ping测试,如下所示:pingbymac.bat 00-1f-90-c0-25-fd

@for /f "tokens=1,2,3 delims= " %%i in ('arp -a ^| find "%~1"') do (
    ping %%i 
)

1
如果存在,您可以使用%〜1来删除任何周围的引号,否则它将像%1一样运行。离题了,但这允许在任何比较中使用类似“%〜1”的结构,并且将处理带引号或不带引号的术语并始终返回带引号的术语。 - foxidrive

1

找到这行代码:

arp -a |find "78-45-c4-2f-71-0b"

仅查找IP地址:
for /f %i in ('arp -a ^|find "2c-27-d7-ef-f8-77"') do echo %i

如果在批处理文件中使用,将%i替换为%%i


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