簡體   English   中英

C#中的IPv6到IPv4交互轉換

[英]IPv6 to IPv4 inter-conversion in C#

我有一個IPv4格式的IP列表,我從我以前的Web服務器收到的HttpRequest對象中收集了這些IP。 我有一個java applet,它以Ipv6格式提供IP地址(java applet返回一堆數據和IP地址)。 我需要檢查applet返回的IP是否與列表中的任何項匹配。

如何互換IPv6和IPv4格式?

我的Web應用程序基於ASP.Net C#構建

編輯

這是我面臨的問題。 Java applet從客戶端返回一堆IP,我假設它取決於客戶機具有的網卡數量。

與此同時,我從ASP.Net HTTPRequest對象獲取IP地址。 我需要找出哪些IP實際用於連接到我的網站並執行一些任務。

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

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

IPv4地址嵌入用於在IPv4地址和IPv6地址之間創建關系,以幫助從IPv4過渡到IPv6。 一種類型,IPv4兼容的IPv6地址,用於兼容IPv4和IPv6的設備; 它以96個零位開始。 另一個是IPv4映射地址,用於將與IPv6不兼容的IPv4設備映射到IPv6地址空間; 它以80個零開始,然后是16個零。

..

這兩種地址之間的區別是微妙的,但很重要。 前80位始終為零,因此當您看到它時,您知道它是某種嵌入式IPv4地址。 IPv4兼容的IPv6地址僅用於實際支持IPv6的設備; IPv4兼容地址是其傳統IPv6地址的補充。 相反,如果在初始80之后看到16位的“FFFF”,則這表示傳統的IPv4設備,其IPv4地址已被映射為IPv6格式。 它不是支持IPv6的設備。

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

0A0D似乎已經回答了這個問題,但我會試一試:

如果IPv6地址的前10個字節(80位)為零,則可以將最后4個字節與IPv4地址的4個字節進行比較。

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。 如果需要比較任意地址,請根據需要添加額外的邏輯。

假設您使用某種無線平台或具有無線功能。 IPV6與移動網絡AKA“無線”的改進有關。 將IPV6轉換為IPV4並不是您想要的。 IPV6是一個真實的地址。 如今,它是IP地址的新高級標准。 看看這里 ,自己決定。 你也可以在這里手動完成。 IPV6應該掩蓋你的IPV4。

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM