::ffff:
IPv6(128ビット)スペース内に配置されるIPv4(32ビット)アドレスのサブネットプレフィックスです。IPv6は、サブネットプレフィックスとインターフェイスサフィックスの2つの部分に分かれています。それぞれが64ビット長、つまり4つの16進文字の4つのグループです。
IPv6では、先行ゼロを削除してから連続ゼロを削除することができます。つまり、::ffff:
実際にはに変換されます0000:0000:ffff:0000
。このアドレスはIPv4からIPv6へのサブネットプレフィックスとして指定されているため、どのIPv6プロセッサもIPv4アドレスで機能していることを理解し、処理しますそれに応じて。
近い将来、IPアドレスはすべてIPv6になります。これは、IPv4アドレススペースの数(42億から、その他の目的のためのスペースを差し引いたもの)がほぼなくなるためです。
IPv6では、はるかに大きなスペースが可能です。「誰にとっても340十億ユーロで十分だ」-IPv6について語るビルゲイツ氏。
IPv6名前空間を使用してIPアドレスのアドレス指定を開始::ffff:
し、コードにを含めることが重要です。将来、これらのコロンの間に実際の16進データが存在するようになるためです。審美的な理由でそれを取り除くと、コードがIPv6ネットワークに切り替わったとき、またはIPv6アドレスに直面したときにコードが壊れます。
一部のネットワークは現在IPv6を実行しており、間もなくIPv6 IPアドレスに直面することになります。今すぐ飛躍するか、将来あなたのコードを壊す危険を冒してください。
問題のTL; DR(短縮)バージョンは次のとおりです。すべてが正常に動作しています。変更しないでください。これはIPv4アドレスのIPv6バージョンです。
コードにIPv6との互換性を持たせたい場合は、::ffff:
プレフィックスを確認するだけです...プレフィックスが存在する場合は削除し、残りをIPv4として処理します... ::ffff:
存在しない場合はIPv6アドレスです。そのように処理する必要があります。文字列にピリオドが含まれているかどうかを確認することで再確認できます。含まれている場合は、IPv4です。
IPアドレスに加える必要がある調整以外はすべて覚えておいてください。IPを記録するだけですよね?パーサーとログの集合体にとって::ffff:127.0.0.1
、今後期待されることなどが重要になります。IPを変更する必要がない限り、受け取ったままにしておきます。
req.ip
かreq.ips
?