zoukankan      html  css  js  c++  java
  • python -- DNS处理模块dnspython

    简介

    dnspython – 是python实现的一个DNS工具包,利用其查询功能来实现dns的服务监控及解析结果的校验

    安装dnspython

    pip install dnspython

    使用

    常见的DNS解析类型包括A、MX、NS、CNAME 
    (1)A记录的查询,实例如下:

    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

    运行输入:www.baidu.com,输出结果如下: 
    这里写图片描述

    (2)MX记录

    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

    运行输入:163.com,输出结果如下: 
    这里写图片描述

    (3)NS记录

    print '*************NS****************'
    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()

    输入:baidu.com,输出结果如下:

    这里写图片描述 
    注意:只限输入一级域名,若输入www.baidu.com是错误的

    (4)CNAME记录

    print '****************CNAME****************'
    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()

    输入:www.baidu.com,输出结果如下: 
    这里写图片描述

    一个综合的例子:

    import dns.resolver
    import httplib
    
    iplist = []  # 定义域名IP列表变量
    # appdomain = "www.google.com.hk"  # 定义业务域名
    appdomain = "www.baidu.com"  # 定义业务域名
    
    # 域名解析函数,解析成功IP将追加到iplist
    def get_iplist(domain=""):
        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.lower() == "<!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."
    

      

  • 相关阅读:
    实验一、词法分析实验
    词法分析程序新
    词法分析程序
    我对编译原理的理解
    Unity3d数据存储 PlayerPrefs,XML,Json数据的存储与解析
    Unity3d网络总结(三) 封装Socket创建简单网络
    Unity3d网络总结(二)使用NetWorking代码搭建简单的网络模块
    Unity3d网络总结(一) NetWork组件使用
    Unity加载AB包
    unity编辑器拓展
  • 原文地址:https://www.cnblogs.com/robinunix/p/8434761.html
Copyright © 2011-2022 走看看