您的位置:首页 > 编程语言 > Python开发

python笔记系列:DNS处理模块dnspython

2018-04-04 09:25 513 查看
DNS处理模块dnspython
wget http://www.dnspython.org/kits/1.9.4/dnspython-1.9.4.tar.gztar -zxvf dnspython-1.9.4.tar.gzcd dnspython-1.9.4.tar.gzpython setup.py install
dnspython提供的DNS解析器类:resolver,其query方法可实现域名查询,方法定义如下:query(self,qname,rdtype=1,rdclass=1,tcp=False,source=None,raise_on_no_answer=True,source_port=0)qname 为域名,rdtype指定RR资源的类型,常用的如下:A 主机名换成IPMX 邮件交换记录,定义邮件服务器的域名CNAME 别名记录,实现域名间的映射NS 标记区域的域名服务器及授权子域PTR 反向解析,与A记录相反SOA SOA标记,一个起始授权区的定义rdclass 指定网络类型,可选IN(默认)、CH、HStcp 是否启用TCP协议,默认False(不启用)source 源地址,默认查询设备IPsource_port 源地址端口,默认0raise_on_no_answer 指定查询无应答时是否触发异常,默认True
A记录查询#!/usr/bin/env pythonimport dns.resolverdomain = 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
MX记录查询(注意输入域名不包括www)#!/usr/bin/env pythonimport dns.resolverdomain = 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
NS记录查询#!/usr/bin/env pythonimport dns.resolverdomain = 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()
CNAME记录查询#!/usr/bin/env pythonimport dns.resolverdomain = raw_input('Please input an domain: ')cname = dns.resolver.query(domain, 'CNAME')for i in cname.response.answer: for j in i.items: print j.to_text()
DNS域名轮询业务监控#!/usr/bin/python# coding=UTF-8 #加入该行,否则因中文注释的存在将报错“'\xe5' in file”import dns.resolverimport osimport httplibiplist=[] #定义域名IP列表变量appdomain="www.google.com.hk" #定义业务域名def get_iplist(domain=""): #域名解析函数,解析成功IP将追加到iplist try: A = dns.resolver.query(domain, 'A') #解析A记录类型 except Exception,e: print "dns resolver error:"+str(e) return for i in A.response.answer: for j in i.items: iplist.append(j.address) #追加到iplist return Truedef checkip(ip): checkurl=ip+":80" getcontent="" httplib.socket.setdefaulttimeout(5) #定义http连接超时时间(5秒) conn=httplib.HTTPConnection(checkurl) #创建http连接对象 try: conn.request("GET", "/",headers = {"Host": appdomain}) #发起URL请求,添加host主机头 r=conn.getresponse() getcontent =r.read(15) #获取URL页面前15个字符,以便做可用性校验 finally: if getcontent=="<!doctype html>": #监控URL页的内容一般是事先定义好,比如“HTTP200”等 print ip+" [OK]" else: print ip+" [Error]" #此处可放告警程序,可以是邮件、短信通知if __name__=="__main__": if get_iplist(appdomain) and len(iplist)>0: #条件:域名解析正确且至少要返回一个IP for ip in iplist: checkip(ip) else: print "dns resolver error."
DNS处理模块dnspython
wget http://www.dnspython.org/kits/1.9.4/dnspython-1.9.4.tar.gztar -zxvf dnspython-1.9.4.tar.gzcd dnspython-1.9.4.tar.gzpython setup.py install
dnspython提供的DNS解析器类:resolver,其query方法可实现域名查询,方法定义如下:query(self,qname,rdtype=1,rdclass=1,tcp=False,source=None,raise_on_no_answer=True,source_port=0)qname 为域名,rdtype指定RR资源的类型,常用的如下:A 主机名换成IPMX 邮件交换记录,定义邮件服务器的域名CNAME 别名记录,实现域名间的映射NS 标记区域的域名服务器及授权子域PTR 反向解析,与A记录相反SOA SOA标记,一个起始授权区的定义rdclass 指定网络类型,可选IN(默认)、CH、HStcp 是否启用TCP协议,默认False(不启用)source 源地址,默认查询设备IPsource_port 源地址端口,默认0raise_on_no_answer 指定查询无应答时是否触发异常,默认True
A记录查询#!/usr/bin/env pythonimport dns.resolverdomain = 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
MX记录查询(注意输入域名不包括www)#!/usr/bin/env pythonimport dns.resolverdomain = 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
NS记录查询#!/usr/bin/env pythonimport dns.resolverdomain = 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()
CNAME记录查询#!/usr/bin/env pythonimport dns.resolverdomain = raw_input('Please input an domain: ')cname = dns.resolver.query(domain, 'CNAME')for i in cname.response.answer: for j in i.items: print j.to_text()
DNS域名轮询业务监控#!/usr/bin/python# coding=UTF-8 #加入该行,否则因中文注释的存在将报错“'\xe5' in file”import dns.resolverimport osimport httplibiplist=[] #定义域名IP列表变量appdomain="www.google.com.hk" #定义业务域名def get_iplist(domain=""): #域名解析函数,解析成功IP将追加到iplist try: A = dns.resolver.query(domain, 'A') #解析A记录类型 except Exception,e: print "dns resolver error:"+str(e) return for i in A.response.answer: for j in i.items: iplist.append(j.address) #追加到iplist return Truedef checkip(ip): checkurl=ip+":80" getcontent="" httplib.socket.setdefaulttimeout(5) #定义http连接超时时间(5秒) conn=httplib.HTTPConnection(checkurl) #创建http连接对象 try: conn.request("GET", "/",headers = {"Host": appdomain}) #发起URL请求,添加host主机头 r=conn.getresponse() getcontent =r.read(15) #获取URL页面前15个字符,以便做可用性校验 finally: if getcontent=="<!doctype html>": #监控URL页的内容一般是事先定义好,比如“HTTP200”等 print ip+" [OK]" else: print ip+" [Error]" #此处可放告警程序,可以是邮件、短信通知if __name__=="__main__": if get_iplist(appdomain) and len(iplist)>0: #条件:域名解析正确且至少要返回一个IP for ip in iplist: checkip(ip) else: print "dns resolver error."
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python dnspython