Синтезировать IPv4 сопоставленный IPv6-адрес из IPv4-адреса на Android?

Я пытаюсь синтезировать IPv6-адрес из IPv4-адреса в Android (либо в собственном коде, либо в самой Java), как описано в RFC-7050, для использования за NAT64.

При работе в iOS эта опция была доступна через звонок getaddrinfoОднако, похоже, что реализация Android getaddrinfo будет синтезировать IPv6 только для имен хостов, а не для адресов IPv4.

На iOS, за NAT64, следующий код будет генерировать синтезированный IPv6-адрес внутри переменной resсписок адресов. Однако в Android тот же собственный код будет генерировать адрес IPv4, если я не передам имя хоста вместо адреса IPv4 getaddrinfo,

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

редактировать

Я знаю, что в Android реализован CLAT/464lat, однако он не охватывает все устройства и сети. Одним из ярких примеров будет сеть NAT64 за сетью только IPv4.

Пример: Интернет -> Сеть только IPv4 -> Сеть NAT64 -> Клиент

У клиента будет локальный IPv6-адрес в соответствии с RFC-4193 (я полагаю), но он сможет получить доступ к Интернету только через шлюз NAT64, что означает, что NAT64 должен будет преобразовывать адреса перед отправкой их в восходящем направлении.

Так что мне нужен способ генерации префикса для синтезированного IPv6-адреса

В идеале нам нужно было бы синтезировать адрес IPv6, чтобы достичь конечной точки IPv4.

1 ответ

Это может или не может быть ответом для вас:

Вам не нужно синтезировать адреса на Android. Он имеет 464xlat, который имитирует стек IPv4 в сети NAT64, так что ваше приложение может просто использовать IPv4, а Android позаботится о отображении за кулисами.

Разница между iOS и Android заключается в том, что Android реализовал эмуляцию IPv4 в стеке. Apple решила, что они хотят поддерживать чистоту стека IP и предоставлять разработчику инструменты (например, getaddrinfo) сделать отображение самостоятельно. Отличное дизайнерское решение.

Другие вопросы по тегам