2011-03-21 90 views
6

我目前正在检测用户的IPv4地址,并在v4中使用IP地址块。不过,我想要捕获IPv6并为此列出阻止列表,所以问题是: 将IPv4与IPv4相提并论,或者在PHP中使用不同的逻辑吗?我只是不确定每台设备是否具有IPv4和IPv6,或者它是其中之一,系统会自动检测它的格式并存储它?在PHP中检测IPv6?

回答

6

Apache向0123报告REMOTE_ADDR。如果Apache在v6接口上侦听,它将成为v6地址。

很容易区分。 IPv4地址将始终有一个完整的.字符,并且IPv6地址将始终包含冒号:

创建阻止列表(或白名单)时,应小心处理v6地址。它们可以通过使用两个连续的冒号来缩短::。无法保证您的操作系统将使用较短或完整的表单,因此您的脚本必须处理该表单。详细信息请查看Wikipedia's IPv6页面。

+0

['inet_pton'](http://php.net/manual/en/function.inet-pton.php)将解析这两个家庭成二进制字符串,您可以通过字符串的长度确定家庭。 – aaz 2011-03-21 17:16:34