web-dev-qa-db-fra.com

Définir un serveur DNS spécifique à l'aide de dns.resolver (pythondns)

J'utilise dns.resolver de dnspython .

Est-il possible de définir l'adresse IP du serveur à utiliser pour les requêtes?

28
Massimo

Bien que ce soit un peu un vieux fil, je vais me lancer. Je me suis heurté au même défi et je pensais partager la solution. Donc, fondamentalement, le fichier de configuration renseignerait la variable d'instance 'nameservers' du fichier dns.resolver.Resolver que vous utilisez. Par conséquent, si vous voulez contraindre votre résolveur à utiliser un serveur de noms particulier, vous pouvez le faire directement comme ceci:

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

J'espère que quelqu'un le trouvera utile.

66
Marcin Wyszynski

Oui, ça l'est.

Si vous utilisez la fonction pratique dns.resolver.query() comme ceci

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

vous pouvez réinitialiser le résolveur par défaut tel qu'un serveur de noms spécifique (ou une liste) est utilisé, 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 distinct uniquement 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')
2
maxschlepzig

Vous ne spécifiez pas dans votre question, mais en supposant que vous utilisez le résolveur de dnspython.org , la documentation indique que vous souhaitez définir l'attribut nameservers sur l'objet Resolver.

Bien qu’il soit peut-être plus facile de fournir un fichier /etc/resolv.conf-style à transmettre à l’argument argument filename du constructeur .

0
bstpierre