Как получить IP-адрес по умолчанию, когда ПК назначено несколько IP-адресов

Как можно получить IP-адрес по умолчанию, исключая петлевой адрес 127.0.0.1, когда множественные IP-адреса назначены для ПК, т.е. если ПК является многосетевым.

Следующий код возвращает правильный IP-адрес по умолчанию на одном ПК, но возвращает неверный IP-адрес на другом ПК, поэтому должно быть какое-то другое решение.

    private string[] GetDefaultIPWithSubnet()
    {
        ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection moc = mc.GetInstances();
        string[] ipSubnet = new string[2];
        foreach (ManagementObject mo in moc)
        {
            if ((bool)mo["IPEnabled"])
            {
                try
                {
                    string[] ips = (string[])mo["IPAddress"];
                    string[] subnets = (string[])mo["IPSubnet"];
                    ipSubnet[0] = ips[0].ToString();
                    ipSubnet[1] = subnets[0].ToString();
                    break;
                }
                catch (Exception ex)
                {
                    return null;
                }
            }
        }
        return ipSubnet;
    }

3 ответа

public static void GetDefaultIp()
{
    NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
    foreach (NetworkInterface adapter in adapters)
    {
        if (adapter.OperationalStatus == OperationalStatus.Up && adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet) 
        {
            IPInterfaceProperties properties = adapter.GetIPProperties();
            foreach (var x in properties.UnicastAddresses)
            {
                if (x.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                    Console.WriteLine(" IPAddress ........ : {0:x}", x.Address.ToString());
            }
        }
    }
}

Я думаю, что вы имеете в виду интерфейс с маршрутом по умолчанию. Вы можете получить таблицу маршрутов IPv4 с помощью функции GetIpForwardTable (быстрый Google показывает, что она вызывается через p/invoke) и искать маршрут назначения 0.0.0.0 (запустить route print в командной строке, чтобы проверить, как выглядит таблица маршрутов).

Я думаю, что вы неправильно поняли значение IPEnabled, насколько я знаю, что параметр TRUE, если TCP/IP включен на интерфейсе. Поэтому я не думаю, что это то, что вы ищете.

Другие вопросы по тегам