Board logo

标题: [网络连接] 批处理怎样获取多网卡IP-MAC-网络连接名称的对应关系? [打印本页]

作者: holley    时间: 2022-10-10 14:37     标题: 批处理怎样获取多网卡IP-MAC-网络连接名称的对应关系?

最近想做个本机IP-MAC对应,可以进行arp静态绑定的批处理
已知:
  1. wmic nicconfig get IPAddress^,MACAddress
复制代码
可以得到IP与MAC的对应关系,而
  1. wmic nic get NetConnectionID,MACAddress
复制代码
可以得到MAC与网络连接名称的对应关系
求怎样可以将本地IP-MAC-网络连接的对应关系显示出来?
for 和 findstr 学的都不到位,乱不出来了
作者: Echo11    时间: 2022-10-10 22:29

本帖最后由 Echo11 于 2022-10-10 22:33 编辑

有个综合讨论贴的。
这个是我自己用的显示IP脚本之一。
里面有一点注释是多余的,是我的todo,后来懒得写了就没继续写。
  1. @ECHO OFF & setlocal enabledelayedexpansion
  2. TITLE 显示所有已连接的网络连接信息 v3.2 by.Echo
  3. mode con: cols=80 lines=30
  4. CALL :get_NIC_info
  5. CALL :check_Gateway
  6. pause>nul
  7. EXIT /B 0
  8. :: _filter_ 可以是 NetEnabled,IPEnabled
  9. :get_NIC_info
  10. :: Default SETs
  11. ::SET "_from_=nic"
  12. ::SET "_filter_=NetEnabled"
  13. ::SET "_value_=TRUE"
  14. ::IF "%~1" NEQ "" SET "_filter_=%~1"
  15. ::IF "%_filter_%"=="IPEnabled" SET "_from_=nicconfig"
  16. SET "_i_=0"
  17. ECHO 所有已连接的网络连接信息(未插网线不会显示在下方):
  18. ECHO ---------------------------------------------------
  19. for /f "tokens=1,2 delims==" %%a in ('wmic nic where "NetEnabled='TRUE'" get Index^,MACAddress^,Description^,NetConnectionID /value') do (
  20. REM  此时,由于分隔符=不能过滤空行,此时的 %%a 含有回车或换行符等特殊符号,直接使用会导致代码混乱
  21. for /f "delims=" %%u in ("%%a") do for /f "delims=" %%v in ("%%b") do (
  22. REM  仅非空行会执行到这
  23. IF "%%u" NEQ "" SET "%%u=%%v"
  24. IF /i "%%u"=="Index" (
  25. for /f "tokens=1,2 delims==" %%c in ('wmic nicconfig where "Index=!Index!" get IPAddress^,IPSubnet^,DefaultIPGateway^,DNSServerSearchOrder /value') do (
  26. for /f "delims=" %%x in ("%%c") do for /f "delims=" %%y in ("%%d") do (
  27. IF "%%x" NEQ "" SET "%%x=%%y"& CALL :trim_IP %%x
  28. )
  29. )
  30. ) ELSE IF /i "%%u"=="NetConnectionID" (
  31. REM last value of one NIC here
  32. SET/a _i_+=1
  33. SET "NetConnectionID!_i_!=!NetConnectionID!"
  34. SET "Description!_i_!=!Description!"
  35. SET "MACAddress!_i_!=!MACAddress!"
  36. SET "IPAddress!_i_!=!IPAddress!"
  37. SET "IPSubnet!_i_!=!IPSubnet!"
  38. SET "DefaultIPGateway!_i_!=!DefaultIPGateway!"
  39. SET "DNSServerSearchOrder!_i_!=!DNSServerSearchOrder!"
  40. CALL :show_NIC_info !_i_!
  41. SET "NetConnectionID="
  42. SET "Description="
  43. SET "MACAddress="
  44. SET "IPAddress="
  45. SET "IPSubnet="
  46. SET "DefaultIPGateway="
  47. SET "DNSServerSearchOrder="
  48. )
  49. )
  50. )
  51. ECHO 已连接的网络连接数量: %_i_%
  52. GOTO:EOF
  53. :show_NIC_info
  54. :: 显示所有 NIC
  55. IF "%~1"=="" CALL :show_all_NIC
  56. IF "%~1" LEQ "!_i_!" IF "%~1" GEQ "1" CALL :show_one_NIC %~1
  57. GOTO:EOF
  58. :show_all_NIC
  59. IF !_i_!==0 GOTO:EOF
  60. for /L %%j in (1,1,!_i_!) do (
  61. CALL :show_one_NIC %%j
  62. )
  63. GOTO:EOF
  64. :show_one_NIC
  65. ECHO No.%1           : !NetConnectionID%1!
  66. ECHO   描述         : !Description%1!
  67. ECHO   MAC 物理地址 : !MACAddress%1!
  68. ECHO   IPv4 地址    : !IPAddress%1!
  69. ECHO   子网掩码     : !IPSubnet%1!
  70. ECHO   默认网关     : !DefaultIPGateway%1!
  71. ECHO   DNS 服务器   : !DNSServerSearchOrder%1!
  72. ECHO ----------------
  73. GOTO:EOF
  74. :check_Gateway
  75. IF !_i_!==0 GOTO:EOF
  76. ECHO -----------------------
  77. IF !_i_!==1 ECHO 若需要连续ping网关检测网络...请按任意键开始...&pause>nul&CALL :ping_Gateway !_i_! &GOTO:EOF
  78. SET /P choice=若需要连续ping网关检测网络...请输入网络连接No.序号:
  79. CALL :ping_GateWay %choice%
  80. GOTO:EOF
  81. :ping_GateWay
  82. IF "%~1" GTR "!_i_!" GOTO:EOF
  83. IF "%~1" LSS "1" GOTO:EOF
  84. IF "!DefaultIPGateway%~1!"=="" ECHO 网络连接:!NetConnectionID%~1! 未设置网关&GOTO:EOF
  85. ping !DefaultIPGateway%~1! -t
  86. GOTO:EOF
  87. :trim_IP
  88. :: %1 传入存有IP的变量名,而不是值
  89. :: 分别去掉"{}
  90. :: IP地址只取IPv4
  91. :: 子网掩码只取掩码
  92. (set %1=!%1:^"=!&set %1=!%1:{=!&set %1=!%1:}=!)
  93. IF /i "%1"=="IPAddress" for /f "delims=," %%a in ("!%1!") do set "%1=%%a"
  94. IF /i "%1"=="IPSubnet" for /f "delims=," %%a in ("!%1!") do set "%1=%%a"
  95. GOTO:EOF
复制代码

作者: 459500160    时间: 2022-11-6 14:53

本帖最后由 459500160 于 2022-11-6 14:58 编辑

小弟以前在坛子里求助过大佬,然后帮解决了,这是我发的内外网的查询,IP跟mac都是一一对应的,(网络名称好像没测试findstr能不能实现)我想你只要修改下echo的显示方式就可以实现你的要求了附上链接,希望对你有帮助
http://bbs.bathome.net/thread-57677-1-1.html




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