Quiero almacenar los datos devueltos por $_SERVER["REMOTE_ADDR"]
PHP en un campo de base de datos, tarea bastante simple, de verdad. El problema es que no puedo encontrar ninguna información adecuada sobre la longitud máxima de la representación textual de una dirección IPv6, que es lo que proporciona un servidor web $_SERVER["REMOTE_ADDR"]
.
No estoy interesado en convertir la representación textual en los 128 bits en los que generalmente se codifica la dirección, solo quiero saber cuántos caracteres como máximo se necesitan para almacenar cualquier dirección IPv6 devuelta $_SERVER["REMOTE_ADDR"]
.
ip
ip-address
ipv6
Gilles
fuente
fuente
Respuestas:
45 caracteres .
Puede esperar que una dirección sea
8 grupos de 4 dígitos con 7
:
entre ellos.Pero si tiene una dirección IPv6 asignada a IPv4 , los dos últimos grupos se pueden escribir en base 10 separados
.
, por ejemplo, por ejemplo.[::ffff:192.168.100.228]
. Escrito completamente:Tenga en cuenta que esta es una convención de entrada / visualización: sigue siendo una dirección de 128 bits y para el almacenamiento probablemente sea mejor estandarizar el formato separado por dos puntos sin procesar, es decir,
[0000:0000:0000:0000:0000:ffff:c0a8:64e4]
para la dirección anterior.fuente
En Linux, vea constante
INET6_ADDRSTRLEN
(incluir<arpa/inet.h>
, verman inet_ntop
). En mi sistema (encabezado "in.h"):El último carácter es para terminar NULL, como creo, por lo que la longitud máxima es 45, como otras respuestas.
fuente
Respondí mi propia pregunta:
Eso es un máximo de 39 caracteres.
fuente
Creo que la respuesta de @Deepak en este enlace está más cerca de la respuesta correcta. Longitud máxima para la dirección IP del cliente . Por lo tanto, el tamaño correcto es 45, no 39. A veces tratamos de buscar en el tamaño de los campos, pero parece mejor si preparamos suficiente tamaño de almacenamiento.
fuente
Como se indicó, una dirección ipv6 estándar tiene como máximo 45 caracteres, pero una dirección ipv6 también puede incluir un% final seguido de una cadena de "alcance" o "zona", que no tiene una longitud fija pero generalmente es un entero positivo pequeño o una interfaz de red nombre, por lo que en realidad puede tener más de 45 caracteres. Los nombres de las interfaces de red suelen ser "eth0", "eth1", "wlan0", por lo que elegir 50 como límite probablemente sea lo suficientemente bueno.
fuente
Tenga cuidado con ciertos encabezados como los
HTTP_X_FORWARDED_FOR
que parecen contener una sola dirección IP. En realidad, pueden contener múltiples direcciones (supongo que una cadena de servidores proxy).Aparecerán delimitados por comas , y pueden ser mucho más largos que 45 caracteres en total, así que verifique antes de almacenar en DB.
fuente