2010-08-25 79 views
5

IPv4的相互轉換我有我已經從以前收集的HttpRequest對象接受我的Web服務器IP的的IPv4格式的列表。我有一個java applet,它提供Ipv6格式的IP地址(java applet會返回一串數據以及IP地址)。我需要檢查applet返回的IP是否與列表中的任何項目匹配。的IPv6在C#

如何互相轉換IPv6和IPv4格式?

我的web應用程序是建立在ASP.Net C#

編輯

這裏是我面臨的問題。 Java小應用程序從客戶端返回一串IP,我認爲這取決於客戶端計算機所具有的網卡數量。

隨着這個我從ASP.Net HttpRequest對象一個IP地址。我需要找出哪些IP實際用於連接到我的網站並執行一些任務。

的問題是有時我從IPv6格式javaapplet獲取只有一個IP,其中的IP我從HttpRequest對象是在IPv4格式,因此比較失敗。

回答

4

您正在談論IPv4-IPv6映射或IPv4地址嵌入。

IPv4地址嵌入用於 創建一個IPv4地址 與IPv6地址在 從IPv4到IPv6的轉換,以幫助之間的關係。一個 類型,IPv4兼容IPv6地址 ,用於能與IPv4和IPv6 兼容設備;它 開始於96個零位。另, IPv4的映射地址,被用於不屬於 兼容IPv6到IPv6 地址空間映射 IPv4的設備;它始於80, 零後接16個。

..

這兩種地址之間的差別是很微妙的,但 重要。第80位是 總是零,所以,當這被認爲是你 知道它是 某種嵌入的IPv4地址。 IPv4兼容IPv6 地址僅用於實際上可識別IPv6的設備 ; 與IPv4兼容的地址是其傳統IPv6地址的另外 。相比之下,如果在初始80之後看到「FFFF」爲 的16位,則這個 指定其IPv4地址已被映射爲 的常規IPv4設備 成爲IPv6格式。它不是支持IPv6的設備。

所以底線是,除非它們映射在一起,否則將無法轉換爲/從。你需要一個translator

+0

請檢查更新後的問題 – 2010-08-26 18:38:30

2

假設您使用某種無線平臺或具有無線功能。 IPV6與移動網絡AKA「無線」的改進有關。將IPV6轉換爲IPV4並非您所需要的。 IPV6是一個真實的地址。這是目前最新的IP地址高級標準。看看Here並自己決定。您也可以手動執行here。 IPV6應該掩蓋你的IPV4。

希望有所幫助。

+0

請檢查更新的問題 – 2010-08-26 18:39:05

3

0A0D似乎已經回答這個問題,但我給它一個鏡頭:

如果IPv6地址的前10個字節(80位)爲零,那麼你就可以比較的最後4個字節與4個字節的IPv4地址。

bool AreEquivalent(IPAddress ip6addr, IPAddress ip4addr) 
{ 
    byte[] ip6bytes = ip6addr.GetBytes(); 
    byte[] ip4bytes = ip4addr.GetBytes(); 
    for (int i = 0; i < 10; i++) 
    { 
    if (ip6bytes[i] != 0) 
     return false; 
    } 
    for (int i = 0; i < 4; i++) 
    { 
    if (ip6bytes[i + 12] != ip4bytes[i]) 
     return false; 
    } 
    return true; 
} 

這假設你已經知道什麼是ipv6和ipv4。如果需要比較任意地址,則根據需要添加額外的邏輯。

+0

上述代碼似乎並不完整。根據[標準](http://tools.ietf.org/html/rfc3513),除上述之外,還需要檢查IPv6地址上的字節10和11。對於「IPv4兼容的IPv6地址」,它們需要爲0,「IPv4映射的IPv6地址」爲FF。 – 2013-04-04 17:49:35