NetAddresses всегда нулевые в запросе Win32_NetworkAdapter - PullRequest
2 голосов
/ 19 октября 2011

Я пытаюсь получить IP-адрес активного сетевого адаптера, чтобы избежать использования виртуальных и других адаптеров VPN, которые в настоящее время не подключены.

На моем текущем ноутбуке следующий код возвращает 3 IP V4-адреса, и я не знаю, как получить «реальный», используемый IP-адрес из этого списка.

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

Глядя на документ MSDN здесь , я подумал, что, возможно, я на правильном пути. Кто-нибудь получил список IP-адресов на адаптер успешно? Если это так, пожалуйста, поделитесь своей мудростью. Спасибо!

Это все прототип на данный момент. У меня есть этот код (спасибо SO!), И строка [] 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);
                }
            }
        }

Ответы [ 3 ]

3 голосов
/ 19 октября 2011

из документов MS: http://msdn.microsoft.com/en-us/library/windows/desktop/aa394216%28v=vs.85%29.aspx

NetworkAddresses

Тип данных: строковый массив Тип доступа: только для чтения

Массив сетевых адресов для адаптера. Это свойство унаследовано от CIM_NetworkAdapter.

Это свойство еще не реализовано. По умолчанию возвращается значение NULL.

1 голос
/ 30 марта 2013

Посмотрите на WIn32_NetworkAdapterConfiguration, используя InterfaceIndex из Win32_NetworkAdapter, вы сможете получить нужную вам конфигурацию с IP-адресами, назначенными этому нику.

1 голос
/ 19 октября 2011

Нет такого понятия, как "настоящий" IP-адрес. Каждый отправленный вами пакет направляется к месту назначения на основе метрики адаптера и доступных путей маршрутизации. Вы можете угадать, какой IP-адрес используется в основном для интернет-трафика, выполнив следующие действия:

  1. Заказывайте ваши адаптеры по метрике, сначала в порядке убывания.
  2. Приоритет IP-адресов WAN, затем 192.168.x.x, затем 10.x.x.x, и полностью игнорируйте петлевые адреса.

Это даст вам предположение о «предпочтительном» адресе, хотя он вряд ли является окончательным.

...