在PowerShell中确定默认路由所用网卡及IP地址的方法(无需发起实际互联网连接)
在PowerShell中确定默认路由所用网卡及IP地址的方法(无需发起实际互联网连接)
我完全懂你的痛点——Windows里单块网卡就能有好几个全局单播IPv6地址(DHCPv6、SLAAC、临时地址或者手动配置的都算),要是有多块网卡连网,那可选的地址就更多了,想提前知道默认路由会走哪个网卡的哪个IP,又不想真发起连接测试对吧?没问题,用PowerShell就能搞定,全程不用碰真实互联网连接。
咱们一步一步来操作:
1. 先找出IPv6默认路由对应的网卡
首先运行这条PowerShell命令,获取所有IPv6默认路由条目(::/0就是IPv6默认路由的前缀标识):
Get-NetRoute -AddressFamily IPv6 | Where-Object {$_.DestinationPrefix -eq '::/0'}
执行后你会看到几个关键信息:
InterfaceAlias:网卡的直观名称(比如“以太网”“Wi-Fi”)InterfaceIndex:网卡的唯一索引IDRouteMetric:路由度量值,数值越小优先级越高(如果有多块网卡都有默认路由,优先用度量值小的那一块)
2. 关联网卡对应的全局单播IPv6地址
知道了网卡的InterfaceIndex后,运行这条组合命令就能筛选出该网卡下的全局单播IPv6地址(自动排除链路本地地址,因为默认路由不会用这类地址):
# 先把默认路由信息存到变量里 $defaultRoute = Get-NetRoute -AddressFamily IPv6 | Where-Object {$_.DestinationPrefix -eq '::/0'} # 筛选对应网卡的全局IPv6地址,按有效生存期降序排序,取系统最优先使用的那个 Get-NetIPAddress -AddressFamily IPv6 | Where-Object { $_.InterfaceIndex -eq $defaultRoute.InterfaceIndex -and $_.PrefixOrigin -ne 'Link' # 排除链路本地地址 } | Sort-Object -Property ValidLifetime -Descending | Select-Object -First 1
这条命令会帮你定位到Windows大概率优先使用的IPv6地址——一般来说,临时IPv6地址(如果系统启用的话)优先级更高;要是没有临时地址,就会选有效期最长的永久全局地址。
要是你有多块网卡都配置了默认路由,记得先看RouteMetric值,选度量值最小的那条路由对应的网卡,再查对应IP就好。
备注:内容来源于stack exchange,提问作者Hertz Hu




