一、安装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.