在 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?的主要内容,如果未能解决你的问题,请参考以下文章

检测阿里(腾讯云)服务器ipv6通道

IPv6邻节点不可到达检测学习(NUD)

怎么配置使keepalived支持ipv6,能够通过检测ipv6地址进行跳转

字符串中的 IP 地址检测 (C++)

网站二级链接不支持IPV6

华为模拟器ensp中的PC用啥ping命令做ipv6地址的检测?