2016-12-13 39 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