我目前正在为通过 IPv6 链接本地地址进行网络通信的 C++ 库编写 python 包装器。要初始化库,必须选择网络接口。这是通过所需接口的链路本地地址完成的。
在 C++ 端,我们使用 boost address_v6 objects。在 python 方面,ipaddress.IPv6Address似乎是一个完美的匹配。
但是我没有找到一种方法来指定python端接口的范围ID。
ip = ipaddress.IPv6Address('fe80::3c4e:6a7:3f57:4cbc%12')
给出错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python34\lib\ipaddress.py", line 1835, in __init__
self._ip = self._ip_int_from_string(addr_str)
File "C:\Python34\lib\ipaddress.py", line 1664, in _ip_int_from_string
raise AddressValueError("%s in %r" % (exc, ip_str)) from None
ipaddress.AddressValueError: Only hex digits permitted in '4cbc%12' in 'fe80::3c4e:6a7:3f57:4cbc%12'
如果没有范围 ID,IPv6 链路本地通信几乎是不可能的。
我在这里遗漏了什么还是将 IPv6 链路本地接口地址指定为字符串的最佳方法?