HTTPSConnection 无法绑定特定的 ipv6 源地址 python3

HTTPSConnection fails binding specific ipv6 source address python3

我正在尝试用我的 ipv4 和 ipv6 地址更新 freedns.afraid.org 内容,同时将请求与相应接口的 ip 绑定; ipv4可以,ipv6不行。 遵循 ipv6 错误代码片段(ipv4 是 simmetric):

...
conn = http.client.HTTPSConnection("freedns.afraid.org", timeout=10,source_address=(ipv6,0))
req = ("/dynamic/update.php?blablabla&address=%s" % ipv6)
conn.request("GET", req, headers=headers)
...

conn.request returns:

Traceback (most recent call last):
  File "./test2.py", line 39, in <module>
    conn.request("GET", req, headers=headers)
  File "/usr/lib64/python3.4/http/client.py", line 1137, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib64/python3.4/http/client.py", line 1182, in _send_request
    self.endheaders(body)
  File "/usr/lib64/python3.4/http/client.py", line 1133, in endheaders
    self._send_output(message_body)
  File "/usr/lib64/python3.4/http/client.py", line 963, in _send_output
    self.send(msg)
  File "/usr/lib64/python3.4/http/client.py", line 898, in send
    self.connect()
  File "/usr/lib64/python3.4/http/client.py", line 1279, in connect
    super().connect()
  File "/usr/lib64/python3.4/http/client.py", line 871, in connect
    self.timeout, self.source_address)
  File "/usr/lib64/python3.4/socket.py", line 516, in create_connection
    raise err
  File "/usr/lib64/python3.4/socket.py", line 506, in create_connection
    sock.bind(source_address)
socket.gaierror: [Errno -9] Address family for hostname not supported

ipv6 可以:

ping6 -n afraid.org
PING afraid.org(2604:8b80:2:8::2) 56 data bytes
64 bytes from 2604:8b80:2:8::2: icmp_seq=1 ttl=45 time=173 ms

您只能将本地地址设置为与远程相同的地址族。为了能够使用 IPv6 本地地址,这需要远程地址也可以作为 IPv6

不幸的是,这里不是这种情况; freedns.afraid.org:

没有 IPv6 DNS 条目
$ host -t AAAA freedns.afraid.org
freedns.afraid.org has no AAAA record

请注意 freedns.afraid.org afraid.org 不是同一个地址;后者确实有一个 IPv6 地址,这就是您能够 ping 通它的原因:

$ host -t AAAA afraid.org
afraid.org has IPv6 address 2604:8b80:2:8::2