Python自动化运维——DNS处理模块

本文详细介绍了dnspython模块的功能和使用方法,包括模块的安装、域名解析方法、各种记录类型的查询,如A记录、MX记录等,以及DNS域名轮询业务监控的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块: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 解析错误')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值