dnspython(http://www.dnspython.org/)是Python实现的DNS工具包,它支持几乎所有的记录类型,可以用于查询、传输并动态更新ZONE信息,同时支持TSIG(事务签名)验证消息和EDNS0(扩展DNS)。在系统管理方面,可以利用其查询功能来实现DNS服务监控以及解析结果的校验,可以代替nslookup及dig等工具,轻松做到与现有平台的整合。
源码安装
模块域名解析方法详解
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资源的类型,常用的有以下几种:
rdclass参数用于指定网络类型,可选的值有IN、CH与HS,其中IN为默认,使用最广泛。tcp参数用于指定查询是否启用TCP协议,默认为False(不启用)。source与source_port参数作为指定查询源地址与端口,默认值为查询设备IP地址和0。raise_on_no_answer参数用于指定当查询无应答时是否触发异常,默认为True。
常用解析类型示例说明
利用dnspython的dns.resolver.query方法可以简单实现这些DNS类型(A、MX、NS、CNAME等)的查询。
DNS域名轮询业务监控
大部分的DNS解析都是一个域名对应一个IP地址,但是通过DNS轮询技术可以做到一个域名对应多个IP,从而实现最简单且高效的负载平衡,不过此方案最大的弊端是目标主机不可用时无法自动剔除,因此做好业务主机的服务可用监控至关重要。本实例通过分析当前域名的解析IP,再结合服务端口探测来实现自动监控,在域名解析中添加、删除IP时,无须对监控脚本进行更改。
1 实现域名解析,获取域名所有的A记录解析IP列表;对IP列表进行HTTP级别的探测。
2 第一步通过dns.resolver.query()方法获取业务域名A记录信息,查询出所有IP地址列表,再使用httplib模块的request()方法以GET方式请求监控页面,监控业务所有服务的IP是否服务正常。