Использование команды 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.