2017-08-08 20 views
0

私はNAT32の背後で使用するためにRFC-7050に記載されているように、AndroidのIPv4アドレス(ネイティブコードまたはJava自体のいずれか)からIPv6アドレスを合成しようとしています。AndroidのIPv4アドレスからIPv4マップされたIPv6アドレスを合成しますか?

このオプションはgetaddrinfoを呼び出して利用できましたが、Androidのgetaddrinfoの実装では、IPv4アドレスではなくホスト名に対してのみIPv6が合成されるようです。

iOSでは、NAT64の背後にある間に、次のコードは変数resのアドレスリスト内に合成されたIPv6アドレスを生成します。しかし、AndroidではIPv4アドレスの代わりにホスト名をgetaddrinfoに渡さない限り、同じネイティブコードがIPv4アドレスを生成します。

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

編集

私はAndroidがCLAT/464latを実装していることを知っていますが、しかし、それはすべてのデバイスとネットワークをカバーしていません。 1つの最も重要な例は、IPv4専用ネットワークの背後にあるNAT64ネットワークです。

例:インターネット - >はIPv4のみのネットワーク - >NAT64ネットワーク - >クライアント

クライアントがRFC-4193の下でローカルIPv6アドレスを持っている(私は信じている)だけのことができるようになりそのNAT64ゲートウェイを介してインターネットにアクセスします。つまり、NAT64はアドレスを上流に送信する前に変換する必要があります。

だから私は必要なものを合成したIPv6アドレス

の接頭辞を生成する方法である理想的には、我々は、IPv4のエンドポイントに到達するためにIPv6アドレスを合成する必要があります。

答えて

2

これかもしれないまたはあなたのための答えではないかもしれません:あなたは、Android上のアドレスを合成する必要はありません

。これはNAT64ネットワーク上でIPv4スタックをシミュレートする464xlatを持つので、アプリケーションはIPv4だけを使用でき、Androidはバックグラウンドでのマッピングを処理します。

ここでiOSとAndroidの違いは、AndroidがIPv4エミュレーションをスタックに実装したことです。 Appleは、IPスタックをきれいに保ち、開発者にマッピングを行うツール(getaddrinfoなど)を提供したいと決めました。異なるデザインの決定。

+0

464xlatの実装がWi-Fiで動作しないと私は理解しています。 IPv4のみの上流ネットワークの背後にNAT64を使用するネットワークが存在します。つまり、「インターネット - > IPv4のみネットワーク - > NAT64ネットワーク - >クライアント」であり、私はこの状況を他のものの中で説明しようとしています。 –

関連する問題