C#中的IPv6到IPv4交互转换

时间:2010-08-25 18:15:41

标签: c# asp.net ipv6 applet ipv4

我有一个IPv4格式的IP列表,我从之前的Web服务器收到的HttpRequest对象中收集了这些IP。我有一个java applet,它以Ipv6格式提供IP地址(java applet返回一堆数据和IP地址)。我需要检查applet返回的IP是否与列表中的任何项匹配。

如何互换IPv6和IPv4格式?

我的网络应用程序基于 ASP.Net C#

修改

这是我面临的问题。 Java applet从客户端返回一堆IP,我假设它取决于客户端机器的网卡数量。

除此之外,我从ASP.Net HTTPRequest对象获取IP地址。我需要找出哪些IP实际用于连接到我的网站并执行一些任务。

问题是有时我只从IPv6格式的javaapplet中获取一个IP,因为我从HTTPRequest对象获得的IP是IPv4格式,因此比较失败。

3 个答案:

答案 0 :(得分:4)

您正在谈论IPv4-IPv6映射或IPv4地址嵌入。

  

使用IPv4地址嵌入   创建IPv4之间的关系   地址和IPv6地址以帮助   从IPv4过渡到IPv6。一   type,兼容IPv4的IPv6   地址,用于设备   兼容IPv4和IPv6;它   以96位零开始。另一个,   IPv4映射地址用于   映射不是的IPv4设备   与IPv6兼容的IPv6   地址空间;它从80开始   零后跟16个。

...

  

这两种地址之间的区别很微妙,但是   重要。前80位是   永远为零,所以当你看到它时   知道它是一个嵌入式IPv4地址   某种。 IPv4兼容的IPv6   地址仅用于设备   实际上是IPv6感知的;该   此外还兼容IPv4兼容地址   其传统的IPv6地址。在   相反,如果看到“FFFF”   这是初始80之后的16位   表示传统的IPv4设备   其IPv4地址已映射   进入IPv6格式。它不是   支持IPv6的设备。

所以底线是除非它们被映射在一起,否则你将无法转换为/从。你需要一个translator

答案 1 :(得分:3)

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。如果需要比较任意地址,请根据需要添加额外的逻辑。

答案 2 :(得分:2)

假设您使用某种无线平台或具有无线功能。 IPV6与移动网络AKA“无线”的改进有关。将IPV6转换为IPV4并不是您想要的。 IPV6是一个真实的地址。如今,它是IP地址的新高级标准。看看Here并自己决定。您也可以手动执行here。 IPV6应该掩盖你的IPV4。

希望有所帮助。