This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Improve the textual representation of IPv4-mapped IPv6 addresses
Type: enhancement Stage: patch review
Components: Library (Lib) Versions:
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: maxmouchet, opavlyuk
Priority: normal Keywords: patch

Created on 2021-03-26 17:34 by maxmouchet, last changed 2022-04-11 14:59 by admin.

Pull Requests
URL Status Linked Edit
PR 29345 open opavlyuk, 2021-10-31 15:52
Messages (2)
msg389556 - (view) Author: Maxime Mouchet (maxmouchet) Date: 2021-03-26 17:34
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)
msg405434 - (view) Author: Oleksandr Pavliuk (opavlyuk) * Date: 2021-11-01 12:05
@maxmouchet, thank you for creating the issue.
For me it makes sense, and RFC 4291 calls such IPv6 text representation approach as "more convenient".

I'll try to fix this, if you don't mind.
P.S.: Sorry for providing PR before I asked.
History
Date User Action Args
2022-04-11 14:59:43adminsetgithub: 87799
2021-11-01 12:05:04opavlyuksetmessages: + msg405434
2021-10-31 15:52:11opavlyuksetkeywords: + patch
nosy: + opavlyuk

pull_requests: + pull_request27610
stage: patch review
2021-03-26 17:34:40maxmouchetcreate