J'utilise dns.resolver
de dnspython .
Est-il possible de définir l'adresse IP du serveur à utiliser pour les requêtes ?
J'utilise dns.resolver
de dnspython .
Est-il possible de définir l'adresse IP du serveur à utiliser pour les requêtes ?
Bien qu'il s'agisse d'un vieux sujet, je me permets d'intervenir. J'ai rencontré le même problème et j'ai pensé partager la solution. En fait, le fichier de configuration devrait remplir la variable d'instance 'nameservers' du résolveur dns.resolver.Resolver que vous utilisez. Ainsi, si vous voulez contraindre votre Resolver à 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.
Vous pouvez passer configure=False
pour éviter de lire /etc/resolv.conf
ou le registre Windows.
Au cas où quelqu'un tomberait sur cette réponse (comme moi), dnspython
supporte désormais Python 3.x (et 2.x si vous l'utilisez encore).
Oui, c'est le cas.
Si vous utilisez la fonction de commodité 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 de telle sorte qu'un serveur de noms spécifique (ou une liste) soit 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')
Vous pouvez également utiliser un objet résolveur distinct 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')
Comme il n'y a pas d'exemple de comment faire cela avec dnspython en 2021, j'ai pensé en poster un :
import dns.resolver
resolver = dns.resolver.Resolver()
resolver.nameservers = ['8.8.8.8'] # using google DNS
result = resolver.resolve('google.com', 'NS')
nameservers = [ns.to_text() for ns in result]
Sortie :
['ns1.google.com.', 'ns3.google.com.', 'ns2.google.com.', 'ns4.google.com.']
AttributeError: 'Resolver' object has no attribute 'resolve'
en utilisant la dernière version de dnspython
.
@e-info128 : Assurez-vous que vous utilisez dnspython 2.0.0 ou plus. Voir la documentation .
Oui, dnspython==2.1.0
de pip3
. Je résous le problème en utilisant le même exemple mais en remplaçant .resolve()
par .query()
.
Vous ne le précisez pas dans votre question, mais en supposant que vous utilisiez le résolveur de dnspython.org , la documentation indique que vous devez définir le nameservers
sur l'objet Resolver.
Bien qu'il puisse être plus facile de fournir un fichier de type /etc/resolv.conf à transmettre à la fonction du constructeur filename
argument .
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.
0 votes
Pouvez-vous ajouter un lien vers la bibliothèque qui fournit
dns.resolver
? Par ailleurs, cela ne serait-il pas dans ladns.resolver
docs ?0 votes
@WoLpH Dans ubunty, il y a un paquet nommé
python-dnspython