【问题标题】:Convert IPv4 into IPv6 on C在 C 上将 IPv4 转换为 IPv6
【发布时间】:2016-09-27 20:54:32
【问题描述】:

我正在尝试使用一些转换为 uint8_t 将 IPv4 转换为 IPv6。我知道 IPv4 有 4 个字节,而 IPv6 有 16 个 2 个字节的无符号整数,但我找不到进行转换的方法。

#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
     uint8_t ipv6[16],direccionIP[] = {193, 110, 128, 200};
     ipv6 = &direccionIP; //this doesn't work, and I don't come up with any method
     printf("%u", ipv6);
     return 0;
}

【问题讨论】:

  • 你不能在夸脱罐中装一品脱
  • 什么,将 IPv4 转换为 IPv6 是什么意思?寻址不兼容,您对 IPv6 地址的概念似乎存在缺陷。 IPv4 地址是 32 位整数,IPv6 地址是 128 位整数。

标签: c ipv6 ipv4


【解决方案1】:

正如其他人所说,没有与 ipv4/ipv6 的直接映射。但是,映射到/从 ipv4/ipv6 有多种方式,例如 6 到 4、teredo 等。

大多数情况下,转换后的 IPv4 地址放在 16 字节 IPv6 地址的低 4 字节中,而 IPv6 地址的其余部分有一系列字节表示映射。

【讨论】:

  • 别忘了提到所有这些方法都已被弃用,我们强烈建议不要...
【解决方案2】:

IPv4 和 IPv6 是具有不同地址的不同协议。一般情况下,您无法在 IPv4 和 IPv6 地址之间进行转换。

【讨论】:

  • 在 IPv6 空间内为 IPv4 地址保留了一个范围。
  • 这就是我指定“一般”的原因。您所说的是使用 IPv6 套接字来处理 IPv4 连接的应用程序。在某些情况下,这种“技巧”使得开发一个只有一个服务器套接字而不是 IPv4 和 IPv6 单独的服务器套接字的应用程序成为可能。为此,有一种方法可以以 IPv6 格式表示 IPv4 地址。但这只是软件技巧,在这种情况下,网络数据包是 IPv4。当与 IPv6 数据包通信时,没有这样的映射。 (我故意将 NAT64 等其他技巧排除在外,以避免与特殊情况进一步混淆)
猜你喜欢
  • 2020-11-06
  • 2015-03-28
  • 2019-09-22
  • 2015-03-10
  • 2011-01-03
  • 2018-01-23
  • 2017-12-17
  • 2010-12-06
  • 1970-01-01
相关资源
最近更新 更多