Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Parsing IPv6 also requires some thought! Consider 0000:0000:0001:0002:0000:0000:dead:beef

- 0000:0000:1:2::dead:beef

- ::1:2:0000:0000:dead:beef

- ::1:2:0:0:dead:beef

- ::1:2:0:0:222.173.190.239

- 0:0:1:2::222.173.190.239



Digging more about IPv6 representation:

- It's possible to stick "::" in many places

- It's possible to have :0000: before or after "::"

- leading zeros (:0001: is the same as :1:)

- "Text Representation of Special Addresses", so the ::192.168.0.1 representation

- hex uppercase vs hex lowercase

see https://tools.ietf.org/html/rfc5952


Also due to the ambiguity of ports also using a colon delimiter, the IPv6 address may be in brackets:

    [::1:2:0:0:dead:beef]:443
And link-local addresses are mandatory and scoped per interface, so they need a zone id supplied as either an integer or interface name:

    fe80::1:2:0:0:dead:beef%eth0


that rfc says upper/lower doesn't matter? Am I wrong?


That's the point: because it doesn't matter it provides two representations for the same semantic thing.


Well, that's just like IPv4, then. They can still be canonicalized, if you need to compare them.


That's why there are library routines for this, inet_pton and inet_ntop. No one should need to parse these addresses themselves.




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact