2012-05-08 120 views
0

當多個IP地址分配給PC時,如果PC是多宿主,如何獲得除127.0.0.1環回地址之外的默認IP地址。當多個IP地址分配給PC時,如何獲取默認IP地址

以下代碼在一臺PC上返回正確的默認IP地址,但在另一臺PC上返回錯誤的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

在這裏,我的意思是我們用於局域網/互聯網,不包括127.0.0.1環回地址。 – Coder

+1

如果您有兩個網絡接口,這在服務器機器上非常常見。哪一個是默認的呢?我想指出你的方向,所以你明白沒有這樣的事情。你應該得到所有的IP地址,並找出你感興趣的是哪一個。 –

回答

0

我想你是誤會IPEnabled的意思,as far as I know如果TCP/IP接口上啓用的參數爲TRUE。所以我不認爲這是你要找的。

2

我認爲你的意思是與默認路由的接口。您可以使用GetIpForwardTable函數(快速谷歌顯示它可通過p/invoke調用)獲取IPv4路由表,並查找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地址。看起來也很乾淨。我會鼓勵它;) –