在Win32_NetworkAdapter查询中,NetAddresses始终为null

时间:2011-10-19 14:18:50

标签: c# networking wmi

我正在尝试获取活动网络适配器的IP地址,以便避免目前未连接的虚拟和其他VPN适配器。

在我当前的笔记本电脑上,以下代码返回3个IP V4地址,我不知道如何从该列表中获取“真正的”使用中的IP地址。

        IPAddress[] ipV4Addresses = Array.FindAll(
            Dns.GetHostEntry(String.Empty).AddressList,
            a => a.AddressFamily == AddressFamily.InterNetwork);

看看MSDN doc here,我想也许我走的正确。有没有人成功获得每个适配器的IP地址列表?如果是这样,请分享你的智慧。谢谢!

此时这都是原型。我有这个代码(感谢SO!),字符串[] netAddresses总是为null,即使计算机连接到网络并且具有正常运行的IP地址。

        string wmiQuery = "SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId != NULL";
        ManagementObjectSearcher moSearch = new ManagementObjectSearcher(wmiQuery);
        ManagementObjectCollection moCollection = moSearch.Get();

        foreach (ManagementObject mo in moCollection)
        {
            Console.WriteLine("{0} is {1}", mo["Name"], mo["NetConnectionStatus"]);
            string[] netAddresses = (string[])mo["NetworkAddresses"];
            if (netAddresses != null)
            {
                foreach (string netAddress in netAddresses)
                {
                    Console.WriteLine("\tnet addresses:");
                    Console.WriteLine("\t\t{0}", netAddress);
                }
            }
        }

3 个答案:

答案 0 :(得分:3)

来自MS docs:http://msdn.microsoft.com/en-us/library/windows/desktop/aa394216%28v=vs.85%29.aspx

NetworkAddresses

数据类型:字符串数组 访问类型:只读

适配器的网络地址数组。此属性继承自CIM_NetworkAdapter。

此属性尚未实施。它默认返回NULL值。

答案 1 :(得分:1)

没有“真正的”IP地址这样的东西。您发送的每个数据包都将根据适配器的度量标准和可用的路由路径路由到其目标。您可以通过执行以下操作来猜测哪些IP主要用于互联网流量:

  1. 按指标订购适配器,最低价格。
  2. 优先考虑WAN IP,然后是192.168.x.x,然后是10.x.x.x,并完全忽略环回地址。
  3. 这会让你猜测“首选”地址,虽然它几乎不是确定的。

答案 2 :(得分:1)

查看WIn32_NetworkAdapterConfiguration,通过使用Win32_NetworkAdapter中的InterfaceIndex,您应该能够通过分配给该NIC的ipaddresses获得所需的配置。