如何对arp -a返回的所有地址自动执行tracert以识别局域网设备名称?
批处理实现arp地址批量tracert
以下是可直接运行的批处理脚本,会自动解析arp -a输出的所有IP地址,过滤掉无效地址后逐个执行tracert,结果会自动保存到本地文件:
@echo off setlocal enabledelayedexpansion :: 配置结果保存路径 set "output_file=局域网设备探测结果.txt" echo 局域网设备探测结果 > %output_file% echo 探测时间: %date% %time% >> %output_file% echo ====================================== >> %output_file% :: 解析arp输出提取IP地址 for /f "tokens=1" %%a in ('arp -a ^| findstr /r /c:"^[0-9]"') do ( set "ip=%%a" :: 过滤回环地址、广播地址,可自行添加本网段过滤规则 if not "!ip:~0,3!"=="127" if not "!ip:~-3!"=="255" ( echo 正在探测: !ip! echo. >> %output_file% echo 设备IP: !ip! >> %output_file% echo 路由追踪结果: >> %output_file% :: -d参数关闭域名解析加快速度,需要解析名称可删除该参数 tracert -d -h 5 !ip! >> %output_file% ) ) echo 探测完成,结果已保存到 %output_file% pause
更适合获取设备名称的优化方案
tracert核心用途是探测路由路径,如果你只是要获取IP对应的设备名称,用ping -a或者nbtstat效率会高很多,替代脚本如下:
@echo off setlocal enabledelayedexpansion set "output_file=局域网设备名称列表.txt" echo 局域网设备名称列表 > %output_file% echo 探测时间: %date% %time% >> %output_file% echo ====================================== >> %output_file% echo IP地址 设备名称 >> %output_file% echo -------------------------------------- >> %output_file% for /f "tokens=1" %%a in ('arp -a ^| findstr /r /c:"^[0-9]"') do ( set "ip=%%a" if not "!ip:~0,3!"=="127" if not "!ip:~-3!"=="255" ( echo 正在解析: !ip! :: 仅发送1次ICMP包加快解析速度 for /f "tokens=2 delims=[] " %%b in ('ping -a -n 1 !ip! ^| findstr /r /c:"Pinging.*\["') do ( set "hostname=%%b" echo !ip! !hostname! >> %output_file% ) ) ) echo 解析完成,结果已保存到 %output_file% pause
使用注意事项
- 部分未开启ICMP响应的设备无法通过
ping -a解析名称,可以将脚本中的ping -a逻辑替换为nbtstat -A !ip!解析NetBIOS名称,更适合Windows设备占比高的局域网 - 建议右键选择「以管理员身份运行」脚本,避免权限不足导致部分命令执行失败
- 可以自行添加网段过滤规则,比如仅处理192.168.1.x段的IP,减少无效探测
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

