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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40809549/article/details/79697312
DNS处理模块dnspython

python 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 主机名换成IP
MX 邮件交换记录,定义邮件服务器的域名
CNAME 别名记录,实现域名间的映射
NS 标记区域的域名服务器及授权子域
PTR 反向解析,与A记录相反
SOA SOA标记,一个起始授权区的定义
rdclass 指定网络类型,可选IN(默认)、CH、HS
tcp 是否启用TCP协议,默认False(不启用)
source 源地址,默认查询设备IP
source_port 源地址端口,默认0
raise_on_no_answer 指定查询无应答时是否触发异常,默认True

A记录查询
#!/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

MX记录查询(注意输入域名不包括www)
#!/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

NS记录查询
#!/usr/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()

CNAME记录查询
#!/usr/bin/env python
import dns.resolver
domain = 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.resolver
import os
import httplib
iplist=[] #定义域名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 True
def 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

python 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 主机名换成IP
MX 邮件交换记录,定义邮件服务器的域名
CNAME 别名记录,实现域名间的映射
NS 标记区域的域名服务器及授权子域
PTR 反向解析,与A记录相反
SOA SOA标记,一个起始授权区的定义
rdclass 指定网络类型,可选IN(默认)、CH、HS
tcp 是否启用TCP协议,默认False(不启用)
source 源地址,默认查询设备IP
source_port 源地址端口,默认0
raise_on_no_answer 指定查询无应答时是否触发异常,默认True

A记录查询
#!/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

MX记录查询(注意输入域名不包括www)
#!/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

NS记录查询
#!/usr/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()

CNAME记录查询
#!/usr/bin/env python
import dns.resolver
domain = 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.resolver
import os
import httplib
iplist=[] #定义域名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 True
def 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."

展开阅读全文

没有更多推荐了,返回首页