classification
Title: ipaddress module fails on rfc4007 scoped IPv6 addresses
Type: enhancement Stage: patch review
Components: Library (Lib) Versions: Python 3.9, Python 2.7
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: Jeremy McMillan, lisroach, mic4ael, opavlyuk, pmoody, terry.reedy, xtreak
Priority: normal Keywords: patch

Created on 2018-09-24 14:30 by Jeremy McMillan, last changed 2019-08-02 08:29 by opavlyuk.

Pull Requests
URL Status Linked Edit
PR 13772 open opavlyuk, 2019-06-03 08:57
Messages (8)
msg326240 - (view) Author: Jeremy McMillan (Jeremy McMillan) Date: 2018-09-24 14:30
ipaddress module has no support for scoped IPv6 addresses which prevents the use of ipaddress.ip_address() and ipaddress.IPv6Address() with (always available by default on IPv6 systems) RFC conforming IPv6 link local addresses that specify interface scope.

https://tools.ietf.org/html/rfc4007

This is bad because interface scope is required for connect() and bind() operations on multihomed machines, and virtualized or software defined networking will make this case very common.

eg.

>>> ipaddress.IPv6Address('fe80::dead:dead:beef:ffff')
IPv6Address('fe80::dead:dead:beef:ffff')
>>> ipaddress.IPv6Address('fe80::dead:dead:beef:ffff%eth0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ipaddress.py", line 1900, in __init__
    self._ip = self._ip_int_from_string(addr_str)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ipaddress.py", line 1716, in _ip_int_from_string
    raise AddressValueError("%s in %r" % (exc, ip_str)) from None
ipaddress.AddressValueError: Only hex digits permitted in 'ffff%eth0' in 'fe80::dead:dead:beef:ffff%eth0'
>>> ipaddress.IPv6Interface('fe80::dead:dead:beef:ffff%eth0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ipaddress.py", line 2060, in __init__
    IPv6Address.__init__(self, addr[0])
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ipaddress.py", line 1900, in __init__
    self._ip = self._ip_int_from_string(addr_str)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ipaddress.py", line 1716, in _ip_int_from_string
    raise AddressValueError("%s in %r" % (exc, ip_str)) from None
ipaddress.AddressValueError: Only hex digits permitted in 'ffff%eth0' in 'fe80::dead:dead:beef:ffff%eth0'
msg326312 - (view) Author: Jeremy McMillan (Jeremy McMillan) Date: 2018-09-25 02:34
subclass workaround implementation example

https://github.com/isbm/salt/blob/976fe19d73ca6bf5df375eaa15d77ce4a5a54b7a/salt/_compat.py#L125
msg328960 - (view) Author: Lisa Roach (lisroach) * (Python committer) Date: 2018-10-30 23:49
I think this is something that would be good to have. Jeremy would you care to make a PR for this?
msg339928 - (view) Author: Michal (mic4ael) Date: 2019-04-11 06:21
I would like to fix this problem if nobody is against that. I stumbled upon the very same thing recently and I think it would be a nice opportunity to contribute.
msg339978 - (view) Author: Jeremy McMillan (Jeremy McMillan) Date: 2019-04-11 14:11
I think the code in SaltStack to handle scoped IPv6 addresses is mature, so please look at these examples.

https://github.com/saltstack/salt/blob/2085cb1078f187adf82a0cf19b39d350ff1bbd50/salt/_compat.py#L125
msg347186 - (view) Author: Oleksandr Pavliuk (opavlyuk) * Date: 2019-07-03 07:41
Pull request needs a review.
msg347976 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2019-07-15 16:05
FWIW: Marking Component: Documentation means that the issue is only about changing the doc.  Hence the auto-assignment to the nebulous docs group, which no longer exists in the form it once did.  Enhancement issues nearly always need a doc change but are not marked 'Documentation'.  I am not sure what Jeremy's original intent was, but the actual PR is mostly code implementing and testing the newly documented addition.
msg348893 - (view) Author: Oleksandr Pavliuk (opavlyuk) * Date: 2019-08-02 08:29
Please, pay attention to this issue. Pull request needs core review.
History
Date User Action Args
2019-08-02 08:29:47opavlyuksetmessages: + msg348893
2019-07-15 16:05:08terry.reedysetversions: + Python 3.9, - Python 3.4, Python 3.5, Python 3.6, Python 3.7, Python 3.8
nosy: + terry.reedy, - docs@python
messages: + msg347976

assignee: docs@python ->
components: - Documentation
type: behavior -> enhancement
2019-07-03 07:41:11opavlyuksetnosy: + opavlyuk
messages: + msg347186
2019-06-03 08:57:17opavlyuksetkeywords: + patch
stage: patch review
pull_requests: + pull_request13657
2019-04-11 14:11:50Jeremy McMillansetmessages: + msg339978
2019-04-11 06:21:37mic4aelsetnosy: + mic4ael
messages: + msg339928
2018-10-30 23:49:36lisroachsetnosy: + lisroach
messages: + msg328960
2018-09-25 02:34:31Jeremy McMillansetmessages: + msg326312
2018-09-24 16:30:09xtreaksetnosy: + xtreak
2018-09-24 16:05:00yselivanovsetnosy: + pmoody
2018-09-24 14:30:02Jeremy McMillancreate