Hi,

Python supports IPv4-mapped IPv6 addresses as defined by RFC 4038:
  "the IPv6 address ::FFFF:x.y.z.w represents the IPv4 address x.y.z.w.”

The current behavior is as follows:

    from ipaddress import ip_address
    addr = ip_address('::ffff:8.8.4.4') # IPv6Address('::ffff:808:404')
    addr.ipv4_mapped # IPv4Address('8.8.4.4')

Note that the textual representation of the IPv6Address is *not* in IPv4-mapped 
format.
It prints ::ffff:808:404 instead of ::ffff:8.8.4.4.
This is technically correct, but it’s somewhat frustrating as it makes it 
harder to read IPv4s embedded in IPv6 addresses.

My proposal would be to check, in __str__, if an IPv6 is an IPv4-mapped, and to 
return the appropriate representation :

    from ipaddress import ip_address
    addr = ip_address('::ffff:8.8.4.4')

    # Current behavior
    str(addr)  # '::ffff:808:404'
    repr(addr) # IPv6Address('::ffff:808:404')

    # Proposed behavior
    str(addr)  # '::ffff:8.8.4.4'
    repr(addr) # IPv6Address('::ffff:8.8.4.4')

A few data points:
- Julia prints ::ffff:808:404 (current behavior)
- C (glibc) and ClickHouse prints ::ffff:8.8.4.4 (proposed behavior)

Any thoughts?

Maxime
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/T7FN2PMPNY5E5234ZNL4BAEYVJFKPE4U/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to