【发布时间】:2012-08-03 18:17:08
【问题描述】:
我正在编写一个应用程序,它必须在 Windows 7 机器上获取网络适配器配置,就像在 Windows 网络适配器配置面板中所做的那样:
到目前为止,我几乎可以从NetworkInterface.GetAllNetworkInterfaces() 获得所需的所有信息除了子网前缀长度。
我知道可以通过 OnLinkPrefixLength 从 C++ struc PMIB_UNICASTIPADDRESS_TABLE 检索它,但我正试图留在 .net 中。
我还查看了Win32_NetworkAdapterConfiguration WMI 类,但它似乎只返回 IP v4 子网掩码。
我也知道一些信息(据我所知不是前缀长度)在注册表中:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TCPIP6\Parameters\Interfaces\{CLSID}
我还使用 SysInternals ProcessMon 在保存网络适配器设置时尝试获取任何有用的信息,但什么也没找到...
那么,是否有任何干净的 .NET 方法来获取此值? (从注册表中获取它不会有问题)
编辑:网关
这与实际问题无关,但对于那些需要检索整个网络适配器 IPv6 配置的人来说,IPInterfaceProperties.GatewayAdresses 属性仅支持 IPv4 网关。正如下面的答案 cmets 中提到的,在 .NET framework 4.5 之前获取整个信息的唯一方法是调用 WMI。
【问题讨论】:
-
这可能有助于引导您,不确定是否会,但我能够从注册表中提取信息。看看这是否有帮助:stackoverflow.com/questions/1537908/…
-
就像我说的,如果我能找到有用的东西,我已经在注册表中查看了,但我没有...... :(
-
好吧,祝你好运,我想我会插话的。
-
另外,我相当确定 99.9% 的 ipv6 子网的前缀长度为 /64。
-
@ jskiles1:好吧,我不是 IP v6 也不是网络专家,我明白,在阅读了 RFC 5375 IPv6 Addressing Considerations 之后,不推荐使用 64 以外的其他值。问题是,我必须开发一个提供与 Windows 相同配置功能的产品!
标签: c# .net windows-7 registry ipv6