2016-09-26 103 views
4

我用盡了一切辦法讓我的IPv4地址...試圖讓我的IPv4地址獲取的VirtualBox的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 

E.t.c.

...但上述所有給我的VirtualBox的IPv4一樣:

這是爲什麼,我該如何解決?

+1

正如你已經注意到的,你的電腦有多個IP地址。你的代碼總是返回第一個(不保證順序)。恰巧,第一個來自VirtualBox適配器。 –

+0

我可以做些什麼嗎? – BanForFun

+2

您可以枚舉計算機中的所有網絡適配器,查找符合條件(名稱,網關等)的網絡適配器。然後從該適配器返回地址。對不起,我現在沒有可用的函數名稱。 –

回答

2

好吧我沒有找到一種方法來獲得我想要的IP,但我找到了一種方法來獲得所有可用的IPS與他們的網絡適配器名稱。這裏是萬一有人代碼希望它:

首次進口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是與所有的網絡適配器及其IPS名單

+0

不錯的工作!請注意,網絡適配器可能有多個地址,但您的代碼只會返回第一個地址。但是,這對你來說可能不是問題,如果你的代碼永遠不會在具有這種設置的計算機上運行。要解決它,你只需要在adapter.GetIPProperties.UnicastAddresses中做一個內部循環。 –

+0

好的,謝謝!.. :) – BanForFun