如何使用VB.NET区分以太网和WiFi IP地址

时间:2015-01-08 15:24:55

标签: vb.net wifi ip-address ethernet

我正在尝试开发一个基于VB.NET的通用应用程序,它将返回本地计算机的以太网IP地址。我已经提到了这里讨论的几个问题,用于获取机器的IP地址,并找到了一些很好的建议。

我面临的问题是,当我运行此应用程序时,它会返回WiFi和以太网的IP地址。当我在别人的机器上运行这个应用程序时,我无法分辨哪个IP地址属于哪个接口。我对以太网IP地址感兴趣。

有什么建议吗?

这是返回IP地址列表的函数。

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

1 个答案:

答案 0 :(得分:1)

您可以通过网络适配器枚举,然后从每个适配器获取IP地址,而不是通过IPHostEntry获取IP地址。

NetworkInterface通过NetworkInterfaceType属性提供其类型。对于以太网适配器,返回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