我有许多项目的功能依赖于$_SERVER['REMOTE_ADDR]
,$_SERVER['HTTP_X_FORWARDED_FOR']
和$_SERVER['CLIENT_IP']
提供的IP地址。
由于我们总是以相同的格式接收它们,因此IPv4地址很容易匹配:4个整数,没有前导0,由点.
分隔。
而IPv6地址可以被压缩。例如:FF01:0:0:0:0:0:0:101 -> FF01::101
我一直在研究这个问题,但没有找到任何相关信息,所以我想问问你的经验。 $_SERVER['REMOTE_ADDR]
是否使用标准?可以安全地假设它始终会以压缩或未压缩的形式接收到吗?
还是应该在尝试测试之前压缩所有我的IPv6字符串?
注意:
理想情况下,我希望将IPv6地址处理为字符串,而不是二进制结构,以提高数据库/源代码的可读性并允许更轻松的IP范围匹配。
inet_pton()
来操作任何地址。 - Álvaro González