问题"如何获取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 等网站。
请注意,当我问" 如何识别正确的适配器 "我要问的是" 如何识别系统用于连接互联网的首选适配器? ",因为用户可能有许多物理以太网适配器,但只有一个将是"首选"连接到互联网,然后......怎么做?。
答案 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