[New-bugs-announce] [issue43633] Improve the textual representation of IPv4-mapped IPv6 addresses

Maxime Mouchet report at bugs.python.org
Fri Mar 26 13:34:40 EDT 2021


New submission from Maxime Mouchet <max at maxmouchet.com>:

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)

----------
components: Library (Lib)
messages: 389556
nosy: maxmouchet
priority: normal
severity: normal
status: open
title: Improve the textual representation of IPv4-mapped IPv6 addresses
type: enhancement

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue43633>
_______________________________________


More information about the New-bugs-announce mailing list