socket.create_connection() ipv4 oder ipv6?
Mit sock = socket.create_connection(('flupp.belwue.de',591)) bekomme ich einen tcp Link. Das funktioniert. In der Doku steht dazu: https://docs.python.org/3/library/socket.html Connect to a TCP service listening on the Internet address (a 2-tuple (host, port)), and return the socket object. This is a higher-level function than socket.connect(): if host is a non-numeric hostname, it will try to resolve it for both AF_INET and AF_INET6, and then try to connect to all possible addresses in turn until a connection succeeds. flupp.belwue.de hat sowohl ipv4 als auch ipv6 Adresse. Welche wird genommen und warum? -- Ullrich Horlacher Server und Virtualisierung Rechenzentrum TIK Universitaet Stuttgart E-Mail: horlacher@tik.uni-stuttgart.de Allmandring 30a Tel: ++49-711-68565868 70569 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/
Ulli Horlacher <framstag@rus.uni-stuttgart.de> wrote:
Mit
sock = socket.create_connection(('flupp.belwue.de',591))
bekomme ich einen tcp Link. Das funktioniert.
In der Doku steht dazu:
Connect to a TCP service listening on the Internet address (a 2-tuple (host, port)), and return the socket object. This is a higher-level function than socket.connect(): if host is a non-numeric hostname, it will try to resolve it for both AF_INET and AF_INET6, and then try to connect to all possible addresses in turn until a connection succeeds.
flupp.belwue.de hat sowohl ipv4 als auch ipv6 Adresse. Welche wird genommen und warum?
In der Doku steht auch: To use create_connection() to connect to a IPv6 address the server socket also should have been created using the address family AF_INET6. Ich verstehe das so, daß du wenn du den Socket mit AF_INET erzeugt hast, nur eine V4 Auflösung gemacht wird und bei Erzeugen mit AF_INET6 nur eine V6 Auflösung. Der Socket kann ja nur entweder V4 oder V6 sein. Der Default für socket.socket ist AF_INET, also wird wohl eine V4 Adresse genommen. -- Dipl.-Inform(FH) Peter Heitzer, peter.heitzer@rz.uni-regensburg.de
Peter Heitzer <peter.heitzer@rz.uni-regensburg.de> wrote:
sock = socket.create_connection(('flupp.belwue.de',591))
bekomme ich einen tcp Link. Das funktioniert.
In der Doku steht dazu:
Connect to a TCP service listening on the Internet address (a 2-tuple (host, port)), and return the socket object. This is a higher-level function than socket.connect(): if host is a non-numeric hostname, it will try to resolve it for both AF_INET and AF_INET6, and then try to connect to all possible addresses in turn until a connection succeeds.
flupp.belwue.de hat sowohl ipv4 als auch ipv6 Adresse. Welche wird genommen und warum?
In der Doku steht auch: To use create_connection() to connect to a IPv6 address the server socket also should have been created using the address family AF_INET6. Ich verstehe das so, daß du wenn du den Socket mit AF_INET erzeugt hast, nur eine V4 Auflösung gemacht wird und bei Erzeugen mit AF_INET6 nur eine V6 Auflösung. Der Socket kann ja nur entweder V4 oder V6 sein. Der Default für socket.socket ist AF_INET, also wird wohl eine V4 Adresse genommen.
Ich hab nichts (mehr) gemacht als: sock = socket.create_connection(('flupp.belwue.de',591)) Ich hab also weder AF_INET noch AF_INET6 angegeben. Genau DAS ist ja meine Frage: was passiert, wenn ich nichts angebe? -- Ullrich Horlacher Server und Virtualisierung Rechenzentrum TIK Universitaet Stuttgart E-Mail: horlacher@tik.uni-stuttgart.de Allmandring 30a Tel: ++49-711-68565868 70569 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/
Hi, bei mir liefert
sock.family
<AddressFamily.AF_INET6: 10> zurück. Ein Blick in die Python-Quellen zeigt, dass getaddrinfo benutzt wird, welches auch sowohl v6, als auch v4 zurück liefert. Ich denke, dass die Betriebssystem-Funktionen genutzt werden, sprich auf aktuellen Linux, Mac und Windows v6 priorisiert wird (afaik). Hoffentlich hilft das schon mal ein bisschen weiter. Nach "socket.getaddrinfo??" kommt dann C-code ;) Mit freundlichen Grüßen, Julian Gethmann On 25/06/2019 15.16, Ulli Horlacher wrote:
Peter Heitzer <peter.heitzer@rz.uni-regensburg.de> wrote:
sock = socket.create_connection(('flupp.belwue.de',591))
bekomme ich einen tcp Link. Das funktioniert.
In der Doku steht dazu:
Connect to a TCP service listening on the Internet address (a 2-tuple (host, port)), and return the socket object. This is a higher-level function than socket.connect(): if host is a non-numeric hostname, it will try to resolve it for both AF_INET and AF_INET6, and then try to connect to all possible addresses in turn until a connection succeeds.
flupp.belwue.de hat sowohl ipv4 als auch ipv6 Adresse. Welche wird genommen und warum?
In der Doku steht auch: To use create_connection() to connect to a IPv6 address the server socket also should have been created using the address family AF_INET6. Ich verstehe das so, daß du wenn du den Socket mit AF_INET erzeugt hast, nur eine V4 Auflösung gemacht wird und bei Erzeugen mit AF_INET6 nur eine V6 Auflösung. Der Socket kann ja nur entweder V4 oder V6 sein. Der Default für socket.socket ist AF_INET, also wird wohl eine V4 Adresse genommen.
Ich hab nichts (mehr) gemacht als:
sock = socket.create_connection(('flupp.belwue.de',591))
Ich hab also weder AF_INET noch AF_INET6 angegeben.
Genau DAS ist ja meine Frage: was passiert, wenn ich nichts angebe?
* Ulli Horlacher:
Mit
sock = socket.create_connection(('flupp.belwue.de',591))
bekomme ich einen tcp Link. Das funktioniert.
flupp.belwue.de hat sowohl ipv4 als auch ipv6 Adresse. Welche wird genommen und warum?
Python ruft getaddrinfo auf und verwenden die Adreßliste, die diese Funktion liefert, ohne weitere Sortierung. Das hängte also davon, wie Du getaddrconfig konfiguriert hast.
Florian Weimer <fw@deneb.enyo.de> wrote:
* Ulli Horlacher:
Mit
sock = socket.create_connection(('flupp.belwue.de',591))
bekomme ich einen tcp Link. Das funktioniert.
flupp.belwue.de hat sowohl ipv4 als auch ipv6 Adresse. Welche wird genommen und warum?
Python ruft getaddrinfo auf und verwenden die Adreßliste, die diese Funktion liefert, ohne weitere Sortierung.
Das hängte also davon, wie Du getaddrconfig konfiguriert hast.
Hab ich gar nicht. Ist OS-Default. Also genau das, was ich will. Sehr schoen. -- Ullrich Horlacher Server und Virtualisierung Rechenzentrum TIK Universitaet Stuttgart E-Mail: horlacher@tik.uni-stuttgart.de Allmandring 30a Tel: ++49-711-68565868 70569 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/
participants (4)
-
Florian Weimer
-
Julian Gethmann
-
Peter Heitzer
-
Ulli Horlacher