2014-02-25 81 views
0

我想在Visual Basic 2012中將IPv6地址(具有嵌入式IPv4地址的那些IPv6地址)「代表」到其等效的IPv4地址。以下是我用於相同的代碼片段:ipv6等效於回送地址

Dim ip As IPAddress = IPAddress.Parse(strIP) 
Dim ipv4 As IPAddress 
Dim ipStr As String = ip.ToString() 
IPAddress.TryParse(ipStr.Substring(ipStr.LastIndexOf(":") + 1), ipv4) 
Console.Writeline(ipv4.MapToIPv4().ToString) 

但與環回接口(127.0.0.1),IPv6的表示似乎是:: 1,而不是0:0:0:0:0:FFFF:7F00:1嗎?這個地址是唯一的「偏差」嗎?還有其他需要「特殊」治療的地址嗎?

謝謝!

回答

1

您無法將IPv6地址「轉換」爲IPv4,因此我不確定您要實現的目標。

您是指IPAddress.IsIPv4MappedToIPv6屬性?這不是一回事。注意:這個屬性是在.NET 4.5引入所以不會在VB2012

工作,你是正確地說,對於IPv6的迴環ADRESS是::1

不知道這是否可以幫助,但你可以解析字符串轉換成。 Net IPAddress並檢查IPAddress.AddressFamily屬性以查看它是否設置爲InternNetworkV6,如果它是IPAddress是v6。

例如

Dim ip1 As IPAddress = IPAddress.Parse("::1") 
Dim ip2 As IPAddress = IPAddress.Parse("127.0.0.1") 
Debug.WriteLine("Is ip1 a v6 address:" + (ip1.AddressFamily = Sockets.AddressFamily.InterNetworkV6).ToString) 
Debug.WriteLine("Is ip2 a v6 address:" + (ip2.AddressFamily = Sockets.AddressFamily.InterNetworkV6).ToString) 

輸出:

Is ip1 a v6 address:True 
Is ip2 a v6 address:False 
+0

轉換被錯誤地使用。將編輯它。 – user907810

0

我的理解是,.NET(版本3.5到4.5.2,在我的測試)將返回的IPv6爲兩個冒號地址,這樣的 -

Dim host As String = Dns.GetHostName() 
Dim ip As IPHostEntry = Dns.GetHostEntry(host) 
Console.WriteLine(ip.AddressList(0).ToString()) 
Console.ReadKey() 

輸出fe80 :: 2d36:51be:16dc:257b%36在我的情況下,通過網關到ADSL調制解調器的無線連接。 我對你的問題感興趣的是我想返回IPv4地址,我知道它是203.214.36.136(直到我重置調制解調器)。我可以看到,通過登錄到我的ISP,或者使用類似這樣的代碼 -

Using client = New WebClient() 
    Dim ret As String = client.DownloadString("http://icanhazip.com/").Trim() 
    Console.WriteLine(ret) 
    Console.ReadKey() 
    client.Dispose() 
End Using 

使用將返回IPv4的IP地址(我可以驗證該網頁是正確的雙方登錄到我的ADSL調制解調器,進入我的ISP的網頁)。我不確定頁面上的哪些代碼會重定向以返回IP地址(我從一個SO回答中複製了這個問題,它也處理IP地址)。

嘗試使用.MaptoIPv4的代碼(當然,我使用VS2012或2013,使用.NET v4.5)我還爲ipv4(您的變量)使用了空值,但是從我的第一個代碼返回的字符串值上面的塊,爲您的可變strIP。

失敗。

我仍然試圖擺脫這些方法應該如何使用。

其實,我錯在假設主機AddressList中的第一個IP地址是我想要的。其中有3個,其中有2個是IPv6,還有一個是我的調制解調器的網關。

所以我沒有貢獻太多的解決方案。抱歉。