Utilisation de la commande dig en python

juste un avertissement, mes compétences en python sont presque inexistantes, mais j'essaie d'apprendre au fur et à mesure.

je fais quelques changements via notre panneau de contrôle DNS pendant le week-end à environ 58 CNAMES (je change juste de destination)

et plutôt que de vérifier que les changements sont allés en direct pour chaque enregistrement individuel, je me demandais s'il y avait un moyen de script une liste de digs pour chaque CNAME en python?

la commande dig que j'utilise serait quelque chose comme ceci

dig @ns1.netnames.net www.rac.co.uk CNAME

et je m'attends à voir rac-secure.gslb2.rac.co.uk retourné.

j'ai essayé quelque chose comme:

import os
os.system( 'dig<exampledomain.com>'CNAME )

mais cela ne semble pas fonctionner (comme je l'ai mentionné mes compétences en python font défaut), suis-je sur la bonne voie, ou devrais-je utiliser quelque chose comme dnspython? J'ai déjà utilisé le module dnspython avec (beaucoup) l'aide de la communauté stack overflow, mais je trouve la documentation vraiment confuse.

tout pointeur dans la bonne direction serait grandement apprécié.

Cordialement

Chris.

17
demandé sur Grumdrig 2011-03-08 19:49:22

2 réponses

il est tout à fait possible d'invoquer dig à partir de python, vous économiserez probablement du travail en utilisant simplement une bibliothèque python. Jetez un oeil à dnspython qui fera probablement tout plus facile - en plus vous n'avez pas à analyser le format de sortie.

import socket
import dns.resolver

# Basic query
for rdata in dns.resolver.query('www.yahoo.com', 'CNAME') :
    print rdata.target

# Set the DNS Server
resolver = dns.resolver.Resolver()
resolver.nameservers=[socket.gethostbyname('ns1.cisco.com')]
for rdata in resolver.query('www.yahoo.com', 'CNAME') :
    print rdata.target
39
répondu koblas 2013-06-04 16:29:02

os.system est obsolète. Utilisez sous-processus.Popen:

import subprocess
import shlex

cmd='dig @ns1.netnames.net www.rac.co.uk +short'
# cmd='dig @ns1.netnames.net www.rac.co.uk CNAME'
proc=subprocess.Popen(shlex.split(cmd),stdout=subprocess.PIPE)
out,err=proc.communicate()
print(out)
# rac-secure.gslb.norwichunion.com.
4
répondu unutbu 2011-03-08 17:08:19