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

时间:2025-04-06 08:22:18
DNS处理模块dnspython

wget /kits/1.9.4/dnspython-1.9.
tar -zxvf dnspython-1.9.
cd dnspython-1.9.
python 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
domain = raw_input( 'Please input an domain: ' )
A = (domain , 'A' )
for i in :
for j in :
print

MX记录查询(注意输入域名不包括www)
#!/usr/bin/env python
import
domain = raw_input( 'Please input an domain: ' )
MX = (domain , 'MX' )
for i in MX:
print 'MX preference =' , , 'mail exchanger =' ,

NS记录查询
#!/usr/bin/env python
import
domain = raw_input( 'Please input an domain: ' )
ns = (domain , 'NS' )
for i in :
for j in :
print j.to_text()

CNAME记录查询
#!/usr/bin/env python
import
domain = raw_input( 'Please input an domain: ' )
cname = (domain , 'CNAME' )
for i in :
for j in :
print j.to_text()

DNS域名轮询业务监控
#!/usr/bin/python
# coding=UTF-8 #加入该行,否则因中文注释的存在将报错“ '\xe5' in file
import
import os
import httplib
iplist=[] #定义域名IP列表变量
appdomain= "" #定义业务域名
def get_iplist (domain= "" ): #域名解析函数,解析成功IP将追加到iplist
try :
A = (domain , 'A' ) #解析A记录类型
except Exception , e:
print "dns resolver error:" +str(e)
return
for i in :
for j in :
() #追加到iplist
return True
def checkip (ip):
checkurl=ip+ ":80"
getcontent= ""
( 5 ) #定义http连接超时时间(5秒)
conn=(checkurl) #创建http连接对象
try :
( "GET" , "/" , headers = { "Host" : appdomain}) #发起URL请求,添加host主机头
r=()
getcontent =( 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 /kits/1.9.4/dnspython-1.9.
tar -zxvf dnspython-1.9.
cd dnspython-1.9.
python 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
domain = raw_input( 'Please input an domain: ' )
A = (domain , 'A' )
for i in :
for j in :
print

MX记录查询(注意输入域名不包括www)
#!/usr/bin/env python
import
domain = raw_input( 'Please input an domain: ' )
MX = (domain , 'MX' )
for i in MX:
print 'MX preference =' , , 'mail exchanger =' ,

NS记录查询
#!/usr/bin/env python
import
domain = raw_input( 'Please input an domain: ' )
ns = (domain , 'NS' )
for i in :
for j in :
print j.to_text()

CNAME记录查询
#!/usr/bin/env python
import
domain = raw_input( 'Please input an domain: ' )
cname = (domain , 'CNAME' )
for i in :
for j in :
print j.to_text()

DNS域名轮询业务监控
#!/usr/bin/python
# coding=UTF-8 #加入该行,否则因中文注释的存在将报错“ '\xe5' in file
import
import os
import httplib
iplist=[] #定义域名IP列表变量
appdomain= "" #定义业务域名
def get_iplist (domain= "" ): #域名解析函数,解析成功IP将追加到iplist
try :
A = (domain , 'A' ) #解析A记录类型
except Exception , e:
print "dns resolver error:" +str(e)
return
for i in :
for j in :
() #追加到iplist
return True
def checkip (ip):
checkurl=ip+ ":80"
getcontent= ""
( 5 ) #定义http连接超时时间(5秒)
conn=(checkurl) #创建http连接对象
try :
( "GET" , "/" , headers = { "Host" : appdomain}) #发起URL请求,添加host主机头
r=()
getcontent =( 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."