我想将IP范围存储到数据库中。问题是有些IP是ipv4和一些ipv6。我想将所有转换为ipv6然后存储到数据库中。例如: 根据{{3}}:
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)可以在数据库中完成而没有问题。
答案 0 :(得分:1)
我认为将IPv4地址存储为与IPv6地址完全相同并不是一个好主意。
它们完全不同。
如果您运行的服务器侦听已禁用:ffff:
的IPv6套接字,则可能会遇到IPV6ONLY
版本。然后,您会注意到IPv4主机192.168.1.100
连接为::ffff:c0a8:164
。但是你无法通过IPv6连接到这个地址 - 为此,你需要一个IPv4套接字。因此,最好以简短的形式存储地址,这样可以更容易地通过长度区分它们。