![](/img/trans.png)
[英]Enable and Disable IPv4 and IPv6 of an adapter programmatically in C#
[英]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。 如果需要比較任意地址,請根據需要添加額外的邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.