【问题标题】:NetAddresses always null in Win32_NetworkAdapter queryWin32_NetworkAdapter 查询中的 NetAddresses 始终为空
【发布时间】:2011-10-19 14:18:50
【问题描述】:

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

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

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

查看 MSDN 文档here,我想也许我是在正确的轨道上。有没有人成功获得每个适配器的 IP 地址列表?如果是这样,请分享您的智慧。谢谢!

此时这都是原型。我有这段代码(感谢 SO!),并且 string[] netAddresses 始终为空,即使计算机连接到网络并且 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);
                }
            }
        }

【问题讨论】:

  • 定义“真实”。任何或所有 IPv4 地址都可以同时使用。如果您的 PC 有两个或更多“真实”网卡怎么办?
  • @Gaz,对于非技术术语“真实”感到抱歉。我的意思是当前插入并用于通过浏览器与 Internet 通信的 NIC。我知道一次可能会插入多个 NIC,但在我们的用户群中,如果有的话,这将是极其罕见的。

标签: c# networking wmi


【解决方案1】:

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

网络地址

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

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

此属性尚未实现。它默认返回一个 NULL 值。

【讨论】:

  • 呃。 RTFM 适合我。对不起。
【解决方案2】:

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

  1. 按公制排序适配器,最低优先。
  2. 优先考虑 WAN IP,然后是 192.168.x.x,然后是 10.x.x.x,并完全忽略环回地址。

这会让您猜测“首选”地址,尽管它很难确定。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 2015-01-25
      • 2017-11-01
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      相关资源
      最近更新 更多