2010-10-09 9 views

Répondre

53

Bien que ce soit un peu un vieux fil, je vais sauter dedans. Je me suis heurté au même défi et j'ai pensé que je partagerais la solution. Donc, fondamentalement, le fichier de configuration peuplerait la variable d'instance 'nameservers' du fichier dns.resolver.Resolver que vous utilisez. Par conséquent, si vous voulez forcer votre résolveur à utiliser un serveur de noms particulier, vous pouvez le faire direcly comme ceci: quelqu'un

import dns.resolver 

my_resolver = dns.resolver.Resolver() 

# 8.8.8.8 is Google's public DNS server 
my_resolver.nameservers = ['8.8.8.8'] 

answer = my_resolver.query('google.com') 

Hope trouve utile.

+3

Vous pouvez passer 'configure = False' pour éviter de lire'/etc/resolv.conf' ou de registre Windows. – jfs

+0

Le paquet 'dnspython' ne fonctionne que sur Python 2. – Lukas

+0

Vous pouvez récupérer leur dépôt git et basculer manuellement la branche vers' python3'. – Lukas

1

Oui, c'est le cas.

Si vous utilisez la fonction de commodité dns.resolver.query() comme ce

import dns.resolver 
r = dns.resolver.query('example.org', 'a') 

vous pouvez ré-initialiser le résolveur par défaut comme un serveur de noms spécifiques (ou une liste) est utilisée, par exemple:

import dns.resolver 
dns.resolver.default_resolver = dns.resolver.Resolver(configure=False) 
dns.resolver.default_resolver.nameservers = ['8.8.8.8', '2001:4860:4860::8888', 
              '8.8.4.4', '2001:4860:4860::8844' ] 
r = dns.resolver.query('example.org', 'a') 

Ou vous pouvez utiliser un objet résolveur séparé juste pour certaines requêtes:

import dns.resolver 
res = dns.resolver.Resolver(configure=False) 
res.nameservers = [ '8.8.8.8', '2001:4860:4860::8888', 
        '8.8.4.4', '2001:4860:4860::8844' ] 
r = res.query('example.org', 'a')