获取并检查本地计算机的IP地址

时间:2012-01-31 13:37:22

标签: c# ip

我正在尝试在本地计算机上获取IP地址:

    private string GetIP()
    {

        string strHostName = "";
        strHostName = System.Net.Dns.GetHostName();

        IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);


        IPAddress[] addr = ipEntry.AddressList;

        foreach (IPAddress ipaddr in addr)
        {
            if (ipaddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                return ipaddr.ToString();
        }

        return "IP error";                                   
    }

但是我找不到一种方法来确定哪个接口是我需要的接口。例如:

enter image description here

我很幸运,我需要的是列表中的第二名。但如果它在后面我会得到一个错误的接口的IP。如何检查我是否获得了本地连接的IP(或者通常是负责连接的接口)。

2 个答案:

答案 0 :(得分:2)

您可以直接枚举network interfaces(而不仅仅是他们的IP),然后根据其接口类型进行过滤:

var interfaces = NetworkInterface.GetAllNetworkInterfaces()

然后用以下内容过滤它:

interfaces.Where(ni => ni.NetworkInterfaceType != NetworkInterfaceType.Loopback &&
                       ni.NetworkInterfaceType != NetworkInterfaceType.Tunnel)

它仍然可以返回多个网络接口,但它会过滤掉至少一些你不想要的网络接口。我使用上面的过滤器来摆脱环回和虚拟机接口。

然后,您可以使用IP properties获取网络接口的IP地址。

本着简洁的精神,一旦确定哪个接口是正确的接口,您就可以使用以下方式获取接口的IPv4地址(或至少其中一个接口):

iface.GetIPProperties().UnicastAddresses.SingleOrDefault(ua => ua.Address.AddressFamily == AddressFamily.InterNetwork);

答案 1 :(得分:0)

没有针对主机名返回一个地址的方法

IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());

它返回DNS中所有注册地址的本地计算机地址

因此,如果在您的DNS中,您的计算机有一个与一个IP地址关联的名称,它将仅返回该地址,否则将返回与该主机名关联的地址列表

您必须“过滤”列表才能了解您的本地地址

看看下面的内容:

How to get the IP address of the server on which my C# application is running on?