获取用于连接Internet的IP地址。放弃虚拟网络

时间:2015-11-16 11:45:06

标签: c# .net vb.net ip

问题"如何获取IP地址?"也许在S.O.似乎是热门话题和 already answered ,但我在下面解释的环境中遇到了麻烦。

我正在编写一个简单的帮助程序类来提供各种网络实用程序,这将有助于我的开发。我想编写一个函数,它将返回当前机器的Ipv4或Ipv6,与我在Web浏览器中导航时使用的Ip相同,你知道......只是用户的相关IP,我想在没有查询 random site 的情况下执行此操作,以发现使用的IP地址。

对于大多数人来说,任务很简单:

(From ip As IPAddress In Dns.GetHostEntry(Dns.GetHostName).AddressList()
 Where ip.AddressFamily = AddressFamily.InterNetwork).FirstOrDefault

或者通过迭代System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces接口来做同样的事情,然而,我发现在大多数情况下方法效率不高......

在我的系统中,我有4个适配器,其中4个适配器2是由VMWare WorkStation创建的虚拟适配器(被威胁为以太网适配器),一个来自TAP-Win32驱动程序的虚拟适配器,以及"真实&#34 ;或用于在Internet上导航的物理以太网适配器。

因此,在C#或VB.Net中,如何识别正确的适配器以检索用于连接Internet的真实IP?同样的Ip会返回 this 等网站。

请注意,当我问" 如何识别正确的适配器 "我要问的是" 如何识别系统用于连接互联网的首选适配器? ",因为用户可能有许多物理以太网适配器,但只有一个将是"首选"连接到互联网,然后......怎么做?。

1 个答案:

答案 0 :(得分:0)

这是vb.net中使用LINQ的解决方案:

Function GetIP() As String
    Return (
        From networkInterface In networkInterface.GetAllNetworkInterfaces()
        Where networkInterface.NetworkInterfaceType = NetworkInterfaceType.Ethernet
        From address In networkInterface.GetIPProperties().UnicastAddresses
        Where address.Address.AddressFamily = Net.Sockets.AddressFamily.InterNetwork
        Select ip = address.Address.ToString()
    ).FirstOrDefault()
End Function