2017-08-15 200 views
1

IPv6アドレスをIPv4アドレスに変換する必要があります。これを行うには、私はpedmillon's answer to a related questionからコードを使用:PHPでIPv6をIPv4アドレスに変換する

$ipv6 = $_SERVER['REMOTE_ADDR']; 
$ipv4 = hexdec(substr($ipv6, 0, 2)). "." . hexdec(substr($ipv6, 2, 2)). "." . hexdec(substr($ipv6, 5, 2)). "." . hexdec(substr($ipv6, 7, 2)); 

私は自分のローカルホストでそれを試してみましたが、:: 1は0.1.0.0に変換されます。このコードは正しく動作していますか?

私は、0.1.0.0の代わりに127.0.0.1を表示する必要があります。

+6

IPv6アドレスをIPv4アドレスに変換することはできません。それは、リンゴをバナナに変えたいのと同じです。まず、** 340,282,366,920,938,463,463,374,607,431,768,211,456 **の可能なIPv6アドレスがありますが、** 4,294,967,296 **のIPv4アドレスは可能です。それで、私は洗練させましょう。それは、いくつかの銀河のリンゴを一つのバナナに変えたいのと同じです。 – spectras

+0

hmm ..もしApacheに代わりにIPv4アドレスを使用させるのが最善の解決策でしょうか? –

+2

未来を証明する解決策は、ipv6をサポートすることです。移行を容易にするために、両方のシステムを処理したくない場合は、ipv6アドレス空間にマップされたipv4アドレスをサーバに伝えることができます。そこからipv6で作業します。 – spectras

答えて

4

IPv4とIPv6は、全く異なる2つの相互に互換性のないネットワークアドレス方式です。一方から他方に「翻訳」する方法はありません。 IPv4アドレスが特定のIPv6アドレスに対応していないか、またはその逆です。インターネット上のノードの大多数は依然としてIPv4アドレスをこの時点で排他的に使用していますが、IPv4とIPv6のデュアルスタックを同時に実行する割合はわずかです。 IPv4とIPv6のノードは、お互いに直接話すことはできません。長い目で見れば、誰もがIPv6に専ら動いているはずですが、それは遠いところです。私は国

あなたはIPv4を使用して特定の領域をブロックするのと同じ方法を阻止するのIPv6アドレスを使用する方法

あなたが説明することができます:地理的な場所にIPアドレスをマップするデータベースを取得します。唯一の違いは、のIPv6アドレスのデータベースまたはサービスを探す必要があることです。

+0

IPブロックの帰属スキームは、このようなデータベースを構築するのがはるかに難しくなります。実際、私はipv6をサポートする3つのジオロケーションサービスをチェックしましたが、そのうち3つは私の国を間違っています。私のホストされたサーバーのこと。 ipv4アドレスでは、私の位置を正確に正確に特定します(正確な近隣)。 – spectras

+1

私はそれが簡単で現実的であると主張していませんでした。;-) – deceze

+0

'長期的にみて、誰もがIPv6に専念するべきですが、それは遠いところです。 ;) –

関連する問題