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

  

posted @   番茄土豆西红柿  阅读(19381)  评论(1编辑  收藏  举报
编辑推荐:
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
阅读排行:
· 几个技巧,教你去除文章的 AI 味!
· 系统高可用的 10 条军规
· 对象命名为何需要避免'-er'和'-or'后缀
· 关于普通程序员该如何参与AI学习的三个建议以及自己的实践
· AI与.NET技术实操系列(八):使用Catalyst进行自然语言处理
TOP
点击右上角即可分享
微信分享提示