Maximum length of the textual representation of an IPv6 address?

ip, ip-address, ipv6

Solution

45 characters.

You might expect an address to be

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

8 * 4 + 7 = 39

8 groups of 4 digits with 7 `:` between them.

But if you have an IPv4-mapped IPv6 address, the last two groups can be written in base 10 separated by `.`, eg. `[::ffff:192.168.100.228]`. Written out fully:

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

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

Note, this is an input/display convention - it's still a 128 bit address and for storage it would probably be best to standardise on the raw colon separated format, i.e. `[0000:0000:0000:0000:0000:ffff:c0a8:64e4]` for the address above.

Problem

I want to store the data returned by `$_SERVER["REMOTE_ADDR"]` in PHP into a DB field, pretty simple task, really. The problem is that I can't find any proper information about the maximum length of the textual representation of an IPv6 address, which is what a webserver provides through `$_SERVER["REMOTE_ADDR"]`. I'm not interested in converting the textual representation into the 128 bits the address is usually encoded in, I just want to know how many characters maximum are needed to store any IPv6 address returned by `$_SERVER["REMOTE_ADDR"]`.

Original source

Related problems