2012-05-08 93 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地址。看起来也很干净。我会鼓励它;) –