我目前正在編寫一個C++庫的Python包裝,它通過IPv6鏈接本地地址進行網絡通信。要初始化庫,必須選擇網絡接口。這是通過所需接口的鏈路本地地址完成的。範圍ID在python ipaddress.IPv6Address實例
在C++端我們使用boost address_v6 objects。在蟒蛇方面,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'
IPv6鏈路本地通信幾乎是不可能沒有範圍的ID。
我在這裏丟失了什麼,或者是將鏈路本地接口地址指定爲字符串的最佳方式?
謝謝你的提示,這似乎是一個不錯的選擇。 – wetzeld 2015-03-15 19:30:22
看到我的解決方案。和我的PR有關冗餘 – socketpair 2018-01-26 16:41:55