获取用于连接到Internet的IP地址.放弃虚拟网络
本文关键字:放弃 地址 虚拟 虚拟网 网络 IP 用于 连接 Internet 获取 | 更新日期: 2023-09-27 18:22:01
"如何获取IP地址?"这个问题可能看起来很热门,在S.O.中已经回答了,但我在下面解释的情况中遇到了麻烦。
我正在编写一个简单的助手类来提供各种各样的网络实用程序,这些实用程序将帮助我进行开发。我想写一个函数,返回当前机器的Ipv4或Ipv6,与我在web浏览器中导航时使用的Ip相同,你知道。。。只有用户的相关Ip,我希望在不查询随机站点的情况下执行此操作,以发现所使用的Ip地址。
对于大多数人来说,任务很简单:
(From ip As IPAddress In Dns.GetHostEntry(Dns.GetHostName).AddressList()
Where ip.AddressFamily = AddressFamily.InterNetwork).FirstOrDefault
或者通过迭代System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces
接口来做同样的事情,然而,我发现方法在大多数情况下都不是有效的。。。
在我的系统中,我有4个适配器,其中2个是VMWare工作站创建的虚拟适配器(被称为以太网适配器),一个来自TAP-Win32驱动程序的虚拟适配器,以及我用来在互联网上导航的"真实"或物理以太网适配器。
那么,在C#或VB.Net中,我如何确定合适的适配器来检索用于连接到Internet的真实Ip?返回this等网站的Ip相同?。
请注意,当我问"如何识别正确的适配器"时,我要问的是"怎样识别系统将用于连接到Internet的首选适配器?",因为用户可能有许多物理以太网适配器,但只有一个是连接到Internet"首选"适配器,那么。。。如何做到这一点?。
以下是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