天天看點

dns處理子產品dnspython

環境說明:linux系統 python 2.6.6

安裝:

1

2

3

4

5

6

7

<code>wget https://pypi.python.org/packages/b3/e3/091c6489f0b573b8a4069ce956d037061ae9321401c89323386fe748dc9f/dnspython-1.12.0.zip</code>

<code>unzip dnspython-1.12.0.zip </code>

<code>cd dnspython-1.12.0</code>

<code>python setup.py install</code>

導入子產品是:

<code>import</code> <code>dns.resolver</code>

dnsPython子產品提供了大量的dns處理方法,最常見的是域名查詢,dnsPython提供一個DNS解析類—&gt;resolver,使用它的query方法來實作域名查詢功能,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記錄

郵件交換記錄,定義郵件伺服器域名。

CHAME記錄

指别名記錄實作域名間的映射。

NS記錄

标記區域的域名伺服器以及授權子域。

PTR記錄

反向解析,與A記錄相反,将IP轉化成主機名。

SOA記錄

SOA标記,一個起始授權區定義。

(一)實作A記錄例子:

8

9

10

11

12

13

<code>#!/usr/bin/env python</code>

<code>#-*- coding:utf-8 -*-</code>

<code># 2017,8,24</code>

<code>domain </code><code>=</code> <code>raw_input</code><code>(</code><code>'Please input an domain:'</code><code>)</code>

<code>A </code><code>=</code> <code>dns.resolver.query(domain,</code><code>'A'</code><code>)</code>

<code>for</code> <code>i </code><code>in</code> <code>A.response.answer:</code>

<code>        </code><code>for</code> <code>j </code><code>in</code> <code>i.items:</code>

<code>                </code><code>print</code> <code>j.address</code>

執行結果:以QQ為例子:

<code>[root</code><code>@China</code> <code>dns]</code><code># python simple1.py </code>

<code>Please input an domain:www.qq.com</code>

<code>61.135.157.156</code>

<code>125.39.240.113</code>

<code>[root</code><code>@China</code> <code>dns]</code><code>#</code>

(二),實作MX記錄的例子:

<code>MX </code><code>=</code> <code>dns.resolver.query(domain,</code><code>'MX'</code><code>)</code>

<code>for</code> <code>i </code><code>in</code> <code>MX:</code>

<code>        </code><code>print</code> <code>'MX preferce='</code><code>,i.preference,</code><code>'mail exchaner='</code><code>,i.exchange</code>

以QQ和163為例看結果:

<code>[root@China dns]</code><code># python simple2.py </code>

<code>Please input an domain:163.com</code>

<code>MX preferce= 10 mail exchaner= 163mx01.mxmail.netease.com.</code>

<code>MX preferce= 50 mail exchaner= 163mx00.mxmail.netease.com.</code>

<code>MX preferce= 10 mail exchaner= 163mx03.mxmail.netease.com.</code>

<code>MX preferce= 10 mail exchaner= 163mx02.mxmail.netease.com.</code>

<code>[</code>

<code>root@China dns]</code><code># python simple2.py </code>

<code>Please input an domain:qq.com</code>

<code>MX preferce= 30 mail exchaner= mx1.qq.com.</code>

<code>MX preferce= 20 mail exchaner= mx2.qq.com.</code>

<code>MX preferce= 10 mail exchaner= mx3.qq.com.</code>

(三)NS記錄例子:

<code>ns </code><code>=</code> <code>dns.resolver.query(domain,</code><code>'NS'</code><code>)</code>

<code>for</code> <code>i </code><code>in</code> <code>ns.response.answer:</code>

<code>                </code><code>print</code> <code>j.to_text()</code>

以QQ和百度為例子進行驗證:

14

<code>[root@China dns]</code><code># python simple3.py </code>

<code>Please input an domain:baidu.com</code>

<code>ns7.baidu.com.</code>

<code>ns2.baidu.com.</code>

<code>ns4.baidu.com.</code>

<code>dns.baidu.com.</code>

<code>ns3.baidu.com.</code>

<code>ns3.qq.com.</code>

<code>ns1.qq.com.</code>

<code>ns4.qq.com.</code>

<code>ns2.qq.com.</code>

(四)CNAME例子:

<code>cname </code><code>=</code> <code>dns.resolver.query(domain,</code><code>'CNAME'</code><code>)</code>

<code>for</code> <code>i </code><code>in</code> <code>cname.response.answer:</code>

應用執行個體:DNS域名輪循業務監控(參考資料:http://book.51cto.com/art/201411/456723.htm)

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

<code>#2017,8,25</code>

<code>#change dns is ok?</code>

<code>import</code> <code>os</code>

<code>import</code> <code>httplib</code>

<code>import</code> <code>requests</code>

<code>iplist</code><code>=</code><code>[] </code><code>#定義域名IP清單變量</code>

<code>appdomain</code><code>=</code><code>"www.qq.com"</code> <code>#定義業務域名</code>

<code>def</code> <code>get_iplist(domain</code><code>=</code><code>""): </code><code>#域名解析函數,解析成功IP将被追加到iplist</code>

<code>    </code><code>try</code><code>:</code>

<code>        </code><code>A </code><code>=</code> <code>dns.resolver.query(domain, </code><code>'A'</code><code>)</code>

<code>    </code><code>except</code> <code>Exception,e:</code>

<code>        </code><code>print</code> <code>"dns resolver error :"</code><code>+</code><code>str</code><code>(e)</code>

<code>        </code><code>return</code>

<code>    </code><code>for</code> <code>i </code><code>in</code> <code>A.response.answer:</code>

<code>            </code><code>iplist.append(j.address) </code><code>#追加到iplist</code>

<code>    </code><code>return</code> <code>True</code>

<code>def</code> <code>checkip(ip):</code>

<code>    </code><code>checkurl</code><code>=</code><code>ip</code><code>+</code><code>":80"</code>

<code>    </code><code>getcontent</code><code>=</code><code>""</code>

<code>    </code><code>httplib.socket.setdefaulttimeout(</code><code>5</code><code>) </code><code>#定義連接配接逾時時間為5秒</code>

<code>    </code><code>conn</code><code>=</code><code>httplib.HTTPConnection(checkurl) </code><code>#建立http連接配接對象</code>

<code>        </code><code>conn.request(</code><code>"GET"</code><code>,</code><code>"/"</code><code>,headers </code><code>=</code> <code>{</code><code>"Host"</code><code>:appdomain}) </code><code>#發起url請求,添加host頭</code>

<code>        </code><code>r</code><code>=</code><code>conn.getresponse()</code>

<code>        </code><code>getcontent</code><code>=</code><code>r.status </code><code>#擷取URL頁面狀态碼</code>

<code>    </code><code>finally</code><code>:</code>

<code>        </code> 

<code>        </code><code>if</code> <code>getcontent </code><code>=</code><code>=</code><code>200</code><code>:</code>

<code>            </code><code>print</code> <code>ip</code><code>+</code><code>"[ok]"</code>

<code>        </code><code>else</code><code>:</code>

<code>            </code><code>print</code> <code>ip</code><code>+</code><code>"[error]"</code>

<code>if</code>  <code>__name__</code><code>=</code><code>=</code><code>"__main__"</code><code>:</code>

<code>    </code><code>if</code> <code>get_iplist(appdomain) </code><code>and</code> <code>len</code><code>(iplist) &gt; </code><code>0</code><code>:</code>

<code>        </code><code>for</code> <code>ip </code><code>in</code> <code>iplist:</code>

<code>            </code><code>checkip(ip)</code>

<code>    </code><code>else</code><code>:</code>

<code>        </code><code>print</code> <code>"dns resolver error"</code>

執行結果:

<code>[root@China dns]</code><code># python simple5.py </code>

<code>125.39.240.113[ok]</code>

<code>61.135.157.156[ok]</code>

<a href="https://s4.51cto.com/wyfs02/M01/02/16/wKiom1me1D2iiBYJAAQF1aT1ixQ283.png" target="_blank"></a>

本文轉自 天道酬勤VIP 51CTO部落格,原文連結:http://blog.51cto.com/tdcqvip/1958996