繁体   English   中英

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

[英]How to get default IP address when multiple IP addresses are assigned to PC

当将多个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;
    }
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());
            }
        }
    }
}

我认为您的意思是具有默认路由的接口。 您可以使用GetIpForwardTable函数获取IPv4路由表(谷歌快速显示可通过p / invoke对其进行调用),并查找0.0.0.0的目标路由(在命令行中运行route print以检查路由表的外观)。

我认为您误解了IPEnabled的含义, 据我所知 ,如果在接口上启用了TCP / IP,则该参数为TRUE。 因此,我认为这不是您想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM