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

柔光的暖阳◎ 2022-05-28 00:11 290阅读 0赞

DNS处理模块dnspython

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.tar.gz

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

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.tar.gz

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.”

发表评论

表情:
评论列表 (有 0 条评论,290人围观)

还没有评论,来说两句吧...

相关阅读