如何使用 VB.NET 区分以太网和 WiFi IP 地址
How to distinguish between Ethernet and WiFi IP Addresses using VB.NET
我正在尝试开发一个通用的基于 VB.NET 的应用程序,它将 return 本地计算机的以太网 IP 地址发送给我。我已经参考了这里讨论的几个关于获取机器 IP 地址的问题,并找到了一些很好的建议。
我面临的问题是,当我运行这个应用程序时,它 return 是 WiFi 和以太网的 IP 地址。当我在别人的机器上运行这个应用程序时,我无法分辨哪个 IP 地址属于哪个接口。我只对以太网 IP 地址感兴趣。
有什么建议吗??
这是 returnIP 地址列表的函数。
Function getIP() As String
Dim ips As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName)
For Each ip In ips.AddressList
If (ip.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork) Then
MessageBox.Show(ip.ToString)
Return ip.ToString
End If
Next
Return Nothing
End Function
您可以枚举网络适配器,然后从每个适配器获取 IP 地址,而不是通过 IPHostEntry
获取 IP 地址。
A NetworkInterface
通过 NetworkInterfaceType
属性 提供其类型。对于以太网适配器,此 returns Ethernet
。对于无线适配器,文档没有具体说明,但它为我返回了 Wireless80211
。
示例代码:
Imports System.Net.NetworkInformation
Public Class Sample
Function GetIP() As String
Dim networkInterfaces() As NetworkInterface
networkInterfaces = NetworkInterface.GetAllNetworkInterfaces()
For Each networkInterface In networkInterfaces
If networkInterface.NetworkInterfaceType = NetworkInterfaceType.Ethernet Then
For Each address In networkInterface.GetIPProperties().UnicastAddresses
If address.Address.AddressFamily = Net.Sockets.AddressFamily.InterNetwork Then
Return address.Address.ToString()
End If
Next address
End If
Next networkInterface
Return Nothing
End Function
End Class
或者,如果你想要一个更简洁的版本,你可以使用 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
我正在尝试开发一个通用的基于 VB.NET 的应用程序,它将 return 本地计算机的以太网 IP 地址发送给我。我已经参考了这里讨论的几个关于获取机器 IP 地址的问题,并找到了一些很好的建议。
我面临的问题是,当我运行这个应用程序时,它 return 是 WiFi 和以太网的 IP 地址。当我在别人的机器上运行这个应用程序时,我无法分辨哪个 IP 地址属于哪个接口。我只对以太网 IP 地址感兴趣。
有什么建议吗??
这是 returnIP 地址列表的函数。
Function getIP() As String
Dim ips As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName)
For Each ip In ips.AddressList
If (ip.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork) Then
MessageBox.Show(ip.ToString)
Return ip.ToString
End If
Next
Return Nothing
End Function
您可以枚举网络适配器,然后从每个适配器获取 IP 地址,而不是通过 IPHostEntry
获取 IP 地址。
A NetworkInterface
通过 NetworkInterfaceType
属性 提供其类型。对于以太网适配器,此 returns Ethernet
。对于无线适配器,文档没有具体说明,但它为我返回了 Wireless80211
。
示例代码:
Imports System.Net.NetworkInformation
Public Class Sample
Function GetIP() As String
Dim networkInterfaces() As NetworkInterface
networkInterfaces = NetworkInterface.GetAllNetworkInterfaces()
For Each networkInterface In networkInterfaces
If networkInterface.NetworkInterfaceType = NetworkInterfaceType.Ethernet Then
For Each address In networkInterface.GetIPProperties().UnicastAddresses
If address.Address.AddressFamily = Net.Sockets.AddressFamily.InterNetwork Then
Return address.Address.ToString()
End If
Next address
End If
Next networkInterface
Return Nothing
End Function
End Class
或者,如果你想要一个更简洁的版本,你可以使用 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