22

念のために言っておきますが、私の 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 モジュールを使用したことがありますが、ドキュメントが非常にわかりにくいことがわかりました。

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

よろしく

クリス。

4

3 に答える 3

55

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
于 2011-03-08T19:07:47.183 に答える
6

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.
于 2011-03-08T16:59:50.167 に答える