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


    Infi-chu:

    http://www.cnblogs.com/Infi-chu/

    模块:dnspython

    功能:

    1. 支持所有的记录类型
    2. 可以用于查询、传输并动态更新ZONE信息
    3. 支持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资源的类型,常用的有如下几种:

    1. A记录,将主机名转换成IP地址
    2. MX记录,邮件交换记录,用于定义邮件服务器的域名
    3. CNAME记录,别名记录,实现域名间的映射
    4. NS记录,标记区域的域名服务器及授权子域
    5. PTR记录,反向解析,与A记录相反,将IP转换成主机名
    6. SOA记录,SOA标记,一个起始授权区的定义

    rdclass用于指定网络类型,可选的值有:

    1. IN,默认为IN
    2. CH,
    3. 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域名轮询业务监控:

    步骤:

    1. 实现域名的解析,获取域名所有的A记录解析IP列表
    2. 对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 解析错误')
    
  • 相关阅读:
    git命令
    深度剖析Apache Dubbo核心技术内幕学习笔记
    MyBatis-Plus简介
    Mysql主从复制原理
    springboot启动原理
    布隆过滤器
    java poi生成的excel发送邮件后无法预览
    Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!
    javacv FFmpeg 视频压缩
    .NetCore之接口缓存
  • 原文地址:https://www.cnblogs.com/Infi-chu/p/8016304.html
Copyright © 2020-2023  润新知