标题: [网络连接] 【已解决】求批处理提取多网卡的默认网关 [打印本页]
作者: 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地址与网关的第一段数字是相同的,如果不对,欢迎给出正确解释
根据以上的观点,我参考了其他贴的范例,写了下面这个批处理可以达到我的要求
本人水平有限,欢迎高手修改和精简
- @echo off & setlocal enabledelayedexpansion
- :kaishi
- cls
- set IP=
- set GW=
- set GW0=
- echo 请选择一个网卡:
- set "choice="
- set "count=1"
- for /f "tokens=1 delims=:" %%a in ('netsh interface ipv4 show addresses ^| findstr "接口"') do (
- set "adapter=%%a"
- set "adapter=!adapter:~4,-5!"
- echo !count!. !adapter!
- set "interface!count!=!adapter!"
- set /a "count+=1"
- )
- set /p "choice=请输入序号:"
- set "interfaceName=!interface%choice%!"
- for /f "tokens=1-2 delims=:" %%i in ('netsh interface ipv4 show config name^="!interfaceName!" ^| findstr /C:"IP 地址"') do (
- set "ip_line=%%j"
- for /f "tokens=*" %%f in ("!ip_line!") do set "IP=%%f")
- if not "!IP!"=="" (echo !interfaceName! 的IP地址:!IP! ) ELSE echo !interfaceName! 没有配置IP地址 无法查到对应的默认网关&pause>nul 2>nul &goto :kaishi
- for /f "tokens=1-2 delims=:" %%i in ('netsh interface ipv4 show config name^="!interfaceName!" ^| findstr /C:"默认网关"') do (
- set "gateway=%%j"
- for /f "tokens=*" %%f in ("!gateway!") do set "GW=%%f")
- )
- if not "!GW!"=="" echo !interfaceName! 的默认网关:!GW! &pause>nul 2>nul &goto :kaishi
- for /f "tokens=1 delims=." %%a in ("!IP!") do set "ip1=%%a" & rem 提取IP地址第一段作为变量
- for /F "tokens=3" %%i in ('route print -4 ^| findstr /C:" "') do echo %%i>>%temp%\ip0.txt & rem 导出路由网关列并保存在临时文件中
- for /f %%f in ('findstr "!ip1!" %temp%\ip0.txt') do set GW0=%%f & rem 查找IP地址第一段与路由网关列中最后一个匹配值
- if "!GW0!"=="" echo !interfaceName! 没有找到与IP地址对应的网关配置 &del /q %temp%\ip0.txt>nul 2>nul&pause>nul 2>nul &goto :kaishi
- 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 |