DNS處理子產品dnspython
dnspython是python實作的一個DNS工具包,它支援幾乎所有的記錄類型,可以用于查詢、傳輸并動态更新ZONE資訊,同時支援TSIG(事務簽名)驗證消息和EDNS0(擴充DNS)。
在系統管理方面,我們可以利用其查詢功能來實作DNS服務監控以及解析結果的校驗,可以替代nslookup和dig等工具,輕松做到與現有平台的整合。
下載下傳dnspython子產品
<code>[root@kurol ~]</code><code># python3 -m easy_install -i http://pypi.douban.com/simple/ dnspython</code>
dnspython提供大量關于DNS的處理方法,最常用的是域名查詢。dnspython提供了一個DNS解析類resolver,使用它的query方法來實作域名的查詢功能。
<code>query(</code><code>self</code><code>, qname, rdtype </code><code>=</code> <code>1</code><code>, rdclass </code><code>=</code> <code>1</code><code>, tcp </code><code>=</code> <code>False</code><code>, source </code><code>=</code> <code>None</code><code>, raise_on_no_answer </code><code>=</code> <code>True</code><code>, source_port </code><code>=</code> <code>0</code><code>)</code>
qname參數為查詢的域名,rdtype參數用來指定RR資源。
A記錄
将主機名轉換成IP位址
MX記錄
郵件交換記錄,定義郵件伺服器的域名
CNAME記錄
别名記錄,實作域名間的映射
NS記錄
标記區域的域名伺服器及授權子域
PTR記錄
反向解析,與A記錄相反,将IP位址轉換為主機名
SOA記錄
SOA标記,一個起始授權區的定義
常見的解析類型示例:
A記錄(實作A記錄查詢方法源碼):
<a href="http://blog.51cto.com/kurolz/1935039#">?</a>
<code> </code><code>[root@kurol pkg1]</code><code># vim dnsa.py</code>
<code>#!/usr/bin/python3</code>
<code>#import dns.resolverdomain = input('Please input an domain: ') #輸入域名位址</code>
<code>A </code><code>=</code> <code>dns.resolver.query(domain, </code><code>'A'</code><code>) </code><code>#指定查詢類型為A記錄</code>
<code>for</code> <code>i </code><code>in</code> <code>A.response.answer: </code><code>#通過response.answer方法擷取查詢回應資訊 </code>
<code>for</code> <code>j </code><code>in</code> <code>i.items: </code><code>#周遊回應資訊 </code>
<code> </code><code>print</code> <code>(j.address)</code>
<code>[root@kurol pkg1]</code><code># python3 dnsa.py Please input an domain: www.google.com93.46.8.89</code>
MX記錄(實作MX記錄查詢方法源碼):
<code>[root@kurol pkg1]</code><code># vim mxdns.py</code>
<code>#import dns.resolverdomain = input('Please input an domain: ') #輸入域名位址</code>
<code>MX </code><code>=</code> <code>dns.resolver.query(domain, </code><code>'MX'</code><code>) </code><code>#指定查詢類型為MX記錄</code>
<code>for</code> <code>i </code><code>in</code> <code>MX: </code><code>#通過response.answer方法擷取查詢回應資訊 </code>
<code> </code><code>print</code> <code>(</code><code>'MX preference = '</code><code>, i.preference, </code><code>'main exchanger = '</code><code>, i.exchange)</code>
<code>[root@kurol pkg1]</code><code># python3 mxdns.py </code>
<code>Please </code><code>input</code> <code>an domain: baidu.com</code>
<code>MX preference </code><code>=</code> <code>20</code> <code>main exchanger </code><code>=</code> <code>mx50.baidu.com.</code>
<code>MX preference </code><code>=</code> <code>10</code> <code>main exchanger </code><code>=</code> <code>mx.n.shifen.com.</code>
<code>MX preference </code><code>=</code> <code>20</code> <code>main exchanger </code><code>=</code> <code>mx1.baidu.com.</code>
<code>MX preference </code><code>=</code> <code>20</code> <code>main exchanger </code><code>=</code> <code>jpmx.baidu.com.</code>
NS記錄(實作NS記錄查詢方法源碼):
<code>[root@kurol pkg1]</code><code># vim nsdns.py</code>
<code>#!/usr/bin/python3#import dns.resolverdomain = input('Please input an domain: ') #輸入域名位址</code>
<code>ns </code><code>=</code> <code>dns.resolver.query(domain, </code><code>'NS'</code><code>) </code><code>#指定查詢類型為NS記錄</code>
<code>for</code> <code>i </code><code>in</code> <code>ns.response.answer: </code><code>#通過response.answer方法擷取查詢回應資訊 </code>
<code>for</code> <code>j </code><code>in</code> <code>i.items: </code><code>#周遊回應資訊 </code>
<code> </code><code>print</code> <code>(j.to_text())</code>
<code>[root@kurol pkg1]</code><code># python3 nsdns.py </code>
<code>Please </code><code>input</code> <code>an domain: qq.comn</code>
<code>s3.qq.com.</code>
<code>ns4.qq.com.</code>
<code>ns1.qq.com.</code>
<code>ns2.qq.com.</code>
CNAME記錄(實作CNAME記錄查詢方法源碼):
<code>[root@kurol pkg1]</code><code># vim cnamedns.py</code>
<code>cname </code><code>=</code> <code>dns.resolver.query(domain, </code><code>'CNAME'</code><code>) </code><code>#指定查詢類型為CNAME記錄</code>
<code>for</code> <code>j </code><code>in</code> <code>i.items: </code><code>#周遊回應資訊</code>
<code></code>
本文轉自謝育政 51CTO部落格,原文連結:http://blog.51cto.com/kurolz/1935039,如需轉載請自行聯系原作者