You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过WinAPI确定指定网络接口适用的NLM网络配置文件?

如何关联网络接口与NLM配置文件(注册表GUID)

我之前也碰到过完全一样的需求——要把当前活跃的网络接口和HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\下的NLM配置文件GUID对应起来,确实没有直接的注册表或API关联路径,只能通过间接匹配的方式实现,具体步骤如下:

  • 提取路由表中的默认网关IP
    先用命令行或PowerShell获取系统的默认网关列表:

    • 命令行:route print 0.0.0.0,找到“Active Routes”下目标为0.0.0.0的条目,记录对应的网关IP。
    • PowerShell:Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Select-Object NextHop,直接输出默认网关的IP地址。
  • 通过ARP缓存获取网关的MAC地址
    有了网关IP后,查询ARP缓存拿到对应的MAC地址:

    • 命令行:arp -a [网关IP],直接输出该IP对应的物理地址。
    • PowerShell:Get-NetNeighbor -AddressFamily IPv4 | Where-Object { $_.IPAddress -eq "[网关IP]" } | Select-Object LinkLayerAddress,得到格式化后的MAC地址。
  • 枚举NLM配置文件并匹配MAC
    遍历注册表路径HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\下的所有GUID子项,检查每个子项中的DefaultGatewayMac值:

    • 注意:注册表中的DefaultGatewayMac是二进制数据,需要先将其转换为可读的MAC格式(比如AA:BB:CC:DD:EE:FF),再和第二步拿到的MAC地址做对比。
    • 匹配成功的那个GUID对应的注册表项,就是当前正在使用的NLM网络配置文件。

另外补充个小细节:如果系统有多个默认网关(比如多网卡场景),需要结合当前活跃的网络接口(比如通过Get-NetAdapter查看状态为Up的网卡)来筛选对应的网关,再做后续匹配。

内容的提问来源于stack exchange,提问作者Nathan

火山引擎 最新活动