一、安装dnspython

下载地址:http://www.dnspython.org/

wget http://www.dnspython.org/kits/1.9.4/dnspython-1.9.4.tar.gz

[root@localhost opt]# tar -zxvf dnspython-1.9.4.tar.gz 

[root@localhost opt]#cd /opt/dnspython-1.9.4

[root@localhost dnspython-1.9.4]# python setup.py install


二、详解模块域名解析方法

dnspython模块提供了大量的DNS处理方法,最常用的方法是域名查询。dnspython提供了一个DNS解析器类resolver,使用它的query方法来实现域名的查询功能。query方法定义如下:

query(self,qname,rdtype=1,rdclass=1,tcp=false,source=None,raise_on_no_answer=True,source_port=0)

其中qname参数为查询的域名,rdtype参数用来指定RR资源的类型,常用的有以下几种

A记录:将主机名转化成IP地址。

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

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

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

PTR记录:反向解析,与A记录相反,将IP地址转成主机名。

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

rdclass参数用于指定网络类型,可选的值有IN、CH与HS,其中IN为默认。

tcp参数用于指定查询是否启用TCP协议,默认为False。

source与source_port参数作为指定查询源地址与端口,默认值为查询设备IP地址和O。

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


三、示例

(1)A记录

[root@localhost dnspython]# cat simpe1.py 

#!/usr/bin/env python

import dns.resolver

domain=raw_input('please input an domain:')

a=dns.resolver.query(domain,'A')

for i in a.response.answer:

        for j in i.items:

                print j.address

[root@localhost dnspython]# python simpe1.py 

please input an domain:baidu.com

220.181.57.217

123.125.114.144

180.149.132.47

(2)MX记录

[root@localhost dnspython]# cat simpe2.py 

#!/usr/bin/env python

import dns.resolver

domain=raw_input('please input an domain:')

mx=dns.resolver.query(domain,'MX')

for i in mx:

        print 'mx preference-',i.preference,'mail exchanger=',i.exchange


[root@localhost dnspython]# python simpe2.py 

please input an domain:163.com

mx preference- 10 mail exchanger= 163mx01.mxmail.netease.com.

mx preference- 10 mail exchanger= 163mx02.mxmail.netease.com.

mx preference- 10 mail exchanger= 163mx03.mxmail.netease.com.

mx preference- 50 mail exchanger= 163mx00.mxmail.netease.com.

(3)NS记录

[root@localhost dnspython]# cat simpe3.py 

#!/user/bin/env python

import dns.resolver

domain=raw_input('please input an domain:')

ns=dns.resolver.query(domain,'NS')

for i in ns.response.answer:

        for j in i.items:

                print j.to_text()

[root@localhost dnspython]# python simpe3.py 

please input an domain:baidu.com

ns7.baidu.com.

ns3.baidu.com.

dns.baidu.com.

ns4.baidu.com.

ns2.baidu.com.

(4)CNAME记录

[root@localhost dnspython]# cat simpe4.py 

#!/usr/bin/env python

import dns.resolver

domain=raw_input('please input an domain:')

ns=dns.resolver.query(domain,'CNAME')

for i in ns.response.answer:

        for j in i.items:

                print j.to_text()

[root@localhost dnspython]# python simpe4.py 

please input an domain:www.baidu.com

www.a.shifen.com.

[root@localhost dnspython]# python simpe4.py 

please input an domain:www.163.com

www.163.com.lxdns.com.