102 votes

Comment puis-je effectuer des recherches DNS en Python, notamment en faisant référence à / etc / hosts?

dnspython fera très bien mes recherches DNS, mais ignore totalement le contenu de /etc/hosts .

Existe-t-il un appel à la bibliothèque python qui fera le bon choix? c.-à-d. vérifier d'abord en etc/hosts et ne faire appel qu'aux recherches DNS sinon?

122voto

Jochen Ritzel Points 42916

Je ne sais pas vraiment si vous voulez effectuer des recherches DNS vous - même ou si vous souhaitez simplement obtenir l'adresse IP d'un hôte. Si vous voulez ce dernier,

 import socket
print socket.gethostbyname('localhost') # result from hosts file
print socket.gethostbyname('google.com') # your os sends out a dns query
 

93voto

bortzmeyer Points 12246

La résolution de nom normale en Python fonctionne bien. Pourquoi avez-vous besoin de DNSpython pour cela? Il suffit d’utiliser le getaddrinfo socket qui respecte les règles configurées pour votre système d’exploitation (sous Debian, il suit /etc/nsswitch.conf :

 >>> print socket.getaddrinfo('google.com', 80)
[(10, 1, 6, '', ('2a00:1450:8006::63', 80, 0, 0)), (10, 2, 17, '', ('2a00:1450:8006::63', 80, 0, 0)), (10, 3, 0, '', ('2a00:1450:8006::63', 80, 0, 0)), (10, 1, 6, '', ('2a00:1450:8006::68', 80, 0, 0)), (10, 2, 17, '', ('2a00:1450:8006::68', 80, 0, 0)), (10, 3, 0, '', ('2a00:1450:8006::68', 80, 0, 0)), (10, 1, 6, '', ('2a00:1450:8006::93', 80, 0, 0)), (10, 2, 17, '', ('2a00:1450:8006::93', 80, 0, 0)), (10, 3, 0, '', ('2a00:1450:8006::93', 80, 0, 0)), (2, 1, 6, '', ('209.85.229.104', 80)), (2, 2, 17, '', ('209.85.229.104', 80)), (2, 3, 0, '', ('209.85.229.104', 80)), (2, 1, 6, '', ('209.85.229.99', 80)), (2, 2, 17, '', ('209.85.229.99', 80)), (2, 3, 0, '', ('209.85.229.99', 80)), (2, 1, 6, '', ('209.85.229.147', 80)), (2, 2, 17, '', ('209.85.229.147', 80)), (2, 3, 0, '', ('209.85.229.147', 80))]
 

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