原帖在回复中。为了方便大家搜索,发一个主题帖。
功能:对局域网进行扫描,列出Win系统的MAC/IP/计算机名。适用XP/Win7,其他未测试。
命令:主要使用Ping检查是否通,再用nbtstat查询电脑3信息。
耗时:ping命令使用超时返回,因此速度很快;而nbtstat命令没有相关参数,遇到无效设备时浪费很多时间。修改IP扫描范围可减少耗时。
缺陷:非Win电脑设备耗时较长,如:Linux服务器、考勤机等。ping延时较长的电脑可能漏检,原因是命令中设置了99ms的返回时间,可自行修改。- ::扫描IP名MAC.bat::XP/Win7::
- ::ping -n 1 -w 99 %ip%/ping -a/arp -a
- ::nbtstat -a %ip%
- @echo off
- setlocal enableDelayedExpansion
- set "ip3=192.168.1"
- for /l %%i in (1,1,254)do (%_起始IP_步长_终止IP_%
- set "MAC="
- call :CheckIPstatus %ip3%.%%i&&call :GetIPNameMAC %ip3%.%%i Name MAC
- if !errorlevel! equ 0 echo/[!MAC!] [%ip3%.%%i] [!Name!]
- )
- pause
- goto :eof
- ::[完]
-
- ::ping是否通:返回码stat=失败/Lost
- :CheckIPstatus IP
- for /f "tokens=3 delims=,," %%p in ('"ping -n 1 -w 99 %1|findstr /i "数据包 Packets""')do (
- for /f "tokens=3" %%s in ("%%p")do set "stat=%%s"
- )
- exit/b %stat%
-
- ::nbtstat查ip对应计算机名、MAC
- :GetIPNameMAC IP Name MAC
- setlocal
- for /f "delims=" %%n in ('"nbtstat -a %1|findstr /ic:"唯一" /c:"UNIQUE" /c:"MAC ""')do (
- set "nbt=%%n"
- set "nbt=!nbt:<= !"
- set "nbt=!nbt:>=!"
- if "!nbt:唯一=!!nbt:UNIQUE=!" neq "!nbt!!nbt!" for /f %%m in ("!nbt!")do set "Name=%%m"
- if "!nbt:MAC=!" neq "!nbt!" for /f "tokens=4" %%m in ("!nbt!")do set "MAC=%%m"
- )
- if "%MAC%"=="" (set Bcode=1)else set Bcode=0
- endlocal&set %2=%Name%&set %3=%MAC%&exit/b %Bcode%
复制代码 改进建议:如有很多非Win电脑设备(nbtstat命令无法识别的设备),可以考虑使用临时文件以加快速度。 |