【问题标题】:IPv6 to IPv4 inter-conversion in C#C# 中的 IPv6 到 IPv4 相互转换
【发布时间】:2011-04-03 21:29:20
【问题描述】:

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

如何相互转换 IPv6 和 IPv4 格式?

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

编辑

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

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

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

【问题讨论】:

    标签: c# asp.net ipv6 applet ipv4


    【解决方案1】:

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

    IPv4 地址嵌入用于 在 IPv4 之间建立关系 地址和 IPv6 地址以帮助 从 IPv4 到 IPv6 的过渡。一 类型,与 IPv4 兼容的 IPv6 地址,用于设备是 兼容 IPv4 和 IPv6;它 以 96 个零位开头。另一个, IPv4 映射地址,用于 映射非 IPv4 设备 兼容 IPv6 进入 IPv6 地址空间;它以 80 开头 0 后跟 16 个 1。

    ..

    这两种地址的区别是微妙的,但是 重要的。前 80 位是 总是零,所以当你看到这个时 知道它是一个嵌入的 IPv4 地址 某种。 IPv4 兼容 IPv6 地址仅用于设备 实际上是 IPv6 感知的;这 IPv4 兼容地址是另外的 到其传统的 IPv6 地址。在 相反,如果看到“FFFF” 初始 80 之后的 16 位,这 指定传统的 IPv4 设备 其 IPv4 地址已被映射 转换成 IPv6 格式。它不是一个 支持 IPv6 的设备。

    因此,底线是除非它们被映射在一起,否则您将无法相互转换。你需要translator

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 上面的代码似乎并不完整。根据standard,除了上述之外,还需要检查IPv6地址上的字节10和11。对于“与 IPv4 兼容的 IPv6 地址”,它们需要为 0,对于“IPv4 映射的 IPv6 地址”,它们需要为 FF。
      【解决方案3】:

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

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-06
        • 2022-12-22
        • 2012-06-29
        • 2015-03-28
        • 2019-09-22
        • 2015-03-10
        • 2011-01-03
        • 1970-01-01
        相关资源
        最近更新 更多