1

IP の範囲をデータベースに保存したい。問題は、一部の IP が ipv4 であり、一部が ipv6 であることです。すべてをipv6に変換してからデータベースに保存したい。例:コンバータによると:

192.168.1.100 => 0:0:0:0:0:ffff:c0a8:164

問題になるのは、php がそれらを異なる方法で処理することです。

echo bin2hex(inet_pton('192.168.1.100'));
c0a80164

echo bin2hex(inet_pton('0:0:0:0:0:ffff:c0a8:164'));
00000000000000000000ffffc0a80164

echo bin2hex(inet_pton('0000:0000:0000:0000:0000:0000:192.168.1.100'));
000000000000000000000000c0a80164

私にとって、IP 比較 (特に ipv4 の場合) をデータベースで問題なく実行できることは非常に重要です。

4

1 に答える 1

1

IPv6 アドレスとまったく同じように IPv4 アドレスを保存するのは得策ではないと思います。

それらは完全に異なるものです。

:ffff:無効になっている IPv6 ソケットをリッスンするサーバーを実行すると、バージョンが表示されることがありますIPV6ONLY。次に、IPv4 ホスト192.168.1.100が として接続していることがわかります::ffff:c0a8:164。ただし、IPv6 経由でこのアドレスに接続することはできません。この目的のためには、IPv4 ソケットが必要です。そのため、アドレスを短い形式で保存すると、長さで区別しやすくなります。

于 2013-11-05T07:37:49.453 に答える