16

私は IPv4 アドレスを使用するアプリケーションを持っているので (それはそれらを長く保存します)、IPv4 アドレスしか理解できません。

JavaでIPv6アドレスをIPv4に変換できますか?

4

5 に答える 5

23

IPv4 アドレス範囲に相当する IPv6 がありますが、すべての IPv6 アドレスを IPv4 に変換することはできません。IPv4 アドレスよりも多くの IPv6 アドレスがあります。

この問題を回避する唯一の適切な方法は、IPv6 アドレスを認識して保存できるようにアプリケーションを更新することです。

于 2010-05-07T06:33:47.233 に答える
8

IPAddress Java ライブラリは、ここで説明していることを実現できます。

IPv6 アドレスは 16 バイトです。そのライブラリを使用して、16 バイトの配列から開始する場合は、IPv6 アドレス オブジェクトを構築できます。

IPv6Address addr = new IPv6Address(bytes); //bytes is byte[16]

そこから、アドレスが IPv4 にマッピングされているか、IPv4 と互換性があるか、IPv4 が変換されているかなどを確認できます (IPv6 が IPv4 アドレスを表す方法は多数あります)。ほとんどの場合、IPv6 アドレスが IPv4 アドレスを表す場合、ipv4 アドレスは下位 4 バイトにあるため、派生した IPv4 アドレスは次のように取得できます。その後、バイトに戻すことができます。これは、IPv4 ではわずか 4 バイトになります。

    if(addr.isIPv4Compatible() || addr.isIPv4Mapped()) {
        IPv4Address derivedIpv4Address = addr.getEmbeddedIPv4Address();
        byte ipv4Bytes[] = derivedIpv4Address.getBytes();
        ...
     }

javadoc はリンクから入手できます。

于 2016-09-07T13:46:54.203 に答える
5

IPv4 と IPv6 アドレスの間 (または IP アドレスとデバイスの間) に 1 対 1 の対応がないため、通常、求めていることは不可能です。

実際に IPv4 アドレス空間を表す特定の範囲の IPv6 アドレスがありますが、一般的な IPv6 アドレスはこの範囲にはありません。

于 2010-05-07T06:32:37.733 に答える