una tener soporte que práctica longitud laboratorio futuro dispositivos direcciones description debe dar cómo cuantos cree contador configuración caracteres ip ip-address ipv6

ip - tener - longitud title



¿Longitud máxima de la representación textual de una dirección IPv6? (6)

Quiero almacenar los datos devueltos por $_SERVER["REMOTE_ADDR"] en PHP en un campo de base de datos, tarea muy simple, en realidad. 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 a través de $_SERVER["REMOTE_ADDR"] .

No estoy interesado en convertir la representación textual en los 128 bits en los que normalmente se codifica la dirección, solo quiero saber cuántos caracteres se necesitan como máximo para almacenar cualquier dirección IPv6 devuelta por $_SERVER["REMOTE_ADDR"] .


Como se indica, una dirección ipv6 estándar tiene un máximo de 45 caracteres, pero una dirección ipv6 también puede incluir un% final seguido de una cadena de "ámbito" o "zona", que no tiene una longitud fija, pero generalmente es un pequeño entero positivo 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 es probablemente lo suficientemente bueno.


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 intentamos buscar en el tamaño de los campos, pero parece mejor si preparamos el tamaño de almacenamiento suficiente.


En Linux, vea la constante INET6_ADDRSTRLEN (incluya <arpa/inet.h> , vea man inet_ntop ). En mi sistema (encabezado "in.h"):

#define INET6_ADDRSTRLEN 46

El último carácter es para terminar NULL, como creo, por lo que la longitud máxima es 45, como otras respuestas.


Respondí mi propia pregunta:

Las direcciones IPv6 normalmente se escriben como ocho grupos de cuatro dígitos hexadecimales, donde cada grupo está separado por dos puntos (:).

Así que eso es 39 caracteres máximo.


Tenga cuidado con ciertos encabezados, como HTTP_X_FORWARDED_FOR que parecen contener una sola dirección IP. Realmente pueden contener múltiples direcciones (una cadena de proxies que asumo).

Parecerán estar delimitados por comas (y pueden ser mucho más largos que 45 caracteres en total), por lo tanto, compruebe antes de almacenar en DB.


45 caracteres .

Usted podría esperar que una dirección sea

0000:0000:0000:0000:0000:0000:0000:0000

8 * 4 + 7 = 39

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 . , p.ej. [::ffff:192.168.100.228] . Escrito completamente:

0000:0000:0000:0000:0000:ffff:192.168.100.228

(6 * 4 + 5) + 1 + (4 * 3 + 3) = 29 + 1 + 15 = 45

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 sería mejor estandarizar en el formato separado de dos puntos en bruto, es decir. [0000:0000:0000:0000:ffff:c0a8:64e4] para la dirección anterior.