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

    dnspython是python实现的一个DNS工具包,它支持几乎所有的记录类型。

    可以用于查询、传输并动态更新ZONE信息,同时支持TSIG(事务签名)验证消息和EDNS0(扩展DNS)。

    在系统管理方面,我们可以利用其查询功能来实现DNS服务监控以及解析结果的校验。

    一、模块域名解析方法

    dnspython模块提供了大量的DNS处理方法,最常用的方法是域名查询。

    dnspython提供了一个DNS解析器类——resolver,使用它的query方法来实现域名的查询功能。query方法的定义如下:

    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参数用于指定网路类型,可选的值有IN、CH与HS,其中IN为默认,使用最广泛。

    tcp参数用于指定查询是否启用TCP协议,默认为False(不起用)。

    source与source_port参数作为指定查询源地址与端口,默认值为查询设备IP和0。

    raise_on_no_answer参数用于指定当查询无应答时是否触发异常,默认为True。

    二、常见解析类型实例说明

    常见的DNS解析类型包括A、MX、NS、CNAME等。

    利用dnspython的dns.resolver.query方法可以简单实现这些DNS类型的查询,为后面要实现的功能提供数据来源。

    1.A记录

    #!/usr/bin/env python2
    #coding:utf-8
    import dns.resolver
    domain = raw_input('请输入域名:')
    A = dns.resolver.query(domain,'A')  #指定查询类型
    for i in A.response.answer:  #获取查询信息
        for j in i.items:  #遍历回应信息
            print j.address

    执行结果:

    [root@7 ~]# python2 /home/test/dnspython/simple.py
    请输入域名:www.google.com
    74.86.17.48

    2.MX记录

    #!/usr/bin/env python2
    #coding:utf-8
    import dns.resolver
    domain = raw_input('请输入域名:')
    MX = dns.resolver.query(domain,'MX')
    for i in MX:
        print 'MX preference=',i.preference, 'mail exchanger=',i.exchange

    执行结果:

    [root@7 ~]# python2 /home/test/dnspython/simple2.py
    请输入域名:163.com
    MX preference= 10 mail exchanger= 163mx01.mxmail.netease.com.
    MX preference= 10 mail exchanger= 163mx02.mxmail.netease.com.
    MX preference= 50 mail exchanger= 163mx00.mxmail.netease.com.
    MX preference= 10 mail exchanger= 163mx03.mxmail.netease.com.

    3.NS记录

    #!/usr/bin/env python2
    #coding:utf-8
    import dns.resolver
    domain = raw_input('请输入域名:')
    ns = dns.resolver.query(domain,'NS')
    for i in ns.response.answer:
        for j in i.items:
            print j.to_text()

    执行结果:

    [root@7 ~]# python2 /home/test/dnspython/simple3.py
    请输入域名:baidu.com
    dns.baidu.com.
    ns2.baidu.com.
    ns7.baidu.com.
    ns3.baidu.com.
    ns4.baidu.com.

    4.CNAME记录

    [root@7 dnspython]# cat simple4.py 
    #!/usr/bin/env python2
    #coding:utf-8
    import dns.resolver
    domain = raw_input('请输入域名:')
    cname = dns.resolver.query(domain,'CNAME')
    for i in cname.response.answer:
        for j in i.items:
            print j.to_text()
  • 相关阅读:
    哈希算法(Hash Algorithm)初探
    一本计划中的WPF图书目录
    php中关于mysqli和mysql区别的一些知识点整理
    PHP Plurk Api基�教�(一)
    Wordpress 去除重复评论限制
    [share]PDO操作MySql类
    PHP处理文件(转载)
    PHP 取得某天前后N天的日期
    源码搭建LAMP服务器
    PHP ��/日期操作��
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7954338.html
Copyright © 2011-2022 走看看