2 votes

Pourquoi ne puis-je pas établir une connexion tcp, via des sockets en python, avec un serveur de noms Root ?

Le contexte : Je veux établir une connexion TCP avec un serveur de nom racine afin de pouvoir envoyer une requête DNS et inspecter la réponse.

J'ai essayé d'établir une connexion TCP avec un serveur de nom Root en utilisant la fonction socket en python, notamment avec a.Root-servers.net

J'ai écrit le code ci-dessous dans un shell python interactif, sous Windows 11.

J'ai couru :

import socket
a = socket.socket()
a.connect(("a.root-servers.net", 53))

Mais je reçois l'erreur :

TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

Pourquoi en est-il ainsi ?

1voto

J_H Points 2740

J'obtiens de bons résultats avec le circuit virtuel (TCP) :

$  time dig +vc +norec ns . @a.root-servers.net

; <<>> DiG 9.10.6 <<>> +vc +norec ns . @a.root-servers.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60546
;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27
...
;; Query time: 13 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Fri Nov 18 14:38:22 PST 2022
;; MSG SIZE  rcvd: 828

real    0m0.056s

Le chemin de bout en bout depuis votre client au serveur racine est différent du mien. Contrairement au mien, il comporte un ou plusieurs routeurs de filtrage (firewalls). routeurs (pare-feu) qui rejettent les paquets TCP du port 53. des paquets TCP.

Ce faisant, vous violez la section 6.1.3.2. de rfc 1123 besoins de l'hôte . Il est essentiel d'autoriser les demandes de domaine TCP TCP, car certaines réponses DNS ne tiendront pas dans une taille limitée des datagrammes UDP.


Je vous recommande de demander à votre pare-feu local local de corriger sa configuration, ou de chercher un solution de connectivité Internet alternative.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X