找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25357|回复: 11

[网络连接] 【已解决】遍历所有网卡后选择其中一张网卡显示对应的IPv4地址和网关

[复制链接]
发表于 2024-2-7 21:53:16 | 显示全部楼层 |阅读模式
本帖最后由 semiuel 于 2024-2-11 14:14 编辑

首先参考了Batcher老大的这个帖子:
http://www.bathome.net/viewthread.php?tid=67519

经过大佬的指点,修改后的代码在11楼,欢迎大家测试。
运行批处理前请提前准备好EchoX.exe
下载地址:https://wwf.lanzn.com/iKmg608z89ub


用netsh interface ipv4 show addresses获取到网卡对应的接口名称,IPv4地址和默认网关。
我的电脑上运行后输出内容如下:


  1. 接口 "Radmin VPN" 的配置
  2.     DHCP 已启用:                          否
  3.     IP 地址:                           26.13.134.145
  4.     子网前缀:                        26.0.0.0/8 (掩码 255.0.0.0)
  5.     默认网关:                         26.0.0.1
  6.     网关跃点数:                       9256
  7.     InterfaceMetric:                      1

  8. 接口 "本地连接" 的配置
  9.     DHCP 已启用:                          否
  10.     IP 地址:                           192.168.1.240
  11.     子网前缀:                        192.168.1.0/24 (掩码 255.255.255.0)
  12.     默认网关:                         192.168.1.1
  13.     网关跃点数:                       256
  14.     InterfaceMetric:                      10

  15. 接口 "Loopback Pseudo-Interface 1" 的配置
  16.     DHCP 已启用:                          否
  17.     IP 地址:                           127.0.0.1
  18.     子网前缀:                        127.0.0.0/8 (掩码 255.0.0.0)
  19.     InterfaceMetric:                      50

复制代码
写了下面的代码用来获取所有网卡

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo 请选择一个网卡:
  4. set "choice="
  5. set "count=1"
  6. for /f "tokens=1 delims=:" %%a in ('netsh interface ipv4 show addresses ^| findstr "接口"') do (
  7.     set adapter=%%a
  8.     echo !count!.!adapter:~4,-5!
  9.     set /a count+=1
  10. )
  11. set /p choice=请输入序号:
复制代码
接下来不知道该怎么写来获取每张网卡的IPv4地址和默认网关了。
我的本意是想跟这个帖子里的IP扫描结合起来
http://www.bathome.net/thread-68407-1-1.html
用这个帖子里获取到的IPv4地址和默认网关来确定IP扫描的网段。

请求大神们帮忙看看。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2024-2-8 10:49:45 | 显示全部楼层
大佬们都回家过年了啊!

祝大家新春快乐!
发表于 2024-2-8 10:54:53 | 显示全部楼层
本帖最后由 holley 于 2024-2-8 11:11 编辑

回复 1# semiuel
先把网卡名称读出来:
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. echo 请选择一个网卡:
  4. set "choice="
  5. set "count=1"
  6. for /f "tokens=1 delims=:" %%a in ('netsh interface ipv4 show addresses ^| findstr "接口"') do (
  7.      set "adapter=%%a"
  8.      set "adapter=!adapter:~4,-5!"
  9.      echo !count!. !adapter!
  10.      set "interface!count!=!adapter!"
  11.      set /a "count+=1"
  12. )
  13. set /p "choice=请输入序号:"

  14. rem 获取选定网卡的IP及网关信息
  15. set "interfaceName=!interface%choice%!"
  16. rem echo 已选网卡:!interfaceName!

  17. for /f "tokens=1-2 delims=:" %%i in ('netsh interface ipv4 show config name^="!interfaceName!" ^| findstr /C:"IP 地址"') do (
  18.     set "ip_line=%%j"
  19.     for /f "tokens=*" %%f in ("!ip_line!") do set "ipAddress=%%f"
  20.     echo !interfaceName!-[IP  地址]:!ipAddress!
  21. )

  22. rem 提取已选网卡的默认网关
  23. for /f "tokens=1-2 delims=:" %%i in ('netsh interface ipv4 show config name^="!interfaceName!" ^| findstr /C:"默认网关"') do (
  24.     set "gateway=%%j"
  25.     for /f "tokens=*" %%f in ("!gateway!") do set "gateway=%%f"
  26.     if not "!gateway!"=="" (
  27.         echo !interfaceName!-[默认网关]:!gateway!
  28.     ) else (
  29.         echo 该网卡没有配置默认网关。
  30.     )
  31. )

  32. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2024-2-8 10:57:02 | 显示全部楼层
本帖最后由 hnfeng 于 2024-2-8 10:58 编辑

你只是想获取正在使用的网卡的地址吧,CMD里面:
  1. for /f "tokens=3,4" %i in ('route print -4 ^| findstr /rc:" 0\.0\.0\.0 *0\.0\.0\.0 "') do @echo IP地址: %j,         默认网关:%i
复制代码
发表于 2024-2-8 11:23:02 | 显示全部楼层
回复 2# semiuel


    试了一下,结果存疑:
  1. @echo off & mode con cols=40 lines=31 & color f0 & setlocal enabledelayedexpansion
  2. echo 请选择一个网卡:
  3. set "choice="
  4. set "count=1"
  5. for /f "tokens=1 delims=:" %%a in ('netsh interface ipv4 show addresses ^| findstr "接口"') do (
  6.      set "adapter=%%a"
  7.      set "adapter=!adapter:~4,-5!"
  8.      echo !count!. !adapter!
  9.      set "interface!count!=!adapter!"
  10.      set /a "count+=1"
  11. )
  12. set /p "choice=请输入序号:"
  13. set "interfaceName=!interface%choice%!"
  14. for /f "tokens=1-2 delims=:" %%i in ('netsh interface ipv4 show config name^="!interfaceName!" ^| findstr /C:"IP 地址"') do (
  15.     set "ip_line=%%j"
  16.     for /f "tokens=*" %%f in ("!ip_line!") do set "IP=%%f"
  17.     REM echo !interfaceName!-[IP  地址]:!IP!
  18. )
  19. for /f "tokens=1-2 delims=:" %%i in ('netsh interface ipv4 show config name^="!interfaceName!" ^| findstr /C:"默认网关"') do (
  20.     set "gateway=%%j"
  21.     for /f "tokens=*" %%f in ("!gateway!") do set "GW=%%f"
  22.     if not "!GW!"=="" (
  23.         REM echo !interfaceName!-[默认网关]:!GW!
  24.     ) else (
  25.         echo 该网卡没有配置默认网关。
  26.     )
  27. )
  28. echox -n "本机IP:" & echox -w 25 -n -c fc "%IP%" & echox -n -c 9f "  "  & echox "在线"
  29. echox -n "网  关:" & echox -w 25 -n -c fc "%GW%" & echox -n -c 80 "  "  & echox "空闲"
  30. echo.
  31. set on=0&set off=0
  32. for /f "tokens=2-4 delims=.: " %%a in ('ipconfig/all^|findstr "默认网关"') do (
  33.   for /l %%i in (1,1,254) do (
  34.   title IP扫描:%%a.%%b.%%c.%%i
  35.   ping -n 1 -l 1 -w 20 -i 10 -s 1 %%a.%%b.%%c.%%i>nul 2>nul && (set /a on=on+1 & echox -w 4 -e -n -c 9f %%i) || (set /a off=off+1 & echox -w 4 -e -n -c 80 %%i)
  36.   )
  37. )
  38. echo.
  39. title IP扫描:结束
  40. echox -n -c f0 "扫描结束,在线IP:"&echox -w 4 -r -n -c 9f %on%&echox -n -c f0 "  空闲IP:"&echox  -w 4 -r -c 80 %off%
  41. pause>nul 2>nul
复制代码
发表于 2024-2-8 11:36:32 | 显示全部楼层
powershell

  1. $ip = Get-NetIPAddress -AddressFamily "IPv4"
  2. $rt = Get-NetRoute

  3. $ip | add-member -NotePropertyName "NextHop" -NotePropertyValue ""

  4. foreach ( $x in $ip ) {
  5.         $y = $rt | Where-Object { ($_.InterfaceAlias -eq $x.InterfaceAlias) -and ($_.DestinationPrefix -eq '0.0.0.0/0') }
  6.         $x.NextHop = $y.NextHop
  7. }

  8. $ip | Select-Object interfacealias,nexthop
复制代码
 楼主| 发表于 2024-2-8 13:23:38 | 显示全部楼层
回复 5# holley


    好的,感谢大佬,我试试看。
 楼主| 发表于 2024-2-8 13:25:24 | 显示全部楼层
回复 4# hnfeng


    谢谢
 楼主| 发表于 2024-2-8 13:26:04 | 显示全部楼层
回复 6# newswan


    我想做一个WIN7/10/11通用的脚本,WIN7没办法用POWERSHELL
发表于 2024-2-8 13:53:41 | 显示全部楼层
回复 1# semiuel


    根据你的第一部分网卡读取做了一些修改,
完善第二部分地址读取,并设置了变量,
第三部分自己修改一下变量设置,就可拼接上了。
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. netsh interface ipv4 show addresses>temp.txt
  4. set "count=1"
  5. for /f "tokens=1 delims=:" %%a in ('findstr "接口" "temp.txt"') do (
  6.     set adapter=%%a
  7.     echo !count!. !adapter:~4,-5!
  8.     set  _!count!=!adapter:~4,-5!
  9.     set /a count+=1
  10. )

  11. echo 请选择一个网卡:
  12. set /p choice=请输入序号:
  13. set AdapterName=!_%choice%!

  14. for /f "delims=:" %%i in ('findstr /n /c:"!AdapterName!" "temp.txt"') do (
  15.     set /a a=%%i+2
  16.     set /a b=%%i+4
  17. )

  18. :a
  19. set /a a+=1
  20. for /f "skip=%a% tokens=2,4 delims= " %%i in ('find /v /n "" temp.txt') do (
  21.         set IP=%%j
  22.         goto b
  23. )
  24. :b
  25. set /a b+=1
  26. for /f "skip=%b% tokens=2-3 delims= " %%i in ('find /v /n "" temp.txt') do (
  27.         set GW=%%j
  28.         goto end
  29. )
  30. :end
  31. cls
  32. echo 网卡:    %AdapterName%
  33. echo IP地址:  %IP%
  34. echo 网关地址:%GW%
  35. del /q temp.txt
  36. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-2-8 13:56:56 | 显示全部楼层
本帖最后由 semiuel 于 2024-2-8 14:16 编辑

回复 5# holley


    稍微修改了一下大佬的代码,试了两台电脑暂时没问题了。

  1. @echo off & mode con cols=40 lines=31 & color f0 & setlocal enabledelayedexpansion
  2. title IP扫描:选择网卡
  3. echo 请选择一个网卡:
  4. set "choice="
  5. set "count=1"
  6. for /f "tokens=1 delims=:" %%a in ('netsh interface ipv4 show addresses ^| findstr "接口"') do (
  7.      set "adapter=%%a"
  8.      set "adapter=!adapter:~4,-5!"
  9.      echo !count!. !adapter!
  10.      set "interface!count!=!adapter!"
  11.      set /a "count+=1"
  12. )
  13. set /p "choice=请输入序号:"
  14. set "interfaceName=!interface%choice%!"
  15. for /f "tokens=1-2 delims=:" %%i in ('netsh interface ipv4 show config name^="!interfaceName!" ^| findstr /C:"IP 地址"') do (
  16.     set "ip_line=%%j"
  17.     for /f "tokens=*" %%f in ("!ip_line!") do set "IP=%%f"
  18.     REM echo !interfaceName!-[IP  地址]:!IP!
  19. )
  20. for /f "tokens=1-2 delims=:" %%i in ('netsh interface ipv4 show config name^="!interfaceName!" ^| findstr /C:"默认网关"') do (
  21.     set "gateway=%%j"
  22.     for /f "tokens=*" %%f in ("!gateway!") do set "GW=%%f"
  23.     if not "!GW!"=="" (
  24.         REM echo !interfaceName!-[默认网关]:!GW!
  25.     ) else (
  26.         set "GW=没有配置默认网关"
  27.     )
  28. )
  29. cls
  30. echox -n "本机IP:" & echox -w 25 -n -c fc "%IP%" & echox -n -c 9f "  "  & echox "在线"
  31. echox -n "网  关:" & echox -w 25 -n -c fc "%GW%" & echox -n -c 80 "  "  & echox "空闲"
  32. echo.
  33. set on=0&set off=0
  34. REM 下面这一句修改了一下,改成直接从IP地址获取需要扫描的网段,而不是从网关获取
  35. for /f "tokens=1-3 delims=.: " %%a in ("%IP%") do (
  36.   for /l %%i in (1,1,254) do (
  37.   title IP扫描:%%a.%%b.%%c.%%i
  38.   ping -n 1 -l 1 -w 20 -i 10 -s 1 %%a.%%b.%%c.%%i>nul 2>nul && (set /a on=on+1 & echox -w 4 -e -n -c 9f %%i) || (set /a off=off+1 & echox -w 4 -e -n -c 80 %%i)
  39.   )
  40. )
  41. echo.
  42. title IP扫描:结束
  43. echox -n -c f0 "扫描结束,在线IP:"&echox -w 4 -r -n -c 9f %on%&echox -n -c f0 "  空闲IP:"&echox  -w 4 -r -c 80 %off%
  44. pause>nul 2>nul
复制代码
 楼主| 发表于 2024-2-8 14:14:40 | 显示全部楼层
回复 10# ppll2030


    谢谢大佬
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 05:43 , Processed in 0.019850 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表