Использование команды dig в python
Просто предупреждение, мои навыки python практически отсутствуют, но Im пытается учиться, когда я иду.
Я делаю несколько изменений через нашу панель управления DNS в течение выходных дней до 58 CNAMES (просто меняя пункт назначения)
И вместо того, чтобы проверить, что изменения перешли вживую для каждой отдельной записи, мне было интересно, есть ли способ script список раскадров для каждого CNAME в python?
Команда dig, которую я использую, будет примерно такой
dig @ns1.netnames.net www.rac.co.uk CNAME
и я ожидаю, что вернется rac-secure.gslb2.rac.co.uk
.
Я пробовал что-то вроде:
import os
os.system( 'dig<exampledomain.com>'CNAME )
Но это не работало (поскольку я упоминал, что мои навыки на питоне отсутствуют), я на правильном пути, или мне нужно использовать что-то вроде dnspython? Я использовал модуль dnspython раньше (с большим количеством) помощи от сообщества, но я считаю, что документация действительно запутанная.
Было бы очень полезно оценить любые указатели в правильном направлении.
Привет
Крис.
Ответы
Ответ 1
Вполне возможно вызывать dig из python, это, вероятно, спасет вас от работы, чтобы просто использовать библиотеку python. Взгляните на dnspython, который, вероятно, сделает все проще - плюс вам не нужно разбирать выходной формат.
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
Ответ 2
os.system
устарел. Используйте subprocess.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.