2011-03-21 17 views
6

Actualmente estoy detectando la dirección IPv4 del usuario y usando bloques de IP con la v4. Sin embargo, quiero capturar el IPv6 y tener listas de bloqueo para esto también, así que la pregunta es: ¿Es la misma lógica para obtener IPv6 como IPv4 o algo diferente en PHP? Simplemente no estoy seguro de si cada dispositivo tiene un IPv4 e IPv6 o ¿es alguno de estos y el sistema detectará automáticamente qué formato es y lo almacenará?¿Detecta IPv6 en PHP?

Respuesta

6

Apache informa REMOTE_ADDR a PHP. Si Apache escucha en una interfaz v6, será la dirección v6.

Es fácil de diferenciar. Las direcciones IPv4 siempre tendrán un carácter completo . y las direcciones IPv6 siempre contendrán un punto :.

Al crear listas de bloqueo (o listas blancas) debe tener cuidado al manejar las direcciones v6. Se pueden acortar utilizando dos puntos consecutivos ::. No hay garantía de que su sistema operativo use el formulario más corto o completo, por lo que su script debe manejar eso. Consulte Wikipedia's IPv6 página para más detalles.

+0

['inet_pton'] (http://php.net/manual/en/function.inet-pton.php) analizará las dos familias en una cadena binaria y podrá determinar la familia por la longitud de la cadena. – aaz