天天看点

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