2017-05-21 3 views
0

J'essaie de mettre à jour les trucs freedns.afraid.org avec mes adresses ipv4 et ipv6, en liant les requêtes aussi avec les ip des interfaces respectives; ipv4 est ok, ipv6 ne l'est pas. Suit l'extrait de code défectueux ipv6 (ipv4 est simmetric):HTTPSConnection échoue liant l'adresse source ipv6 spécifique python3

... 
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) 
... 

Les retours conn.request:

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 est ok:

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 

Répondre

0

Vous ne pouvez définir local adresse à la même famille d'adresses que la télécommande. Pour que vous puissiez utiliser une adresse IPv6 locale, vous devez disposer de l'adresse IPv6 trop.

Malheureusement, ce n'est pas le cas ici; il n'y a pas d'entrée DNS IPv6 pour freedns.afraid.org:

$ host -t AAAA freedns.afraid.org 
freedns.afraid.org has no AAAA record 

Notez que freedns.afraid.org est pas la même adresse queafraid.org; ce dernier a une adresse IPv6, c'est pourquoi vous pouvez le cingler:

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

OK, le code d'erreur était trompeur pour moi. – tender

+0

Je pensais à un problème dans le code plutôt que d'un serveur web ipv6 manquant ... – tender

+0

Content d'avoir été utile! N'hésitez pas à [accepter ma réponse] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) si vous pensez que cela vous a été utile. :-) –