web-dev-qa-db-ja.com

pythonでDigコマンドを使用する

ただの警告ですが、私のpythonスキルはほとんど存在しませんが、学習しながら学習しようとしています。

週末にDNSコントロールパネルを介して約58のCNAMEにいくつかの変更を加えています(宛先を変更するだけです)

そして、個々のレコードごとに変更が公開されたことを確認するのではなく、Pythonで各CNAMEの掘り出し物のリストをスクリプト化する方法があるかどうか疑問に思いました。

私が使用するDigコマンドは次のようになります

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

rac-secure.gslb2.rac.co.ukが返されることを期待しています。

私は次のようなことを試しました:

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

しかし、それはうまくいかなかったようです(私が言ったようにpythonスキルが不足しています)、私は正しい道を進んでいますか、それともdnspythonのようなものを使うべきですか?私はdnspythonモジュールを使いました以前はスタックオーバーフローコミュニティからの(多くの)助けがありましたが、ドキュメントは本当に混乱しています。

正しい方向へのポインタは大歓迎です。

よろしく

クリス。

17

PythonからDigを呼び出すことはかなり可能です。おそらく、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
50
koblas

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.
4
unutbu