0

当多个 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;
    }
4

3 回答 3

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());
            }
        }
    }
}
于 2012-05-08T09:24:35.870 回答
3

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

于 2012-05-08T09:00:57.287 回答
0

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

于 2012-05-08T07:17:42.937 回答