如何为PC分配多个IP地址时获取默认IP地址

时间:2012-05-08 07:03:32

标签: c# .net ip wmi multihomed

当将多个IP地址分配给PC时,如果PC是多宿主,如何获得除127.0.0.1环回地址之外的默认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;
    }

3 个答案:

答案 0 :(得分: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());
            }
        }
    }
}

答案 1 :(得分:3)

我认为你的意思是默认路由的界面。您可以使用GetIpForwardTable函数获取IPv4路由表(快速谷歌显示它可通过p / invoke调用)并查找0.0.0.0目标路由(在命令行运行route print以查看路线表看起来像)。

答案 2 :(得分:0)

我认为您误解了IPEnabled的含义,as far as I know如果接口上启用了TCP / IP,则该参数为TRUE。所以我认为这不是你想要的。