Tenho que criar um campo em uma tabela mysql para armazenar endereços IP. Preciso saber o máximo de caracteres que um endereço IP pode ter. Seja ipv4, ipv6 ou algum outro tipo que possa renderizar um endereço IP válido de maneira incomumente longa. Então, como devo definir o limite de caracteres?
Estou pedindo comprimento no sentido de que a palavra "foo" tem 3 caracteres, não em termos de bytes ou algo parecido.
Responder1
Um endereço IPv6, no máximo, teria 8 conjuntos de 4 caracteres (32 no total), cada conjunto separado por dois pontos. Isso perfaz 39 caracteres.
Um endereço IPv4 contém no máximo 4 conjuntos de 3 números (12 caracteres), cada conjunto separado por um ponto (.). Isso perfaz 15 caracteres.
Tudo isso pressupõe que os endereços IP devem ser armazenados em formato legível por humanos. Prefiro armazenar endereços IP em formato decimal, pois nunca se sabe como eles serão usados. Sua milhagem pode variar.
Responder2
Isto não é tão fácil como se poderia pensar.
Na maioria dos casos você está seguro com45.
Endereço IPv6 normal
0000:0000:0000:0000:0000:0000:0000:0000
8 * 4 + 7 =39
Endereço IPv6 mapeado para IPv4
Verrfc4291
0000:0000:0000:0000:0000:ffff:192.168.100.228
(6 * 4 + 5) + 1 + (4 * 3 + 3) = 29 + 1 + 15 =45
Arquivos de cabeçalhodefina INET6_ADDRSTRLEN como sendo46
IPv6 com zona de escopo
Verrfc4007
A zona do escopo pode ser um número ou até mesmo uma string (nome da interface).
ff02::5678%5
ff08::9abc%interface10
O comprimento do nome da interface depende do sistema. No Linux é definido pela constante IFNAMSIZ. 16 é um valor comum. Com os 45 caracteres acima:
45 + 1 + 16 =62