私は IPv4 アドレスを使用するアプリケーションを持っているので (それはそれらを長く保存します)、IPv4 アドレスしか理解できません。
JavaでIPv6アドレスをIPv4に変換できますか?
私は IPv4 アドレスを使用するアプリケーションを持っているので (それはそれらを長く保存します)、IPv4 アドレスしか理解できません。
JavaでIPv6アドレスをIPv4に変換できますか?
IPv4 アドレス範囲に相当する IPv6 がありますが、すべての IPv6 アドレスを IPv4 に変換することはできません。IPv4 アドレスよりも多くの IPv6 アドレスがあります。
この問題を回避する唯一の適切な方法は、IPv6 アドレスを認識して保存できるようにアプリケーションを更新することです。
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 はリンクから入手できます。
IPv4 と IPv6 アドレスの間 (または IP アドレスとデバイスの間) に 1 対 1 の対応がないため、通常、求めていることは不可能です。
実際に IPv4 アドレス空間を表す特定の範囲の IPv6 アドレスがありますが、一般的な IPv6 アドレスはこの範囲にはありません。