Board logo

标题: [网络工具] 批处理版局域网MAC地址查询 [打印本页]

作者: sgaizxt001    时间: 2010-5-8 20:07     标题: 批处理版局域网MAC地址查询

我这里没办法测试A类,B类IP地址,如果有条件的请帮我测试一下,并给一下反馈信息。谢谢
论坛短信也可,QQ也行。
qq:260778312
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. title "局域网MAC地址查询"
  4. echo.
  5. echo.
  6. echo.    在这里,需要注意的是:此批处理仅用于局域网MAC地址查询,输入的IP可以包括任何
  7. echo.IP地址,但是还是需要你有一点点关于IP地址的知识,不要乱输,要分的清楚A、B、C类内
  8. echo.部IP地址含义。而且始终强调的一点是你需要连通主机(能ping通),才能查询的到目标主
  9. echo.机的MAC地址。另外如果你输入的IP地址范围过大,那么扫描的时间就越长,请根据自己的
  10. echo.情况来按标准输入。不要用0开头,比如010.1.1.1或者10.010.1.1等。
  11. echo.    注:IP地址最后一位(0或者255)有特殊用途,IP配置时都不会配置此IP,故扫描时也
  12. echo.        不扫描这两个IP。
  13. echo.                        
  14. echo.                        
  15. echo.                  
  16. pause
  17. cls
  18. echo.
  19. echo.
  20. echo     1. A类IP地址(10.0.0.0-10.255.255.255)
  21. echo.
  22. echo     2. B类IP地址(172.16.0.0-172.31.255.255)
  23. echo.
  24. echo     3. C类IP地址(192.168.0.0-192.168.255.255)
  25. echo.
  26. echo     4. 从IP地址.txt读取IP查询MAC地址
  27. echo.
  28. echo     0. 退出
  29. echo.
  30. echo.
  31. :input
  32. set/p chio=请选择:
  33. if "%chio%" == "0" goto end
  34. if "%chio%" == "1" goto A_
  35. if "%chio%" == "2" goto B_
  36. if "%chio%" == "3" goto C_
  37. if "%chio%" == "4" goto D_
  38. for %%a in ("0 1 2 3 4") do (
  39.   if not "%chio%" == "%%a" (
  40.    echo.
  41.    echo.请选择其中一个输入
  42.    echo.
  43.    goto input
  44.                            )
  45.                             )
  46. :C_
  47. echo.
  48. echo.
  49. set/p min=请输入起始IP:
  50. set/p max=请输入结束IP:
  51. echo.
  52. echo.
  53. for /f "tokens=1,2,3,4,5,6,7,8 delims=." %%a in ("%min%.%max%") do (
  54.   set min_1=%%a
  55.   set min_2=%%b
  56.   set min_3=%%c
  57.   set min_4=%%d
  58.   set max_1=%%e
  59.   set max_2=%%f
  60.   set max_3=%%g
  61.   set max_4=%%h
  62.                                                                     )
  63. if "%min%" == "" cls & echo. 起始IP没有输入,请重新输入 & goto C_
  64. if "%max%" == "" cls & echo. 结束IP没有输入,请重新输入 & goto C_
  65. if %min_1% neq 192 cls & echo.起始IP第一位输入错误 & goto C_
  66. if %min_2% neq 168 cls & echo.起始IP第二位输入错误 & goto C_
  67. if %max_1% neq 192 cls & echo.起始IP第一位输入错误 & goto C_
  68. if %max_2% neq 168 cls & echo.起始IP第二位输入错误 & goto C_
  69. if %min_3% lss 0 cls & echo.起始IP第三位不能小于0 & goto C_
  70. if %min_3% gtr 255 cls & echo.起始IP第三位不能大于255 & goto C_
  71. if %min_4% lss 1 cls & echo.起始IP第四位不能小于1 & goto C_
  72. if %min_4% gtr 254 cls & echo.起始IP第四位不能大于254 & goto C_
  73. if %max_3% lss 0 cls & echo.结束IP第三位不能小于0 & goto C_
  74. if %max_3% gtr 255 cls & echo.结束IP第三位不能大于255 & goto C_
  75. if %max_4% lss 1 cls & echo.结束IP第四位不能小于1 & goto C_
  76. if %max_4% gtr 254 cls & echo.结束IP第四位不能大于254 & goto C_
  77. rem IP地址前三位相同,即是输入的两个IP地址处于同一网段
  78. if %min_1%%min_2%%min_3% equ %max_1%%max_2%%max_3%  (
  79.    if %min_4% lss %max_4%  (
  80.     for /l %%i in (%min_4%,1,%max_4%) do (
  81.      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 (
  82.      if not "%%k" == "" echo.arp -s %min_1%.%min_2%.%min_3%.%%i %%k>>arp绑定.bat
  83.                            )
  84.                          )
  85.                                                                            ) else  (
  86.    for /l %%i in (%max_4%,1,%min_4%) do (
  87.      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 (
  88.      if not "%%k" == "" echo.arp -s %min_1%.%min_2%.%min_3%.%%i %%k>>arp绑定.bat
  89.                            )
  90.                          )
  91.                        )
  92.                     )
  93. goto :eof
  94. rem ip地址前两位相同,第3位不同,即两个IP地址不处于同一网段
  95. if %min_3% leq %max_3% for /l %%i in (%min_3%,1,%max_3%) do (
  96.   for /l %%j in (1,1,254) do (
  97.     set /a max_5=max_4+1
  98.     if not "%%i.%%j" == "!max_3!.!max_5!" (
  99.     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 (
  100.      if not "%%n" == "" echo.arp -s %min_1%.%min_2%.%%i.%%j %%n>>arp绑定.bat
  101.                   )
  102.              ) else (
  103.                  goto end
  104.                     )
  105.         )
  106.    )
  107. goto :eof
  108. :B_
  109. echo.
  110. echo.
  111. set/p min=请输入起始IP:
  112. set/p max=请输入结束IP:
  113. echo.
  114. echo.
  115. for /f "tokens=1,2,3,4,5,6,7,8 delims=." %%a in ("%min%.%max%") do (
  116.   set min_1=%%a
  117.   set min_2=%%b
  118.   set min_3=%%c
  119.   set min_4=%%d
  120.   set max_1=%%e
  121.   set max_2=%%f
  122.   set max_3=%%g
  123.   set max_4=%%h
  124.                                                                     )
  125. if "%min%" == "" cls & echo. 起始IP没有输入,请重新输入 & goto B_
  126. if "%max%" == "" cls & echo. 结束IP没有输入,请重新输入 & goto B_
  127. if %min_1% neq 172 cls & echo.起始IP第一位输入错误 & goto B_
  128. if %min_2% lss 16 cls & echo.起始IP第二位不能小于16 & goto B_
  129. if %min_2% gtr 31 cls & echo.起始IP第二位不能大于31 & goto B_
  130. if %max_1% neq 172 cls & echo.结束IP第一位输入错误 & goto B_
  131. if %max_2% lss 16 cls & echo.结束IP第二位不能小于16 & goto B_
  132. if %max_2% gtr 31 cls & echo.结束IP第二位不能大于31 & goto B_
  133. if %min_3% lss 0 cls & echo.起始IP第三位不能小于0 & goto B_
  134. if %min_3% gtr 255 cls & echo.起始IP第三位不能大于255 & goto B_
  135. if %min_4% lss 1 cls & echo.起始IP第四位不能小于1 & goto B_
  136. if %min_4% gtr 254 cls & echo.起始IP第四位不能大于254 & goto B_
  137. if %max_3% lss 0 cls & echo.结束IP第三位不能小于0 & goto B_
  138. if %max_3% gtr 255 cls & echo.结束IP第三位不能大于255 & goto B_
  139. if %max_4% lss 1 cls & echo.结束IP第四位不能小于1 & goto B_
  140. if %max_4% gtr 254 cls & echo.结束IP第四位不能大于254 & goto B_
  141. rem IP地址前三位相同,即是输入的两个IP地址处于同一网段
  142. if %min_1%%min_2%%min_3% equ %max_1%%max_2%%max_3%  (
  143.    if %min_4% lss %max_4%  (
  144.     for /l %%i in (%min_4%,1,%max_4%) do (
  145.      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 (
  146.      if not "%%k" == "" echo.arp -s %min_1%.%min_2%.%min_3%.%%i %%k>>arp绑定.bat
  147.                            )
  148.                          )
  149.                                                                            ) else  (
  150.    for /l %%i in (%max_4%,1,%min_4%) do (
  151.      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 (
  152.      if not "%%k" == "" echo.arp -s %min_1%.%min_2%.%min_3%.%%i %%k>>arp绑定.bat
  153.                            )
  154.                          )
  155.                        )
  156.                     )
  157. goto :eof
  158. rem ip地址前两位相同,第三位不同,最后一位同不同都没关系
  159. if %min_3% leq %max_3% for /l %%i in (%min_3%,1,%max_3%) do (
  160.   for /l %%j in (1,1,254) do (
  161.     set /a max_5=max_4+1
  162.     if not "%%i.%%j" == "!max_3!.!max_5!" (
  163.     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 (
  164.      if not "%%n" == "" echo.arp -s %min_1%.%min_2%.%%i.%%j %%n>>arp绑定.bat
  165.                   )
  166.              ) else (
  167.                  goto end
  168.                     )
  169.         )
  170.    )
  171. goto :eof
  172. rem ip地址第二位不同,最后一位同不同都没关系
  173. for /l %%i in (%min_2,1,%max_2%) do (
  174.   for /l %%j in (1,1,254) do (
  175.     for /l %%k in (1,1,254) do (
  176.     set /a max_5=max_4+1
  177.     if not "%%i.%%j.%%k" == "!max_2!.!max_3!.!max_5!" (
  178.     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 (
  179.      if not "%%n" == "" echo.arp -s %min_1%.%%i.%%j.%%k %%n>>arp绑定.bat
  180.    )
  181.                                                       ) else (
  182.                                                           goto end
  183.                                                              )
  184.                                )
  185.                              )
  186.                                      )
  187. goto :eof
  188. :A_
  189. echo.
  190. echo.
  191. set/p min=请输入起始IP:
  192. set/p max=请输入结束IP:
  193. echo.
  194. echo.
  195. for /f "tokens=1,2,3,4,5,6,7,8 delims=." %%a in ("%min%.%max%") do (
  196.   set min_1=%%a
  197.   set min_2=%%b
  198.   set min_3=%%c
  199.   set min_4=%%d
  200.   set max_1=%%e
  201.   set max_2=%%f
  202.   set max_3=%%g
  203.   set max_4=%%h
  204.                                                                     )
  205. if "%min%" == "" cls & echo. 起始IP没有输入,请重新输入 & goto B_
  206. if "%max%" == "" cls & echo. 结束IP没有输入,请重新输入 & goto B_
  207. if %min_1% neq 10 cls & echo.起始IP第一位输入错误 & goto B_
  208. if %min_2% lss 0 cls & echo.起始IP第二位不能小于0 & goto B_
  209. if %min_2% gtr 255 cls & echo.起始IP第二位不能大于255 & goto B_
  210. if %max_1% neq 10 cls & echo.结束IP第一位输入错误 & goto B_
  211. if %max_2% lss 0 cls & echo.结束IP第二位不能小于0 & goto B_
  212. if %max_2% gtr 255 cls & echo.结束IP第二位不能大于255 & goto B_
  213. if %min_3% lss 0 cls & echo.起始IP第三位不能小于0 & goto B_
  214. if %min_3% gtr 255 cls & echo.起始IP第三位不能大于255 & goto B_
  215. if %min_4% lss 1 cls & echo.起始IP第四位不能小于1 & goto B_
  216. if %min_4% gtr 254 cls & echo.起始IP第四位不能大于254 & goto B_
  217. if %max_3% lss 0 cls & echo.结束IP第三位不能小于0 & goto B_
  218. if %max_3% gtr 255 cls & echo.结束IP第三位不能大于255 & goto B_
  219. if %max_4% lss 1 cls & echo.结束IP第四位不能小于1 & goto B_
  220. if %max_4% gtr 254 cls & echo.结束IP第四位不能大于254 & goto B_
  221. rem IP地址前三位相同,即是输入的两个IP地址处于同一网段
  222. if %min_1%%min_2%%min_3% equ %max_1%%max_2%%max_3%  (
  223.    if %min_4% lss %max_4%  (
  224.     for /l %%i in (%min_4%,1,%max_4%) do (
  225.      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 (
  226.      if not "%%k" == "" echo.arp -s %min_1%.%min_2%.%min_3%.%%i %%k>>arp绑定.bat
  227.                            )
  228.                          )
  229.                                                                            ) else  (
  230.    for /l %%i in (%max_4%,1,%min_4%) do (
  231.      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 (
  232.      if not "%%k" == "" echo.arp -s %min_1%.%min_2%.%min_3%.%%i %%k>>arp绑定.bat
  233.                            )
  234.                          )
  235.                        )
  236.                     )
  237. rem ip地址前两位相同,第三位不同,最后一位同不同都没关系
  238. if %min_3% leq %max_3% for /l %%i in (%min_3%,1,%max_3%) do (
  239.   for /l %%j in (1,1,254) do (
  240.     set /a max_5=max_4+1
  241.     if not "%%i.%%j" == "!max_3!.!max_5!" (
  242.     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 (
  243.      if not "%%n" == "" echo.arp -s %min_1%.%min_2%.%%i.%%j %%n>>arp绑定.bat
  244.                   )
  245.              ) else (
  246.                  goto end
  247.                     )
  248.         )
  249.    )
  250. rem ip地址第二位不同,最后一位同不同都没关系
  251. for /l %%i in (%min_2,1,%max_2%) do (
  252.   for /l %%j in (1,1,254) do (
  253.     for /l %%k in (1,1,254) do (
  254.     set /a max_5=max_4+1
  255.     if not "%%i.%%j.%%k" == "!max_2!.!max_3!.!max_5!" (
  256.     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 (
  257.      if not "%%n" == "" echo.arp -s %min_1%.%%i.%%j.%%k %%n>>arp绑定.bat
  258.    )
  259.                                                       ) else (
  260.                                                           goto end
  261.                                                              )
  262.                                )
  263.                              )
  264.                                      )
  265. goto :eof
  266. :D_
  267. cls
  268. echo.
  269. echo.
  270. echo         从IP地址.txt读取IP列表,IP地址列表支持格式为x.x.x.x-y.y.y.y的类型。
  271. echo     这里默认两个IP处于同一网段,且前面的IP地址小于后面的IP地址。
  272. echo     支持:
  273. echo             x.x.x.x
  274. echo             y.y.y.y
  275. echo             z.z.z.z
  276. echo             .......
  277. echo     这样的类型,会自动生成hostname ip macaddress格式的文本,顺序跟TXT保持
  278. echo     一致。IP地址.txt需要跟批处理放在同一文件夹下面。暂不支持两种类型混排。
  279. echo.
  280. echo.
  281. pause
  282. setlocal enabledelayedexpansion
  283. for /f "tokens=1,2 delims=-" %%a in (IP地址.txt) do (
  284.   if not "%%b" == "" (
  285.     set min=%%a
  286.     set max=%%b      
  287.     call :lp          ) else (
  288.        goto lo
  289.                             )
  290.                                                     )
  291. endlocal
  292. goto end
  293. :lp
  294. for /f "tokens=3,4,8 delims=." %%c in ("!min!.!max!") do (
  295.     set min_2=%%c
  296.     set min_3=%%d
  297.     set min_4=%%e   
  298.                                                          )
  299. for /l %%i in (!min_3!,1,!min_4!) do (
  300.       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 (
  301.         if /i "%%k" == "unique" set hostname=%%j
  302.         if /i "%%j" == "mac"  set mac=%%l &call echo %%hostname%%  192.168.!min_2!.%%i %%mac%% >>MAC备份.txt
  303.                                      )
  304. )
  305. goto :eof
  306. :lo
  307. for /f "delims=" %%c in (IP地址.txt) do (
  308. 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 (
  309.         if /i "%%k" == "unique" set hostname=%%j
  310.         if /i "%%j" == "mac"  set mac=%%l &call echo %%hostname%%   %%c %%mac%% >>MAC备份.txt
  311.                                      )
  312. )
  313. goto :eof
  314. :end
  315. exit
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2