尝试获取我的IPv4地址,得到VirtualBox的IPv4地址

4

我尝试过各种方法来获取我的IPv4地址...

一些例子:

Dim s As String = Dns.GetHostEntry(Dns.GetHostName()).AddressList.Where(Function(a As IPAddress) Not a.IsIPv6LinkLocal AndAlso Not a.IsIPv6Multicast AndAlso Not a.IsIPv6SiteLocal).First().ToString()

_

Dim myClientMachineAddressList As IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName())
Dim myClientMachineIP As String = myClientMachineAddressList.AddressList(0).ToString()

_

strHostName = System.Net.Dns.GetHostName()
strIPAddress = System.Net.Dns.GetHostByName(strHostName).AddressList(0).ToString()

_

Dim entry = Dns.GetHostEntry(System.Net.Dns.GetHostName())
    For Each address In entry.AddressList
        If address.AddressFamily = AddressFamily.InterNetwork Then
            Return address.ToString
        End If
    Next

等等,所有的上述操作都给我 VirtualBox 的 IPv4 地址,如下图所示:

为什么会这样,我该如何解决?


1
你的计算机有多个IP地址,正如你已经注意到的那样。你的代码总是返回第一个IP地址(顺序不保证)。恰好第一个IP地址来自VirtualBox适配器。 - Bradley Uffner
2
您可以枚举计算机中的所有网络适配器,寻找符合您条件(名称、网关等)的适配器。然后返回该适配器的地址。很抱歉,我现在没有可用的函数名称。 - Bradley Uffner
我该如何获取所有IP地址及其网络适配器名称? - BanForFun
这看起来应该是一个不错的起点 https://msdn.microsoft.com/zh-cn/library/system.net.networkinformation.networkinterface.getallnetworkinterfaces(v=vs.110).aspx - Bradley Uffner
好的,我明天试试看 :) - BanForFun
显示剩余3条评论
1个回答

2

好的,我没有找到获取所需IP的方法,但是我找到了一种获取所有可用IP及其网络适配器名称的方法。以下是代码,以备需要:

首先导入 System.Net.SocketsSystem.NetSystem.Net.NetworkInformation

代码如下:

Dim lst As New List(Of String)
    For Each adapter As NetworkInterface In NetworkInterface.GetAllNetworkInterfaces
        lst.Add(adapter.Description & ": " & adapter.GetIPProperties.UnicastAddresses(1).Address.ToString)
    Next

lst 是包含所有网络适配器及其 IP 的列表。


干得好!只是要注意,网络适配器可能有多个地址,但您的代码只会返回第一个地址。如果您的代码从未在具有此类设置的计算机上运行,则可能不是问题。要修复它,您只需对“adapter.GetIPProperties.UnicastAddresses”进行内部循环即可。 - Bradley Uffner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接