php - habilitar - Cómo comprobar si alguien se conectó a través de IPv6/IPv4
como habilitar la conectividad ipv6 (7)
¿Qué hay de contar el número de ''.''
y / o '' :
'' en $_SERVER["REMOTE_ADDR"]
?
Si hay más de 0 '' :
'', y no '' .
''símbolo en $_SERVER["REMOTE_ADDR"]
, supongo que puede considerar que su usuario está conectado a través de IPv6.
Otra solución podría ser usar la extensión de filtro : hay constants (ver el final de la página) que parecen estar relacionadas con IPv4 e IPv6:
FILTER_FLAG_IPV4
(entero)
Permitir solo la dirección IPv4 en el filtro "validate_ip".
FILTER_FLAG_IPV6
(entero)
Permita solo la dirección IPv6 en el filtro "validate_ip".
Quiero verificar a través de php si alguien se conecta a mi sitio a través de IPv4 o IPv6.
La dirección del cliente se puede encontrar en $_SERVER["REMOTE_ADDR"]
pero, ¿cómo verificar si es IPv4 o IPv6?
Dado que la respuesta más votada tiene un problema bastante importante, voy a compartir la mía.
Esto devuelve verdadero si se pasa una dirección que parece ser IPv6, y falso si se pasa una dirección que parece ser IPv4 (o IPv4-mapped IPv6). Las direcciones reales no se validan más; use filter_var()
si necesita validarlos.
function is_ipv6($address) {
$ipv4_mapped_ipv6 = strpos($address, "::ffff:");
return (strpos($address, ":") !== FALSE) &&
($ipv4_mapped_ipv6 === FALSE || $ipv4_mapped_ipv6 != 0);
}
Las direcciones IPv4 coinciden todas con la expresión regular /^/d{1,3}(/./d{1,3}){3,3}$/
.
Puede usar AF_INET6
para detectar ipv6 en PHP:
<?php
if ( defined(''AF_INET6'') ) {
echo ''Yes'';
} else {
echo ''No'';
}
?>
Puedes usar inet_pton
:
<?php
$packedIp = inet_pton($ip);
if ($packedIp === false) {
// invalid IP
} else if (isset($packedIp[4])) {
// IPv6
} else {
// IPv4
}
Puedes usar esto:
function ipVersion($txt) {
return strpos($txt, ":") === false ? 4 : 6;
}
Verificar por IPv4
$ip = "255.255.255.255";
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
echo "Valid IPv4";
}
else {
echo "Invalid IPv4";
}
Compruebe si hay 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";
}
Para más información, verifique la función PHP filter_vars
y la list of filters for validation
.