本帖最后由 爱美痞子 于 2022-4-10 21:24 编辑
命令提示符中运行以下命令,看下结果再把自动关闭的批处理拖命令提示符窗口中,回车运行,看下显示什么!
cutebe 发表于 2022-4-8 14:42
这个显示正常。
我整理了一下,目前的代码如下:- @echo off
- mode con cols=70 lines=39
- color e0
- echo.
- echo 扫描完1→255的整个网段大约需要3分钟的时间,请耐心等待......
- echo.
- echo 输入要扫描的IP段,直接回车则为此前输入的IP段(没输过则为192.168.1):
- set /p IpDuan=
- if "%IpDuan%"=="" (set IpDuan=192.168.1)
- echo 输入要扫描的IP起始位,直接回车则为此前输入的数值(没输过则为1):
- set /p QiShi=
- if "%QiShi%"=="" (set QiShi=1)
- echo 输入要扫描的IP结束位,直接回车则为此前输入的数值(没输过则为255):
- set /p JieShu=
- if "%JieShu%"=="" (set JieShu=255)
- cls
- echo.
- echo. 正在扫描[ %IpDuan%.%QiShi%-%IpDuan%.%JieShu% ]IP段内在线的主机。
- ::ping -n 1 -w 99 %ip%/ping -a
- ::nbtstat -a %ip%
- echo.
- echo. 【 局域网在线主机列表 】
- echo. ----------------------------------------------------------------
- echo. ^ IP地址 ^ 主机名 ^ MAC地址 ^
- echo. ----------------------------------------------------------------
- setlocal enableDelayedExpansion
- set "ip3=%IpDuan%"
- for /l %%i in (%QiShi%,1,%JieShu%)do (
- rem echo %%i
- call :CheckIPstatus %ip3%.%%i&&call :GetIPNameMAC %ip3%.%%i Name MAC
- if !errorlevel! equ 0 echo/ [%ip3%.%%i] [!Name!] [!MAC!]
- )
- echo. ------------------------ 扫描完成 ----------------------------
- echo.
-
- echo.
- pause |echo 按任意键退出。
- ::[完]
-
- ::ping是否通:返回码stat=失败/Lost
- :CheckIPstatus
- 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%
复制代码 有一个问题,因为nbtstat -a命令无法获取到本机的主机名和MAC,所以返回结果里本机对应的主机名和MAC是前一个IP的主机的,可否将这2个返回值定义成其他内容,比如“本机”,谢谢!
|