Как получить 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 включен на интерфейсе. Поэтому я не думаю, что это то, что вы ищете.