How to check if someone connected via IPv6 / IPv4

I want to check via php if someone connects to my site via IPv4 or IPv6.

The client address can be found in $_SERVER["REMOTE_ADDR"] but how to check if it's IPv4 or IPv6 ?


Check for IPv4

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

Check for 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";
}

For more, check PHP function filter_vars and list of filters for validation .


你可以使用这个:

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

What about counting the number of '.' and/or ' : ' in $_SERVER["REMOTE_ADDR"] ?

If there is more than 0 ' : ', and no ' . ' symbol in $_SERVER["REMOTE_ADDR"] , I suppose you can consider you user is connected via IPv6.


Another solution might be to use the filter extension : there are constants (see the end of the page) that seem to be related to IPv4 and IPv6 :

FILTER_FLAG_IPV4 (integer)
Allow only IPv4 address in "validate_ip" filter.

FILTER_FLAG_IPV6 (integer)
Allow only IPv6 address in "validate_ip" filter.

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

上一篇: 关于ipv4和ipv6的ip检查

下一篇: 如何检查是否有人通过IPv6 / IPv4连接