天天看点

Python DNS处理模块

模块:dnspython

功能:

支持所有的记录类型

可以用于查询、传输并动态更新ZONE信息

支持TSIG(事务签名)验证消息和EDNS0(扩展DNS)

安装:

1

2

3

4

<code>wget http:</code><code>//www</code><code>.dnspython.org</code><code>/kits/1</code><code>.9.4</code><code>/dnspython-1</code><code>.9.4.</code><code>tar</code><code>.gz</code>

<code>tar</code> <code>-zxvf dnspython-1.9.4.</code><code>tar</code><code>.gz</code>

<code>cd</code> <code>dnspython-1.9.4</code>

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

dnspython提供一个DNS解析器类——resolver,使用query()方法来实现域名的查询功能模块域名解析方法:

Query()方法使用:

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

<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>

rdtype用来指定RR资源的类型,常用的有如下几种:qname为查询的域名。

A记录,将主机名转换成IP地址

MX记录,邮件交换记录,用于定义邮件服务器的域名

CNAME记录,别名记录,实现域名间的映射

NS记录,标记区域的域名服务器及授权子域

PTR记录,反向解析,与A记录相反,将IP转换成主机名

SOA记录,SOA标记,一个起始授权区的定义

rdclass用于指定网络类型,可选的值有:

IN,默认为IN

CH,

HS,

tcp用于指定查询是否启用TCP协议

source和source_port指定查询源地址与端口,默认查询设备IP和0

raise_on_no_answer用于指定当查询无应答时,是否触发异常,默认为True

A记录查询方法:

5

6

<code>dom</code><code>=</code><code>raw_input</code><code>(</code><code>'输入域名地址:'</code><code>)</code>

<code>A</code><code>=</code><code>dns.resolver.query(dom,</code><code>'A'</code><code>) </code><code># 指定查询类型为A的记录</code>

<code>for</code> <code>a </code><code>in</code> <code>A.response.answer:   </code><code># 通过response.answer方法获取查询回应信息</code>

<code>    </code><code>for</code> <code>b </code><code>in</code> <code>a.items:         </code><code># 遍历回应信息</code>

<code>        </code><code>print</code><code>(b.address)</code>

MX记录查询方法:

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

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

<code>    </code><code>print</code><code>(</code><code>'MX 优先权:'</code><code>,a.preference,</code><code>'mail 交换器:'</code><code>,a.exchange)</code>

NS记录查询方法:

<code>dom</code><code>=</code><code>raw_input</code><code>(</code><code>'输入一级域名地址:'</code><code>)</code>

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

<code>for</code> <code>a </code><code>in</code> <code>NS.respinse.answer:</code>

<code>    </code><code>for</code> <code>b </code><code>in</code> <code>a.items:</code>

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

CNAME记录查询方法:

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

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

DNS域名轮询业务监控:

步骤:

实现域名的解析,获取域名所有的A记录解析IP列表

对IP列表进行HTTP级别的探测

本文转自Grodd51CTO博客,原文链接:http://blog.51cto.com/juispan/2050030,如需转载请自行联系原作者