2010-10-09 14 views

risposta

53

Anche se questo è un po 'un vecchio thread, salterò dentro. Mi sono imbattuto nella stessa sfida e ho pensato di condividere la soluzione. Quindi, in pratica il file di configurazione popolerebbe la variabile di istanza 'nameservers' del dns.resolver.Resolver che stai usando. Quindi, se si vuole costringere il tuo Resolver di utilizzare un particolare server dei nomi, si può fare in questo modo direcly:

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

Speranza qualcuno trova utile.

+3

Si potrebbe passare 'configure = False' per evitare di leggere'/etc/resolv.conf' o il registro di Windows. – jfs

+0

Il pacchetto 'dnspython' funziona solo su Python 2. – Lukas

+0

Puoi eseguire il checkout del loro repository git e cambiare manualmente il ramo in' python3'. – Lukas

1

Sì, lo è.

Se si utilizza la funzione di convenienza dns.resolver.query() come questo

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

è possibile ri-inizializzare il risolutore di default tale nameserver così specifico (o una lista) è usato, ad esempio:

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

Oppure è possibile utilizzare un oggetto resolver separato solo per alcune query:

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') 
Problemi correlati