我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python3之DNS处理模块dnspy

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python3之DNS处理模块dnspy

dnspython(http://www.dnspython.org/)是Python实现的一个DNS工具包,它支持几乎所有的记录类型,可以用于查询、传输并动态更新ZONE信息,同时支持TSIG(事务签名)验证消息和EDNS0(扩展DNS)。在系统管理方面,我们可以利用其查询功能来实现DNS服务监控以及解析结果的校验,可以代替nslookup及dig等工具,轻松做到与现有平台的整合。
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资源的类型,常用的有以下几种:
A记录,将主机名转换成IP地址;
MX记录,邮件交换记录,定义邮件服务器的域名;
CNAME记录,指别名记录,实现域名间的映射;
NS记录,标记区域的域名服务器及授权子域;
PTR记录,反向解析,与A记录相反,将IP转换成主机名;
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类型的查询,为后面要实现的功能提供数据来源,比如对一个使用DNS轮循业务的域名进行可用性监控,需要得到当前的解析结果。下面一一进行介绍。

import dns.resolver
domain = input('请输入域名地址')
请输入域名地址www.baidu.com
# (1) A记录, 将主机转换为IP地址
A= dns.resolver.query(domain,'A')
for i in A.response.answer:
    for j in i.items:
        if j.rdtype == 1:
            print (j.address)
print(A)
print(i)
print(i.items)
print(j)
print(j.rdtype)
print(j.address)
print( A.response.answer)
print(dns.resolver.query('www.baidu.com','A'))
220.181.112.244
220.181.111.188
<dns.resolver.Answer object at 0x7f1b2013b940>
www.a.shifen.com. 138 IN A 220.181.112.244
www.a.shifen.com. 138 IN A 220.181.111.188
[<DNS IN A rdata: 220.181.112.244>, <DNS IN A rdata: 220.181.111.188>]
220.181.111.188
1
220.181.111.188
[<DNS www.baidu.com. IN CNAME RRset>, <DNS www.a.shifen.com. IN A RRset>]
<dns.resolver.Answer object at 0x7f1b201fcc88>
# 简化
A= dns.resolver.query(domain,'A')
for i in A.response.answer:
    for j in i:
         if j.rdtype == 1:
                print (j)
123.125.115.110
220.181.57.216
# (2)MX记录 (邮件交换记录,定义邮件服务器的域名)
mx= dns.resolver.query('163.com','MX')
for i in mx.response.answer:
    for j in i:
        print (j)     
10 163mx01.mxmail.netease.com.
10 163mx02.mxmail.netease.com.
10 163mx03.mxmail.netease.com.
50 163mx00.mxmail.netease.com.
# (3)ns 记录 (标记区域的域名服务器及授权子域) 只限输入一级域名
ns= dns.resolver.query('baidu.com','NS')
for i in ns.response.answer:
    for j in i:
        print (j)              
ns7.baidu.com.
ns2.baidu.com.
ns3.baidu.com.
ns4.baidu.com.
dns.baidu.com.
# (4) CNAME记录 (指别名记录,实现域名间的映射)
cname= dns.resolver.query('www.uwintech.cn','CNAME')
for i in cname.response.answer:
    for j in i:
        print (j)     
www.uwintech.cn.s.sxldns.com.
def dns_query(domain,type):
    try:
        A=dns.resolver.query(domain,type)
        for i in A.response.answer:
            for j in i:
                print (j)
    except dns.resolver.NoAnswer:
        print(domain+' 此域名,DNS未响应!')

dns_query('baidu.com','NS')
dns_query('baidu.com','A')
dns_query('163.com','MX')
dns_query('163.com','CNAME')
dns_query('www.uwintech.cn','CNAME')
ns4.baidu.com.
dns.baidu.com.
ns7.baidu.com.
ns2.baidu.com.
ns3.baidu.com.
220.181.57.216
123.125.115.110
10 163mx02.mxmail.netease.com.
10 163mx03.mxmail.netease.com.
50 163mx00.mxmail.netease.com.
10 163mx01.mxmail.netease.com.
163.com 此域名,DNS未响应!
www.uwintech.cn.s.sxldns.com.
#!/usr/bin/env python
import dns.resolver

domain = raw_input('Please input an domain: ')    #输入域名地址
A = dns.resolver.query(domain, 'A')    #指定查询类型为A记录
for i in A.response.answer:    #通过response.answer方法获取查询回应信息
    for j in i.items: #遍历回应信息
            if j.rdtype == 1: 
                print j.address 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python3之DNS处理模块dnspy

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python3之DNS处理模块dnspy

dnspython(http://www.dnspython.org/)是Python实现的一个DNS工具包,它支持几乎所有的记录类型,可以用于查询、传输并动态更新ZONE信息,同时支持TSIG(事务签名)验证消息和EDNS0(扩展DNS)
2023-01-31

Python3之模块、包

一、模块1.模块的导入方式import random,time#导入多个模块#使用,如:random.randint(1,10)#使用,如:time.sleep(1)from random import randint#使用,如:randi
2023-01-31

nodejs之域名解析模块DNS的简介

这篇文章将为大家详细讲解有关nodejs之域名解析模块DNS的简介,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。工作原理  打开浏览器,在上方地址栏输入网址的那一刻,这个回车按了之后,发生了很多事情。首先
2023-06-06

Python之异常处理、模块与包

MarkdownPad Document程序中错误分成两种语法错误:过不了Python解释器逻辑错误异常处理什么是异常处理Python解释器检测到错误,触发异常,在发生异常时捕捉异常,如果捕捉成功则进入另外一个处理分支,是程序不会崩溃,这就
2023-01-31

ASP.NET的HTTP模块和处理程序之HTTP模块怎么用

这篇文章给大家分享的是有关ASP.NET的HTTP模块和处理程序之HTTP模块怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在配置文件中注册HTTP模块当我们建立了HTTP模块并把它复制到Web应用程序的b
2023-06-17

深入理解Python3中的http.client模块

http 模块简介 Python3 中的 http 包中含有几个用来开发 HTTP 协议的模块。http.client 是一个底层的 HTTP 协议客户端,被更高层的 urllib.request 模块所使用。http.server 包含基
2022-06-04

python日志处理模块

1 日志级别日志级别level数值CRITICAL50ERROR40WARNING30 ,默认日志级别INFO20DEBUG10NOTSET0,表示不设置日志级别是指产生日志的严重程度设置一个级别后,严重程度低于次级别的日志消息将会被忽略数
2023-01-31

Python Excel数据处理之xlrd/xlwt/xlutils模块详解

在复杂的Excel业务数据处理中,三兄弟扮演的角色缺一不可。如何能够使用xlrd/xlwt/xlutils三个模块来实现数据处理就是今天的内容,希望对大家有所帮助
2023-03-21

Python之日期与时间处理模块(date和datetime)

前言 在开发工作中,我们经常需要用到日期与时间,如:作为日志信息的内容输出计算某个功能的执行时间用日期命名一个日志文件的名称记录或展示某文章的发布或修改时间其他Python中提供了多个用于对日期和时间进行操作的内置模块:time模块、dat
2022-06-04

Node.js怎么处理ES6模块

这篇文章将为大家详细讲解有关Node.js怎么处理ES6模块,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、两种模块的差异ES6 模块和 CommonJS 模块有很大的差异。语法上面,CommonJS
2023-06-15

Node.js 日志处理模块log4js

log4js 是 Node.js 日志处理中的数一数二的模块。比起 console 或者 TJ 的 debug 有其优势,尤其针对投入生产的 Node.js 项目来说下面这些是不可少的:日志分级日志分类日志落盘本文将会给你一个 log4js
2022-06-04

JSP(12) - 商品处理模块

该模块基本上为 进货模块(http://blog.itpub.net/post/334/32287)的反过程。[@more@]dispose_bef.jsp:response.setHeader("Cache-Control","no-st
2023-06-03

深入理解node.js之path模块

node之path模块//引用该模块 var path = require("path");1、路径解析,得到规范化的路径格式//对window系统,目录分隔为'', 对于UNIX系统,分隔符为'/',针对'..'返回上一级;/与\都被统一
2022-06-04

python的datetime模块处理时

python的datetime模块主要用来处理时间,里面包含很多类,包括timedelay,date,time,datetime等开发中经常会用到模块里面的datetime类,这是一个表示日期时间的类。1.创建一个新的datetime对象I
2023-01-30

Python中time模块与datetime模块在使用中的不同之处

Python 中提供了对时间日期的多种多样的处理方式,主要是在 time 和 datetime 这两个模块里。今天稍微梳理一下这两个模块在使用上的一些区别和联系。 time 在 Python 文档里,time是归类在Generic Oper
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录