Board logo

标题: [网络连接] 【已解决】求批处理提取多网卡的默认网关 [打印本页]

作者: louissgd    时间: 2024-3-14 16:39     标题: 【已解决】求批处理提取多网卡的默认网关

本帖最后由 louissgd 于 2024-3-17 13:33 编辑

公司电脑都是双网卡,内外网同时连接,所以设置了永久路由
使用ipconfig查询会得到类似以下的结果


无线局域网适配器 无线网络连接 2:

   连接特定的 DNS 后缀 . . . . . . . :
   IPv6 地址 . . . . . . . . . . . . : 2409:8a6c:222:e560:55ee:cba4:40cd:fcd0
   临时 IPv6 地址. . . . . . . . . . : 2409:8a6c:222:e560:c46f:1418:8a66:266e
   本地链接 IPv6 地址. . . . . . . . : fe80::55ee:cba4:40cd:fcd0%13
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.4
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : fe80::1%13
                                       192.168.1.1

以太网适配器 本地连接:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::d10:bf18:6703:6919%11
   IPv4 地址 . . . . . . . . . . . . : 10.168.153.78
   子网掩码  . . . . . . . . . . . . : 255.255.255.248
   默认网关. . . . . . . . . . . . . :


可以看到外网的网关会优先显示IPV6的,导致IPV4的网关在第二行(WIN7、WIN10和WIN11都是优先显示IPV6的网关),而内网网关设置了永久路由后就没有默认网关了
再通过 route PRINT -4 可以查询永久路由的信息如下:
永久路由:
  网络地址          网络掩码  网关地址  跃点数
         10.0.0.0        255.0.0.0    10.168.153.73       1
          0.0.0.0          0.0.0.0      192.168.1.1       1


这个信息也是分行的
求能正确提取到每个网卡网关的批处理

我自己研究了几天 将结果写在了6楼
我本身的测试环境只有双网卡 内外网两种 没有办法测试更多复杂情况 如有其他复杂情况 欢迎指正
作者: czjt1234    时间: 2024-3-14 19:38

为什么要提取到每个网卡网关?
既然都是相同的网络,那么ip段和网关应该都是一样的啊
作者: louissgd    时间: 2024-3-14 19:54

本帖最后由 louissgd 于 2024-3-14 20:03 编辑

回复 2# czjt1234


   一个内网一个外网 网关怎么可能一样
我的例子中 外网网关是192.168.1.1 而内网网关是10.168.153.73

在论坛找到了 这个语句: netsh interface ipv4 show addresses 可以显示外网的网关
但我只有两个网卡或许可以这样 有更多网卡的 可以用这里的方法: http://www.bathome.net/viewthread.php?tid=68410
但内网的网关还是提取不了 因为不在IP配置里
作者: louissgd    时间: 2024-3-14 20:55

搜索注册表发现路由表有注册表项:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes]
"10.0.0.0,255.0.0.0,10.168.153.73,1"=""
等有时间再来研究一下好了
作者: ppll2030    时间: 2024-3-14 23:35

用这个试试netsh interface ipv4 show addresses
作者: louissgd    时间: 2024-3-17 13:28

根据IP地址与网关的对应关系:必须在同一网段
我这里粗暴的理解为IP地址与网关的第一段数字是相同的,如果不对,欢迎给出正确解释
根据以上的观点,我参考了其他贴的范例,写了下面这个批处理可以达到我的要求
本人水平有限,欢迎高手修改和精简
  1. @echo off & setlocal enabledelayedexpansion
  2. :kaishi
  3. cls
  4. set IP=
  5. set GW=
  6. set GW0=
  7. echo 请选择一个网卡:
  8. set "choice="
  9. set "count=1"
  10. for /f "tokens=1 delims=:" %%a in ('netsh interface ipv4 show addresses ^| findstr "接口"') do (
  11.      set "adapter=%%a"
  12.      set "adapter=!adapter:~4,-5!"
  13.      echo !count!. !adapter!
  14.      set "interface!count!=!adapter!"
  15.      set /a "count+=1"
  16. )
  17. set /p "choice=请输入序号:"
  18. set "interfaceName=!interface%choice%!"
  19. for /f "tokens=1-2 delims=:" %%i in ('netsh interface ipv4 show config name^="!interfaceName!" ^| findstr /C:"IP 地址"') do (
  20.     set "ip_line=%%j"
  21.     for /f "tokens=*" %%f in ("!ip_line!") do set "IP=%%f")
  22.     if not "!IP!"=="" (echo !interfaceName! 的IP地址:!IP! ) ELSE echo !interfaceName! 没有配置IP地址 无法查到对应的默认网关&pause>nul 2>nul &goto :kaishi
  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 "GW=%%f")
  26.     )
  27.     if not "!GW!"=="" echo !interfaceName! 的默认网关:!GW! &pause>nul 2>nul &goto :kaishi
  28.     for /f "tokens=1 delims=." %%a in ("!IP!") do set "ip1=%%a" & rem 提取IP地址第一段作为变量
  29. for /F "tokens=3" %%i in ('route print -4 ^| findstr /C:" "') do echo %%i>>%temp%\ip0.txt & rem 导出路由网关列并保存在临时文件中
  30. for /f %%f in ('findstr "!ip1!" %temp%\ip0.txt') do set GW0=%%f & rem 查找IP地址第一段与路由网关列中最后一个匹配值
  31. if "!GW0!"=="" echo !interfaceName! 没有找到与IP地址对应的网关配置 &del /q %temp%\ip0.txt>nul 2>nul&pause>nul 2>nul &goto :kaishi
  32. echo !interfaceName! 的默认网关:!GW0!  &del /q %temp%\ip0.txt>nul 2>nul&pause>nul 2>nul &goto :kaishi
复制代码





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