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

我认为将 IPv4 地址完全存储为 IPv6 地址并不是一个好主意。

它们是完全不同的东西。

如果您运行的服务器在禁用:ffff:的 IPv6 套接字上侦听,您可能会遇到该版本。IPV6ONLY然后,您会注意到 IPv4 主机192.168.1.100连接为::ffff:c0a8:164. 但是你不能通过 IPv6 连接到这个地址——为此,你需要一个 IPv4 套接字。所以最好以简短的形式存储地址,这样更容易通过长度来区分它们。

于 2013-11-05T07:37:49.453 回答