2016-12-13 36 views
-1

我知道如何獲得ipv4和ipv6,但我有問題。 我的任務是編寫代碼,將獲得的IPv4如果它存在,如果不能獲得IPv6的如何獲得ipv6,如果ipv4不存在於VB.net

我對GET IPv4源的樣子:

szIPAdress = System.Net.Dns.GetHostName() 
'szIPAdress = System.Net.Dns.GetHostEntry(szIPAdress).AddressList.ToString() 
Dim hostname As IPHostEntry = Dns.GetHostByName(szIPAdress) 
Dim ip As IPAddress() = hostname.AddressList 
+0

我敢肯定,你想這樣做:取得IPv6地址,如果它存在。如果沒有,則返回到IPv4。如果可能,您想使用IPv6。無論如何,你現在的代碼出了什麼問題?也許考慮'Dns.GetHostAddresses'。 –

+0

我有一臺沒有地址的計算機IPv6,當我試圖獲得ipv6時,計算機返回的值等於1,所以我不知道如何在IPv6存在時檢查代碼 - 那是我的主要問題 – Elgahir

+1

使用AddressFamily屬性'IPAddress'對象。返回IPv4的「InterNetwork」或IPv6的「InterNetworkV6」。 –

回答

0

看一看這些應該幫助您:

使用此得到的IPv4

Public Function GetIPv4Address() As String 

    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName()) 

    Dim address As String = "" 

    Try 
     address = hostEntry.AddressList().Where(Function(a) a.AddressFamily = Sockets.AddressFamily.InterNetwork).First().ToString() 
    Catch 
    End Try 

    Return address 

End Function 

使用此得到的IPv6

Public Function GetIPv6Address() As String 

    Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName()) 

    Dim address As String = "" 

    Try 
     address = hostEntry.AddressList().Where(Function(a) a.AddressFamily = Sockets.AddressFamily.InterNetworkV6).First().ToString() 
    Catch 
    End Try 

    Return address 

End Function 
+0

感謝您的幫助,但我沒有問題獲得adres,但我有問題來確定是否存在地址IPv6。 在我的電腦我只有地址IPv4,所以我不知道什麼時候返回IPv4或IPv6我試圖使用,如果如果(szIPAdress = System.Net.Sockets.AddressFamily.InterNetworkV6) 但這並不起作用。 – Elgahir

+0

@Elgahir如果您調用GetIPv6Address並返回「」,則表示該地址不存在。捕獲將處理。 – Bugs

+0

在我的案例程序return :: 01所以我認爲這是問題。我不知道這是不是一個標準 – Elgahir