IP4 和 IP6 以不同的方式转换


ip4 and ip6 convert in different way

我想将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)可以在数据库中毫无问题地完成是非常重要的。

我认为像

IPv6地址一样存储IPv4地址不是一个好主意。

它们是完全不同的东西。

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