天天看點

Python學習筆記-DNS處理子產品dnspython

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,如需轉載請自行聯系原作者