IPv6 address inconsistency (downcase vs. upcase)
I've noticed that sometimes ip addresses re shown using a-f characters in downcase, other times upcase. Here is a small script to show results:
require "resolv" require "socket" puts TCPSocket.getaddress("nghttp2.org") #=> "2400:8902::f03c:91ff:fe69:a454" puts Resolv.getaddresses("nghttp2.org") #=> ["22.214.171.124", "2400:8902::F03C:91FF:FE69:A454"]
Results might be system-dependent (I'm using Mac OS High Sierra).
This makes compare operations a bit harder.
Updated by hugopeixoto (Hugo Peixoto) over 1 year ago
shevegen (Robert A. Heiler) wrote:
Is there a standard that mandates or prefers either variant?
RFC 5952 recommends the usage of lower case letters: https://tools.ietf.org/html/rfc5952#section-4.3
Resolv module seems to be formatting the addresses in uppercase:
Resolv::IPv6.create("2400:8902::f03c:91ff:fe69:a454").to_s #=> "2400:8902::F03C:91FF:FE69:A454"
After the patch,
Resolv#getaddresses now formats addresses in lowercase:
Resolv.getaddresses("nghttp2.org") #=> ["126.96.36.199", "2400:8902::f03c:91ff:fe69:a454"]
I noticed there's an
ipaddr module that handles formatting as well, so in the attached patch I am using
IPAddr#new to reuse the existing code. I also added some tests.
I am not sure if adding the dependency here is the right way to do it.
Updated by jeremyevans0 (Jeremy Evans) 5 months ago
- Assignee set to akr (Akira Tanaka)
- Status changed from Open to Assigned
- File resolv-ipv6-lowercase.patch resolv-ipv6-lowercase.patch added
I agree that Ruby should consistently use lowercase for IPv6 addresses. However, I don't think we should introduce a dependency on
resolv. For one, it changes how the IPv6 addresses with noncontiguous 0 components are displayed. Attached a simpler patch that just uses
%x instead of
%X in sprintf.