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

本文关键字:IP 地址 PC 获取 默认 分配 | 更新日期: 2023-09-27 18:33:24

当将多个IP地址分配给PC时,即如果PC是多宿主的,如何获得默认IP地址,不包括127.0.0.1环回地址。

以下代码在一台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;
    }

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

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。所以我不认为这是你要找的。