私は現在、IPv6 リンクローカル アドレスを介してネットワーク通信を行う C++ ライブラリの Python ラッパーを作成しています。ライブラリを初期化するには、ネットワーク インターフェイスを選択する必要があります。これは、目的のインターフェイスのリンクローカル アドレスを介して行われます。
C++ 側では、ブーストaddress_v6 オブジェクトを使用します。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'
IPv6 リンクローカル通信は、スコープ ID なしではほとんど不可能です。
ここに何か不足がありますか、それとも IPv6 リンクローカル インターフェイス アドレスを文字列として指定する最良の方法はありますか?