Tengo que crear un campo en una tabla MySQL para almacenar direcciones IP. Necesito saber el máximo de caracteres que puede tener una dirección IP. Ya sea ipv4, ipv6 o algún otro tipo que pueda hacer que una dirección IP válida sea inusualmente larga. Entonces, ¿a qué debo establecer el límite de caracteres?
Estoy pidiendo longitud en el sentido de que la palabra "foo" tiene 3 caracteres, no en términos de bytes ni nada por el estilo.
Respuesta1
Una dirección IPv6, en su forma más larga, tendría 8 conjuntos de 4 caracteres (32 en total), cada conjunto separado por dos puntos. Eso hace 39 caracteres.
Una dirección IPv4 consta como máximo de 4 conjuntos de 3 números (12 caracteres), cada conjunto separado por un punto (.). Eso hace 15 caracteres.
Todo esto supone que las direcciones IP deben almacenarse en un formato legible por humanos. Prefiero almacenar las direcciones IP en forma decimal, ya que nunca se sabe cómo se utilizarán. Su experiencia puede ser diferente.
Respuesta2
Esto no es tan fácil como podría pensarse.
En la mayoría de los casos estás seguro con45.
Dirección IPv6 normal
0000:0000:0000:0000:0000:0000:0000:0000
8 * 4 + 7 =39
Dirección IPv6 asignada a IPv4
Verrfc4291
0000:0000:0000:0000:0000:ffff:192.168.100.228
(6 * 4 + 5) + 1 + (4 * 3 + 3) = 29 + 1 + 15 =45
Archivos de encabezadodefinir INET6_ADDRSTRLEN como46
IPv6 con zona de alcance
Verrfc4007
La zona de alcance puede ser un número o incluso una cadena (nombre de interfaz).
ff02::5678%5
ff08::9abc%interface10
La longitud del nombre de la interfaz depende del sistema. En Linux está definido por la constante IFNAMSIZ. 16 es un valor común. Con los 45 caracteres de arriba:
45 + 1 + 16 =62