2010-10-09 26 views

Respuesta

53

Aunque esto es algo así como un hilo viejo, voy a saltar. He chocado contra el mismo desafío y pensé que iba a compartir la solución. Entonces, básicamente, el archivo de configuración llenaría la variable de instancia 'nameservers' del dns.resolver.Resolver que está utilizando. Por lo tanto, si se quiere forzar a su Resolver utilizar un servidor de nombres en particular, puede hacerlo direcly así:

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

espero que alguien le resulta útil.

+3

Puede pasar 'configure = False' para evitar leer'/etc/resolv.conf' o el registro de Windows. – jfs

+0

El paquete 'dnspython' solo funciona en Python 2. – Lukas

+0

Puede verificar su repositorio de git y cambiar manualmente la rama a' python3'. – Lukas

1

Sí, lo es.

Si se utiliza la función de conveniencia dns.resolver.query() como esto

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

puede volver a inicializar el almacenador por defecto tal servidor de nombres tan específico (o una lista) se utiliza, por ejemplo:

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

O puede utilizar un objeto de resolución separado solo para algunas consultas:

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