在 PHP 中检测 IPv6?
Posted
技术标签:
【中文标题】在 PHP 中检测 IPv6?【英文标题】:Detect IPv6 in PHP? 【发布时间】:2011-07-19 20:17:31 【问题描述】:我目前正在检测用户的 IPv4 地址并在 v4.1 中使用 IP 块。但是我想捕获 IPv6 并为此也有阻止列表,所以问题是: 将 IPv6 与 IPv4 获取相同的逻辑还是在 php 中使用不同的逻辑?我只是不确定每个设备是否都有 IPv4 和 IPv6 或者是其中之一,系统会自动检测它是什么格式并存储它?
【问题讨论】:
【参考方案1】:Apache 将REMOTE_ADDR
报告给 PHP。如果 Apache 在 v6 接口上侦听,它将是 v6 地址。
很容易区分。 IPv4 地址将始终包含句号 .
字符,而 IPv6 地址将始终包含冒号 :
。
在创建阻止列表(或白名单)时,您应该小心处理 v6 地址。它们可以通过使用两个连续的冒号::
来缩短。无法保证您的操作系统将使用较短或完整的形式,因此您的脚本必须处理它。详情请查看Wikipedia's IPv6页面。
【讨论】:
inet_pton
会将两个族解析为二进制字符串,您可以通过字符串的长度来确定族。以上是关于在 PHP 中检测 IPv6?的主要内容,如果未能解决你的问题,请参考以下文章