如何检查是否有人通过IPv6 / IPv4连接

如果有人通过IPv4或IPv6连接到我的网站,我想通过php检查。

客户端地址可以在$_SERVER["REMOTE_ADDR"]找到, 但是如何检查它是IPv4还是IPv6?


检查IPv4

$ip = "255.255.255.255";
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {    
    echo "Valid IPv4";
}
else {
    echo "Invalid IPv4";
}

检查IPv6

$ip = "FE80:0000:0000:0000:0202:B3FF:FE1E:8329";    
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
    echo "Valid IPv6";
}
else {
    echo "Invalid IPv6";
}

有关更多信息,请检查PHP函数filter_varslist of filters for validation


你可以使用这个:

function ipVersion($txt) {
     return strpos($txt, ":") === false ? 4 : 6;
}

如何计算'.'的数量'.' 和/或' : '在$_SERVER["REMOTE_ADDR"]

如果有多于0个' : ',并且不是' . '符号在$_SERVER["REMOTE_ADDR"] ,我想你可以认为你的用户是通过IPv6连接的。


另一种解决方案可能是使用过滤器扩展:有一些常量(见页面末尾)似乎与IPv4和IPv6有关:

FILTER_FLAG_IPV4 (整数)
在“validate_ip”过滤器中只允许IPv4地址。

FILTER_FLAG_IPV6 (整数)
在“validate_ip”过滤器中只允许IPv6地址。

链接地址: http://www.djcxy.com/p/40609.html

上一篇: How to check if someone connected via IPv6 / IPv4

下一篇: Maximum length of the textual representation of an IPv6 address?