Python自動化メンテナンスノート(三):DNS処理モジュールdnspython
運転環境:Python 3.6,Windwos10 RS1,Pycharm
モジュールの紹介
モジュールのインストール
私のコンピュータの現在の環境は
ドメイン名の解析方法
A記録:ホスト名をIPアドレスMX記録に変換する:メール交換記録、メールサーバードメイン名を定義するCNAME記録:別名記録、ドメイン名間のマッピングNS記録を実現する:マーキングエリアのドメイン名サーバー及び授権サブドメインPTR記録:逆解析、A記録と反対、IPをホスト名SOA記録に変換する:一つの開始授権エリアの定義
ドメイン名解析タイプの詳細については、この記事(リンク)を参照してください.
一般的なドメイン名解析の例
6つのドメイン名解析タイプについて述べたが、
①AレコードAレコードのインスタンスコードは以下の通りである.
実行結果は次のとおりです.
これで
出力結果は次のとおりです.『Python自動化メンテナンス』で使用されている この を参照することができる.
②MX記録実現MX記録照会方法の例は、メールボックス解析用として上述したので、QQメールボックスを例に挙げます.
実行結果は次のとおりです.
ここで、優先度のデフォルトは
③NSレコードNSレコードサンプルコードは以下の通りである.
実行結果は次のとおりです.
④CNAME記録CNAME記録照会コード例は以下の通りである.
実行結果は次のとおりです.
また、上記のAレコードに登場する
注意事項: CNAMEのターゲットホストアドレスはホスト名のみ使用でき、 ホスト名には、 AレコードはCNAMEレコードよりも優先される.すなわち、ホストアドレスにAレコードとCNAMEレコードが同時に存在する場合、CNAMEレコードは有効にならない.
モジュールの紹介
dnspython
は、Python
によって実装されたDNS
ツールパッケージであり、ほとんどのレコードタイプをサポートし、ZONE情報をクエリー、転送、動的に更新するとともに、TSIG
(トランザクション署名)検証メッセージおよびEDNS0
(拡張DNS)をサポートする.nslookup
dig
などのツールに代わることができ、プラットフォームの統合を容易に行うことができます.モジュールのインストール
私のコンピュータの現在の環境は
Python3.6
で、すでにpip
のソフトウェア管理ツールを継承しているので、私は直接pip
を使ってdnspython
モジュールをインストールしました.pip install dnspython # 1.15.0, Python2 Python3 , python3 , pip3 install dnspython
ドメイン名の解析方法
dnspython
は大量のDNS
処理方法を提供し、最もよく使われるのはドメイン名クエリーである.dnspython
は、ドメイン名のクエリー機能を実現するために、DNS
の解析器クラスresolver
を提供する.query(self,qname,rdtype=1,rdclass=1,tcp=False,source=None,raise_on_no_answer=True,source_port=0)
query
はクエリのドメイン名であり、qname
はrdtype
リソースのタイプを指定するために使用されます.A記録:ホスト名をIPアドレスMX記録に変換する:メール交換記録、メールサーバードメイン名を定義するCNAME記録:別名記録、ドメイン名間のマッピングNS記録を実現する:マーキングエリアのドメイン名サーバー及び授権サブドメインPTR記録:逆解析、A記録と反対、IPをホスト名SOA記録に変換する:一つの開始授権エリアの定義
ドメイン名解析タイプの詳細については、この記事(リンク)を参照してください.
一般的なドメイン名解析の例
6つのドメイン名解析タイプについて述べたが、
RR
、A
、MX
、NS
、CNAME
の4つの解析タイプにすぎない.①AレコードAレコードのインスタンスコードは以下の通りである.
# -*- coding: utf-8 -*-
# @Time : 2017/10/1 9:58
# @File : DNS.py
# @Software: PyCharm
import dns.resolver
domain = input(" :") #
A = dns.resolver.query(domain, 'A') # A
for i in A.response.answer: # response.answer
# print(i)
for j in i.items:
print(j)
実行結果は次のとおりです.
:>? www.baidu.com
www.a.shifen.com.
14.215.177.38
14.215.177.39
これで
www.baidu.com
のドメイン名を解析しました.それ以外に、デバッグウィンドウで変数iが何であるかを見ることができます.print(i) # i
出力結果は次のとおりです.
>>> print(i)
www.a.shifen.com. 225 IN A 14.215.177.38
www.a.shifen.com. 225 IN A 14.215.177.39
i
には、出力されたj
値に対応する2つのエントリがあることが分かった.また、注意すべき点はいくつかあります.Python2.6
は、サンプルコードの最後の動作print j.address
、すなわち変数iのaddress
の属性を印刷するが、私はコードを実行する際に異常が発生し、このaddress
の属性が存在しないことを示唆し、直接変数j
を印刷すれば解析アドレスをフィードバックすることができ、この具体的な原因はまだ不明である.DNS
の解析時に新しいドメイン名www.a.shifen.com
が現れ、インターネットで関連資料を調べたところ、dig
の追跡によりshifen.com
とbaidu.com
のサーバーが同じであることが判明し、具体的には(リンク)②MX記録実現MX記録照会方法の例は、メールボックス解析用として上述したので、QQメールボックスを例に挙げます.
# -*- coding: utf-8 -*-
# @Software: PyCharm
import dns.resolver
domain = input('Input an domain')
MX = dns.resolver.query(domain, 'MX') # MX
for i in MX: #
print('MX preference =', i.preference, 'mail exchanger =', i.exchange)
実行結果は次のとおりです.
>>> Please input a domain>? qq.com
MX preference = 20 mail exchanger = mx2.qq.com.
MX preference = 30 mail exchanger = mx1.qq.com.
MX preference = 10 mail exchanger = mx3.qq.com.
ここで、優先度のデフォルトは
preference
であり、MXレコードは優先度を設定することによってプライマリ・セカンダリ・サーバの設定を実現することができ、「優先度」の数字が小さいほどレベルが高くなり、「優先度」はMXレコードにのみ有効である.③NSレコードNSレコードサンプルコードは以下の通りである.
# -*- coding: utf-8 -*-
# @Software: PyCharm
import dns.resolver
domain = input('Input an domain')
NS = dns.resolver.query(domain, 'NS')
for i in NS.response.answer:
for j in i.items:
print(j.to_text())
実行結果は次のとおりです.
>>> Input an domain>? baidu.com
dns.baidu.com.
ns3.baidu.com.
ns4.baidu.com.
ns2.baidu.com.
ns7.baidu.com.
exchange
ドメイン名サーバレコード.ドメイン名をどのサーバで解析するかを示すために使用します.ドメイン名を登録するとき、デフォルトの10
があり、登録されたドメイン名はDNSドメイン名サーバによって解析されます.しかし、NS(Name Server)
などの1級ドメイン名しか入力できないことに注意してください.DNS
、baidu.com
のような2レベルおよびマルチレベルドメイン名はエラーです.④CNAME記録CNAME記録照会コード例は以下の通りである.
# -*- coding: utf-8 -*-
# @Software: PyCharm
import dns.resolver
domain = input('Input an domain:')
CNAME = dns.resolver.query(domain,'CNAME')
for i in CNAME.response.answer:
for j in i.items:
print(j.to_text())
実行結果は次のとおりです.
>>> Input an domain:>? www.baidu.com
www.a.shifen.com.
また、上記のAレコードに登場する
www.baidu.com
ドメイン名が再び現れ、このドメイン名はwenku.baidu.com
の別名指向であることが分かった.www.a.shifen.com
の代わりにサブドメイン名を使用することに相当し、www.baidu.com
が変化すると、ip
の解析を1つずつ変更する必要がなく、サブドメイン名の解析を変更するだけでよいという利点がある.注意事項:
ip
は使用できません.ip
などの他の接頭辞は許可されていません.