ip4和ip6以不同的方式转换

时间:2013-11-05 07:27:11

标签: php ip ipv6

我想将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)可以在数据库中完成而没有问题。

1 个答案:

答案 0 :(得分:1)

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

它们完全不同。

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