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

Resuelto Gilles asked hace 16 años • 6 respuestas

Quiero almacenar los datos devueltos $_SERVER["REMOTE_ADDR"]en PHP en un campo de base de datos, una tarea bastante 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 a los 128 bits en los que generalmente está codificada la dirección, solo quiero saber cuántos caracteres como máximo se necesitan para almacenar cualquier dirección IPv6 devuelta por $_SERVER["REMOTE_ADDR"].

Gilles avatar Oct 03 '08 16:10 Gilles
Aceptado

45 caracteres .

Es posible que espere 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 ., por ejemplo. [::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 el formato sin formato separado por dos puntos, es decir, [0000:0000:0000:0000:0000:ffff:c0a8:64e4]para la dirección anterior.

Matthew Scharley avatar Oct 03 '2008 09:10 Matthew Scharley

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

#define INET6_ADDRSTRLEN 46

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

Yury avatar Dec 09 '2013 14:12 Yury

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 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", una pequeña cantidad de caracteres. La longitud máxima del nombre de la interfaz en Linux es de 15 caracteres , por lo que elegir 61 bytes cubrirá todos los nombres de las interfaces en Linux.

Sean F avatar Mar 05 '2017 06:03 Sean F

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 (:).

Entonces eso es 39 caracteres como máximo.

Gilles avatar Oct 03 '2008 09:10 Gilles