DNS处理模块dnspython

Posted 明王不动心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS处理模块dnspython相关的知识,希望对你有一定的参考价值。

dnspython是python实现的一个DNS工具包,它支持几乎所有的记录类型。

可以用于查询、传输并动态更新ZONE信息,同时支持TSIG(事务签名)验证消息和EDNS0(扩展DNS)。

在系统管理方面,我们可以利用其查询功能来实现DNS服务监控以及解析结果的校验。

 

一、模块域名解析方法

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资源的类型,常用的有以下几种:

(1)A记录:将主机名转换为IP地址;

(2)MX记录:邮件交换记录,定义邮件服务器的域名;

(3)CNAME记录:别名记录,实现域名间的映射;

(4)NS记录:标记区域的授权服务器及授权子域;

(5)PTR记录:反向解析,与A记录相反,将IP转换成主机名;

(6)SOA记录:SOA标记,一个起始授权区的定义;

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

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

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

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

 

二、常见解析类型实例说明

常见的DNS解析类型包括A、MX、NS、CNAME等。

利用dnspython的dns.resolver.query方法可以简单实现这些DNS类型的查询,为后面要实现的功能提供数据来源。

1.A记录

#!/usr/bin/env python2
#coding:utf-8
import dns.resolver
domain = raw_input(请输入域名:)
A = dns.resolver.query(domain,A)  #指定查询类型
for i in A.response.answer:  #获取查询信息
    for j in i.items:  #遍历回应信息
        print j.address

执行结果:

[[email protected] ~]# python2 /home/test/dnspython/simple.py
请输入域名:www.google.com
74.86.17.48

 

2.MX记录

#!/usr/bin/env python2
#coding:utf-8
import dns.resolver
domain = raw_input(请输入域名:)
MX = dns.resolver.query(domain,MX)
for i in MX:
    print MX preference=,i.preference, mail exchanger=,i.exchange

执行结果:

[[email protected] ~]# python2 /home/test/dnspython/simple2.py
请输入域名:163.com
MX preference= 10 mail exchanger= 163mx01.mxmail.netease.com.
MX preference= 10 mail exchanger= 163mx02.mxmail.netease.com.
MX preference= 50 mail exchanger= 163mx00.mxmail.netease.com.
MX preference= 10 mail exchanger= 163mx03.mxmail.netease.com.

 

3.NS记录

#!/usr/bin/env python2
#coding:utf-8
import dns.resolver
domain = raw_input(请输入域名:)
ns = dns.resolver.query(domain,NS)
for i in ns.response.answer:
    for j in i.items:
        print j.to_text()

执行结果:

[[email protected] ~]# python2 /home/test/dnspython/simple3.py
请输入域名:baidu.com
dns.baidu.com.
ns2.baidu.com.
ns7.baidu.com.
ns3.baidu.com.
ns4.baidu.com.

 

4.CNAME记录

[[email protected] dnspython]# cat simple4.py 
#!/usr/bin/env python2
#coding:utf-8
import dns.resolver
domain = raw_input(请输入域名:)
cname = dns.resolver.query(domain,CNAME)
for i in cname.response.answer:
    for j in i.items:
        print j.to_text()

 



以上是关于DNS处理模块dnspython的主要内容,如果未能解决你的问题,请参考以下文章

DNS处理模块dnspython

python -- DNS处理模块dnspython

Python学习笔记-DNS处理模块dnspython

dns处理模块dnspython

DNS模块dnspython应用及业务监控示例

Python自动化运维:DNS域名轮循业务监控(IP地址处理模块IPy和DNS处理模块dnspython)