- @echo off
- title "局域网MAC地址查询"
- echo 感谢hanyeguxing,qzwqzw给我提供帮助,感谢www.bathome.net给我提供学习的机会,
- echo 有想学批处理的来批处理之家,不过请先看版规再发帖。
- echo.
- echo.
- echo 按任意键继续
- pause >nul
- cls
- echo. 此批处理比网上的局域网MAC地址扫描.exe的查询时间要快一点,而且会自动生成arp
- echo -s ip macaddress格式的批处理。但是有一点要注意,需要网络连的通才能查询的了,而
- echo 且IP地址为C类的192.168类型。IP地址列表支持格式为192.168.x.x-192.168.x.x的类型,
- echo 支持192.168.x.x换行192.168.x.x的类型,不过需要跟批处理放在同一文件夹下面。在输
- echo 入起始IP里,支持单IP,支持单IP段,支持跨网段查询,不过跨网段时之后最后一个网段
- echo 时从1到输入,前面的网段都是从1查询到254,意思就是说192.168.x.y的y其实是没起到
- echo 作用的,不过仍然需要按标准IP地址输入,但很少影响输出结果。
- echo.
- echo.
- echo 1.输入起始IP和结束IP来查找MAC地址输出到arp绑定.bat
- echo 2.从IP地址.txt读取IP来查找MAC地址输出到arp绑定.txt
- echo 3.按0退出
- set/p chio=请选择:
- if "%chio%" == "1" goto input
- if "%chio%" == "2" goto beifen
- if "%chio%" == "0" exit
- :input
- setlocal enabledelayedexpansion
- set/p min=请输入起始IP:
- set/p max=请输入结束IP:
- for /f "tokens=3,4,7,8 delims=." %%m in ("%min%.%max%") do (
- set min_3=%%m
- set min_4=%%n
- set max_3=%%o
- set max_4=%%p
- )
- if %min_3% equ %max_3% (goto li) else (goto lu)
- endlocal
- :end
- pause
- goto :eof
-
- :li
- for /l %%a in (%min_4%,1,%max_4%) do (
- for /f "tokens=1* delims==" %%i in ('ping 192.168.%min_3%.%%a -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a 192.168.%min_3%.%%a') do (
- if not "%%j" == "" echo.arp -s 192.168.%min_3%.%%a %%j>>arp绑定.bat
- )
- )
- goto :eof
- :lu
- for /l %%b in (%min_3%,1,%max_3%) do (
- for /l %%a in (1,1,254) do (
- set /a max_5=max_4+1
- if not "%%b.%%a" == "!max_3!.!max_5!" (
- for /f "tokens=1* delims==" %%i in ('ping 192.168.%%b.%%a -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a 192.168.%%b.%%a') do (
- if not "%%j" == "" echo.arp -s 192.168.%%b.%%a %%j>>arp绑定.bat
- )
- ) else (
- goto end
- )
- )
- )
- goto :eof
-
- :beifen
- setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims=-" %%a in (IP地址.txt) do (
- if not "%%b" == "" (
- set min=%%a
- set max=%%b
- goto lp ) else (
- goto lo
- )
- )
- endlocal
- pause
- :lp
- for /f "tokens=3,4,8 delims=." %%c in ("!min!.!max!") do (
- set min_2=%%c
- set min_3=%%d
- set min_4=%%e
- )
- for /l %%i in (!min_3!,1,!min_4!) do (
- for /f "tokens=1* delims==" %%j in ('ping 192.168.!min_2!.%%i -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a 192.168.!min_2!.%%i') do (
- if not "%%k" == "" echo.arp -s 192.168.!min_2!.%%i %%k>>arp绑定.txt
- )
- )
- goto :eof
- :lo
- for /f "delims=" %%c in (IP地址.txt) do (
- for /f "tokens=1* delims==" %%j in ('ping %%c -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a %%c') do (
- if not "%%k" == "" echo.arp -s %%c %%k>>arp绑定.txt
- )
- )
- goto :eof
复制代码 应该算是初稿,以后慢慢完善,不过目前可以完成简单的功能,发出来给大家指点。
没对IP输入格式进行判断,如果乱输造成死机或者其他损失的不负责哦。如果按标准输入IP格式,是不会有问题的
[ 本帖最后由 sgaizxt001 于 2010-5-4 21:10 编辑 ] |