| @echo off |
| setlocal enabledelayedexpansion |
| title "局域网MAC地址查询" |
| echo. |
| echo. |
| echo. 在这里,需要注意的是:此批处理仅用于局域网MAC地址查询,输入的IP可以包括任何 |
| echo.IP地址,但是还是需要你有一点点关于IP地址的知识,不要乱输,要分的清楚A、B、C类内 |
| echo.部IP地址含义。而且始终强调的一点是你需要连通主机(能ping通),才能查询的到目标主 |
| echo.机的MAC地址。另外如果你输入的IP地址范围过大,那么扫描的时间就越长,请根据自己的 |
| echo.情况来按标准输入。不要用0开头,比如010.1.1.1或者10.010.1.1等。 |
| echo. 注:IP地址最后一位(0或者255)有特殊用途,IP配置时都不会配置此IP,故扫描时也 |
| echo. 不扫描这两个IP。 |
| echo. |
| echo. |
| echo. |
| pause |
| cls |
| echo. |
| echo. |
| echo 1. A类IP地址(10.0.0.0-10.255.255.255) |
| echo. |
| echo 2. B类IP地址(172.16.0.0-172.31.255.255) |
| echo. |
| echo 3. C类IP地址(192.168.0.0-192.168.255.255) |
| echo. |
| echo 4. 从IP地址.txt读取IP查询MAC地址 |
| echo. |
| echo 0. 退出 |
| echo. |
| echo. |
| :input |
| set/p chio=请选择: |
| if "%chio%" == "0" goto end |
| if "%chio%" == "1" goto A_ |
| if "%chio%" == "2" goto B_ |
| if "%chio%" == "3" goto C_ |
| if "%chio%" == "4" goto D_ |
| for %%a in ("0 1 2 3 4") do ( |
| if not "%chio%" == "%%a" ( |
| echo. |
| echo.请选择其中一个输入 |
| echo. |
| goto input |
| ) |
| ) |
| :C_ |
| echo. |
| echo. |
| set/p min=请输入起始IP: |
| set/p max=请输入结束IP: |
| echo. |
| echo. |
| for /f "tokens=1,2,3,4,5,6,7,8 delims=." %%a in ("%min%.%max%") do ( |
| set min_1=%%a |
| set min_2=%%b |
| set min_3=%%c |
| set min_4=%%d |
| set max_1=%%e |
| set max_2=%%f |
| set max_3=%%g |
| set max_4=%%h |
| ) |
| if "%min%" == "" cls & echo. 起始IP没有输入,请重新输入 & goto C_ |
| if "%max%" == "" cls & echo. 结束IP没有输入,请重新输入 & goto C_ |
| if %min_1% neq 192 cls & echo.起始IP第一位输入错误 & goto C_ |
| if %min_2% neq 168 cls & echo.起始IP第二位输入错误 & goto C_ |
| if %max_1% neq 192 cls & echo.起始IP第一位输入错误 & goto C_ |
| if %max_2% neq 168 cls & echo.起始IP第二位输入错误 & goto C_ |
| if %min_3% lss 0 cls & echo.起始IP第三位不能小于0 & goto C_ |
| if %min_3% gtr 255 cls & echo.起始IP第三位不能大于255 & goto C_ |
| if %min_4% lss 1 cls & echo.起始IP第四位不能小于1 & goto C_ |
| if %min_4% gtr 254 cls & echo.起始IP第四位不能大于254 & goto C_ |
| if %max_3% lss 0 cls & echo.结束IP第三位不能小于0 & goto C_ |
| if %max_3% gtr 255 cls & echo.结束IP第三位不能大于255 & goto C_ |
| if %max_4% lss 1 cls & echo.结束IP第四位不能小于1 & goto C_ |
| if %max_4% gtr 254 cls & echo.结束IP第四位不能大于254 & goto C_ |
| |
| rem IP地址前三位相同,即是输入的两个IP地址处于同一网段 |
| if %min_1%%min_2%%min_3% equ %max_1%%max_2%%max_3% ( |
| if %min_4% lss %max_4% ( |
| for /l %%i in (%min_4%,1,%max_4%) do ( |
| for /f "tokens=1* delims==" %%j in ('ping %min_1%.%min_2%.%min_3%.%%i -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a %min_1%.%min_2%.%min_3%.%%i') do ( |
| if not "%%k" == "" echo.arp -s %min_1%.%min_2%.%min_3%.%%i %%k>>arp绑定.bat |
| ) |
| ) |
| ) else ( |
| for /l %%i in (%max_4%,1,%min_4%) do ( |
| for /f "tokens=1* delims==" %%j in ('ping %min_1%.%min_2%.%min_3%.%%i -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a %min_1%.%min_2%.%min_3%.%%i') do ( |
| if not "%%k" == "" echo.arp -s %min_1%.%min_2%.%min_3%.%%i %%k>>arp绑定.bat |
| ) |
| ) |
| ) |
| ) |
| goto :eof |
| |
| if %min_3% leq %max_3% for /l %%i in (%min_3%,1,%max_3%) do ( |
| for /l %%j in (1,1,254) do ( |
| set /a max_5=max_4+1 |
| if not "%%i.%%j" == "!max_3!.!max_5!" ( |
| for /f "tokens=1* delims==" %%m in ('ping %min_1%.%min_2%.%%i.%%j -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a %min_1%.%min_2%.%%i.%%j') do ( |
| if not "%%n" == "" echo.arp -s %min_1%.%min_2%.%%i.%%j %%n>>arp绑定.bat |
| ) |
| ) else ( |
| goto end |
| ) |
| ) |
| ) |
| goto :eof |
| :B_ |
| echo. |
| echo. |
| set/p min=请输入起始IP: |
| set/p max=请输入结束IP: |
| echo. |
| echo. |
| for /f "tokens=1,2,3,4,5,6,7,8 delims=." %%a in ("%min%.%max%") do ( |
| set min_1=%%a |
| set min_2=%%b |
| set min_3=%%c |
| set min_4=%%d |
| set max_1=%%e |
| set max_2=%%f |
| set max_3=%%g |
| set max_4=%%h |
| ) |
| if "%min%" == "" cls & echo. 起始IP没有输入,请重新输入 & goto B_ |
| if "%max%" == "" cls & echo. 结束IP没有输入,请重新输入 & goto B_ |
| if %min_1% neq 172 cls & echo.起始IP第一位输入错误 & goto B_ |
| if %min_2% lss 16 cls & echo.起始IP第二位不能小于16 & goto B_ |
| if %min_2% gtr 31 cls & echo.起始IP第二位不能大于31 & goto B_ |
| if %max_1% neq 172 cls & echo.结束IP第一位输入错误 & goto B_ |
| if %max_2% lss 16 cls & echo.结束IP第二位不能小于16 & goto B_ |
| if %max_2% gtr 31 cls & echo.结束IP第二位不能大于31 & goto B_ |
| if %min_3% lss 0 cls & echo.起始IP第三位不能小于0 & goto B_ |
| if %min_3% gtr 255 cls & echo.起始IP第三位不能大于255 & goto B_ |
| if %min_4% lss 1 cls & echo.起始IP第四位不能小于1 & goto B_ |
| if %min_4% gtr 254 cls & echo.起始IP第四位不能大于254 & goto B_ |
| if %max_3% lss 0 cls & echo.结束IP第三位不能小于0 & goto B_ |
| if %max_3% gtr 255 cls & echo.结束IP第三位不能大于255 & goto B_ |
| if %max_4% lss 1 cls & echo.结束IP第四位不能小于1 & goto B_ |
| if %max_4% gtr 254 cls & echo.结束IP第四位不能大于254 & goto B_ |
| |
| rem IP地址前三位相同,即是输入的两个IP地址处于同一网段 |
| if %min_1%%min_2%%min_3% equ %max_1%%max_2%%max_3% ( |
| if %min_4% lss %max_4% ( |
| for /l %%i in (%min_4%,1,%max_4%) do ( |
| for /f "tokens=1* delims==" %%j in ('ping %min_1%.%min_2%.%min_3%.%%i -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a %min_1%.%min_2%.%min_3%.%%i') do ( |
| if not "%%k" == "" echo.arp -s %min_1%.%min_2%.%min_3%.%%i %%k>>arp绑定.bat |
| ) |
| ) |
| ) else ( |
| for /l %%i in (%max_4%,1,%min_4%) do ( |
| for /f "tokens=1* delims==" %%j in ('ping %min_1%.%min_2%.%min_3%.%%i -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a %min_1%.%min_2%.%min_3%.%%i') do ( |
| if not "%%k" == "" echo.arp -s %min_1%.%min_2%.%min_3%.%%i %%k>>arp绑定.bat |
| ) |
| ) |
| ) |
| ) |
| goto :eof |
| |
| if %min_3% leq %max_3% for /l %%i in (%min_3%,1,%max_3%) do ( |
| for /l %%j in (1,1,254) do ( |
| set /a max_5=max_4+1 |
| if not "%%i.%%j" == "!max_3!.!max_5!" ( |
| for /f "tokens=1* delims==" %%m in ('ping %min_1%.%min_2%.%%i.%%j -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a %min_1%.%min_2%.%%i.%%j') do ( |
| if not "%%n" == "" echo.arp -s %min_1%.%min_2%.%%i.%%j %%n>>arp绑定.bat |
| ) |
| ) else ( |
| goto end |
| ) |
| ) |
| ) |
| goto :eof |
| |
| for /l %%i in (%min_2,1,%max_2%) do ( |
| for /l %%j in (1,1,254) do ( |
| for /l %%k in (1,1,254) do ( |
| set /a max_5=max_4+1 |
| if not "%%i.%%j.%%k" == "!max_2!.!max_3!.!max_5!" ( |
| for /f "tokens=1* delims==" %%m in ('ping %min_1%.%%i.%%j.%%k -n 1 -w 20 -l 1 ^>nul ^& if not errorlevel 1 nbtstat -a %min_1%.%%i.%%j.%%k') do ( |
| if not "%%n" == "" echo.arp -s %min_1%.%%i.%%j.%%k %%n>>arp绑定.bat |
| ) |
| ) else ( |
| goto end |
| ) |
| ) |
| ) |
| ) |
| goto :eof |
| |
| :A_ |
| echo. |
| echo. |
| set/p min=请输入起始IP: |
| set/p max=请输入结束IP: |
| echo. |
| echo. |
| for /f "tokens=1,2,3,4,5,6,7,8 delims=." %%a in ("%min%.%max%") do ( |
| set min_1=%%a |
| set min_2=%%b |
| set min_3=%%c |
| set min_4=%%d |
| set max_1=%%e |
| set max_2=%%f |
| set max_3=%%g |
| set max_4=%%h |
| ) |
| if "%min%" == "" cls & echo. 起始IP没有输入,请重新输入 & goto B_ |
| if "%max%" == "" cls & echo. 结束IP没有输入,请重新输入 & goto B_ |
| if %min_1% neq 10 cls & echo.起始IP第一位输入错误 & goto B_ |
| if %min_2% lss 0 cls & echo.起始IP第二位不能小于0 & goto B_ |
| if %min_2% gtr 255 cls & echo.起始IP第二位不能大于255 & goto B_ |
| if %max_1% neq 10 cls & echo.结束IP第一位输入错误 & goto B_ |
| if %max_2% lss 0 cls & echo.结束IP第二位不能小于0 & goto B_ |
| if %max_2% gtr 255 cls & echo.结束IP第二位不能大于255 & goto B_ |
| if %min_3% lss 0 cls & echo.起始IP第三位不能小于0 & goto B_ |
| if %min_3% gtr 255 cls & echo.起始IP第三位不能大于255 & goto B_ |
| if %min_4% lss 1 cls & echo.起始IP第四位不能小于1 & goto B_ |
| if %min_4% gtr 254 cls & echo.起始IP第四位不能大于254 & goto B_ |
| if %max_3% lss 0 cls & echo.结束IP第三位不能小于0 & goto B_ |
| if %max_3% gtr 255 cls & echo.结束IP第三位不能大于255 & goto B_ |
| if %max_4% lss 1 cls & echo.结束IP第四位不能小于1 & goto B_ |
| if %max_4% gtr 254 cls & echo.结束IP第四位不能大于254 & goto B_ |
| |
| rem IP地址前三位相同,即是输入的两个IP地址处于同一网段 |
| if %min_1%%min_2%%min_3% equ %max_1%%max_2%%max_3% ( |
| if %min_4% lss %max_4% ( |
| for /l %%i in (%min_4%,1,%max_4%) do ( |
| for /f "tokens=1* delims==" %%j in ('ping %min_1%.%min_2%.%min_3%.%%i -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a %min_1%.%min_2%.%min_3%.%%i') do ( |
| if not "%%k" == "" echo.arp -s %min_1%.%min_2%.%min_3%.%%i %%k>>arp绑定.bat |
| ) |
| ) |
| ) else ( |
| for /l %%i in (%max_4%,1,%min_4%) do ( |
| for /f "tokens=1* delims==" %%j in ('ping %min_1%.%min_2%.%min_3%.%%i -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a %min_1%.%min_2%.%min_3%.%%i') do ( |
| if not "%%k" == "" echo.arp -s %min_1%.%min_2%.%min_3%.%%i %%k>>arp绑定.bat |
| ) |
| ) |
| ) |
| ) |
| |
| if %min_3% leq %max_3% for /l %%i in (%min_3%,1,%max_3%) do ( |
| for /l %%j in (1,1,254) do ( |
| set /a max_5=max_4+1 |
| if not "%%i.%%j" == "!max_3!.!max_5!" ( |
| for /f "tokens=1* delims==" %%m in ('ping %min_1%.%min_2%.%%i.%%j -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a %min_1%.%min_2%.%%i.%%j') do ( |
| if not "%%n" == "" echo.arp -s %min_1%.%min_2%.%%i.%%j %%n>>arp绑定.bat |
| ) |
| ) else ( |
| goto end |
| ) |
| ) |
| ) |
| |
| for /l %%i in (%min_2,1,%max_2%) do ( |
| for /l %%j in (1,1,254) do ( |
| for /l %%k in (1,1,254) do ( |
| set /a max_5=max_4+1 |
| if not "%%i.%%j.%%k" == "!max_2!.!max_3!.!max_5!" ( |
| for /f "tokens=1* delims==" %%m in ('ping %min_1%.%%i.%%j.%%k -n 1 -w 20 -l 1 ^>nul ^& if not errorlevel 1 nbtstat -a %min_1%.%%i.%%j.%%k') do ( |
| if not "%%n" == "" echo.arp -s %min_1%.%%i.%%j.%%k %%n>>arp绑定.bat |
| ) |
| ) else ( |
| goto end |
| ) |
| ) |
| ) |
| ) |
| goto :eof |
| :D_ |
| cls |
| echo. |
| echo. |
| echo 从IP地址.txt读取IP列表,IP地址列表支持格式为x.x.x.x-y.y.y.y的类型。 |
| echo 这里默认两个IP处于同一网段,且前面的IP地址小于后面的IP地址。 |
| echo 支持: |
| echo x.x.x.x |
| echo y.y.y.y |
| echo z.z.z.z |
| echo ....... |
| echo 这样的类型,会自动生成hostname ip macaddress格式的文本,顺序跟TXT保持 |
| echo 一致。IP地址.txt需要跟批处理放在同一文件夹下面。暂不支持两种类型混排。 |
| echo. |
| echo. |
| pause |
| setlocal enabledelayedexpansion |
| for /f "tokens=1,2 delims=-" %%a in (IP地址.txt) do ( |
| if not "%%b" == "" ( |
| set min=%%a |
| set max=%%b |
| call :lp ) else ( |
| goto lo |
| ) |
| ) |
| endlocal |
| goto end |
| :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 "skip=8 tokens=1,3,4 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 /i "%%k" == "unique" set hostname=%%j |
| if /i "%%j" == "mac" set mac=%%l &call echo %%hostname%% 192.168.!min_2!.%%i %%mac%% >>MAC备份.txt |
| ) |
| ) |
| goto :eof |
| |
| :lo |
| for /f "delims=" %%c in (IP地址.txt) do ( |
| for /f "skip=8 tokens=1,3,4 delims= " %%j in ('ping %%c -n 1 -w 20 /l 1 ^>nul ^& if not errorlevel 1 nbtstat -a %%c') do ( |
| if /i "%%k" == "unique" set hostname=%%j |
| if /i "%%j" == "mac" set mac=%%l &call echo %%hostname%% %%c %%mac%% >>MAC备份.txt |
| ) |
| ) |
| goto :eof |
| :end |
| exitCOPY |