2012-05-08 5 views
0

Как получить IP-адрес по умолчанию, исключающий кольцевой адрес 127.0.0.1, если для ПК назначены mutliple IP-адреса, если компьютер является многоточечным.Как получить IP-адрес по умолчанию при назначении нескольким 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; 
    } 
+1

Каково определение ip-адреса по умолчанию для компьютера? Я бы сказал 127.0.0.1, но вам может понадобиться что-то еще ... PS: Возможно, вам стоит взглянуть на это: http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface .aspx –

+0

Здесь я имел в виду тот, который мы используем для LAN/internet, исключая адрес loopback 127.0.0.1. – Coder

+1

И что, если у вас есть два сетевых интерфейса, что очень часто встречается на серверных машинах. Какой из них по умолчанию? Я пытаюсь указать вам направление, поэтому вы понимаете, что такой вещи нет. Вы должны получить все IP-адреса и выяснить, какие из них вам интересны. –

ответ

0

Я думаю, вы поняли смысл IPEnabled, as far as I know этот параметр имеет значение ИСТИНА, если TCP/IP включен на интерфейсе. Поэтому я не думаю, что это то, что вы ищете.

2

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

4
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()); 
      } 
     } 
    } 
} 
+0

Это хороший вариант, если у вас есть одна сетевая карта с одним IP-адресом. Выглядит тоже чисто. Я буду его продвигать;) –

 Смежные вопросы

  • Нет связанных вопросов^_^