首页 文章

从Android上的IPv4地址合成IPv4映射的IPv6地址?

提问于
浏览
1

我正在尝试从Android中的IPv4地址(本机代码或Java本身)中合成IPv6地址,如RFC-7050中所述,以便在NAT64之后使用 .

在iOS中工作时,通过调用 getaddrinfo 可以使用此选项,但是,Android的 getaddrinfo 实现似乎只会为主机名而不是IPv4地址合成IPv6 .

在iOS上,在NAT64之后,以下代码将在变量 res 的地址列表中生成合成的IPv6地址 . 但是,在Android上,相同的本机代码将生成IPv4地址,除非我将主机名而不是IPv4地址传递给 getaddrinfo .

struct addrinfo *res;
getaddrinfo("x.x.x.x", "80", NULL, &res);

Edit

我知道Android实现了CLAT / 464lat,但这并未涵盖所有设备和网络 . 一个主要的例子是仅支持IPv4的网络背后的NAT64网络 . 示例:Internet - >仅IPv4网络 - > NAT64网络 - >客户端客户端将具有RFC-4193下的本地IPv6地址(我相信)但只能通过其NAT64网关访问Internet,这意味着NAT64将具有在向上游发送地址之前转换地址 . 所以我需要的是一种为合成IPv6地址生成前缀的方法 . 理想情况下,我们需要合成IPv6地址才能到达IPv4 endpoints .

1 回答

  • 2

    这可能是也可能不是你的答案:

    您无需在Android上合成地址 . 它有464xlat模拟NAT64网络上的IPv4堆栈,因此您的应用程序可以使用IPv4,Android将负责幕后的映射 .

    iOS和Android之间的区别在于Android在堆栈中实现了IPv4仿真 . Apple决定让他们保持IP堆栈的清洁,并为开发人员提供工具(如 getaddrinfo )来自行完成映射 . 不同的设计决定 .

相关问题