Python自动化运维——DNS处理模块
Posted Infi_chu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python自动化运维——DNS处理模块相关的知识,希望对你有一定的参考价值。
Infi-chu:
http://www.cnblogs.com/Infi-chu/
模块:dnspython
功能:
- 支持所有的记录类型
- 可以用于查询、传输并动态更新ZONE信息
- 支持TSIG(事务签名)验证消息和EDNS0(扩展DNS)
安装:
wget http://www.dnspython.org/kits/1.9.4/dnspython-1.9.4.tar.gz tar -zxvf dnspython-1.9.4.tar.gz cd dnspython-1.9.4 python setup.py install
模块域名解析方法:
dnspython提供一个DNS解析器类——resolver,使用query()方法来实现域名的查询功能
Query()方法使用:
#import dns.resolver #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,默认为IN
- CH,
- HS,
tcp用于指定查询是否启用TCP协议
source和source_port指定查询源地址与端口,默认查询设备IP和0
raise_on_no_answer用于指定当查询无应答时,是否触发异常,默认为True
A记录查询方法:
#import dns.resolver #dom=raw_input(\'输入域名地址:\') #A=dns.resolver.query(dom,\'A\') # 指定查询类型为A的记录 #for a in A.response.answer: # 通过response.answer方法获取查询回应信息 # for b in a.items: # 遍历回应信息 # print(b.address)
MX记录查询方法:
#import dns.resolver #dom=raw_input(\'输入域名地址:\') #MX=dns.resolver.query(dom,\'MX\') #for a in MX: # print(\'MX 优先权:\',a.preference,\'mail 交换器:\',a.exchange)
NS记录查询方法:
#import dns.resolver #dom=raw_input(\'输入一级域名地址:\') #NS=dns.resolver.query(dom,\'NS\') #for a in NS.respinse.answer: # for b in a.items: # print(b.to_text())
CNAME记录查询方法:
#import dns.resolver #dom=raw_input(\'输入域名地址:\') #cname=dns.resolver.query(dom,\'CNAME\') #for a in cname.response.answer: # for b in a.items: # print(b.to_text())
DNS域名轮询业务监控:
步骤:
- 实现域名的解析,获取域名所有的A记录解析IP列表
- 对IP列表进行HTTP级别的探测
实现:
#import dns.resolver #import os #import httplib #ip_list=[] # 定义域名的IP列表 #dom=raw_input(\'输入域名:\') #def get_ip_list(dom=\'\'): # try: # A=dns.resolver.query(dom,\'A\') #解析A记录类型 # except Exception,e: # print(\'DNS解析错误:\',str(e)) # return # for a in A.response.answer: # for b in a.items: # ip_list.append(b.address) # 添加到IP列表 #def checkip(ip): # checkurl=ip+\':80\' # getcontent=\'\' # httplib.socket.setdefaulttimeout(10) # 定义http连接超时时间,10s # conn=httplib.HTTPConnection(checkurl) # 创建http连接对象 # try: # conn.request(\'GET\',\'/\',headers={\'HOST\':dom}) # 发起URL请求,添加host主机头 # r=conn.getresponse() # getcontent=r.read(15) # 获取URL页面前的15个字符,以便做可用性校验 # finally: # if getcontent==\'<!doctype html>\': # 监控URL页的内容一般是事先定义好的 # print(ip+\'[OK]\') # else: # print(ip+\'[error]\') #if __name__="__main__": # if get_ip_list(dom) and len(ip_list)>0: #域名解析正确,且IP列表有数据 # for a in ip_list: # print(a) # else: # print(\'DNS 解析错误\')
以上是关于Python自动化运维——DNS处理模块的主要内容,如果未能解决你的问题,请参考以下文章