Python的dnspython库使用指南

  因为平时在测试DNS的时候有些操作手动完成不方便,所以需要用到脚本,而在Python里dnspython这个用于DNS操作的库十分强大,但是无奈网上大部分资料只列举了少部分的用法,所以记录一下我平时使用到的功能,基本上已经能应付大部分的使用场景了。想具体了解dnspython可以登录官方网站阅读使用文档.

常用工具

最常用的用法是调用默认的resolver发送解析请求,如

from dns import resolverans = resolver.query("www.baidu.com", "A")
print("qname:",ans.qname)
print ("reclass:",ans.rdclass)
print ("rdtype:",ans.rdtype)
print ("rrset:",ans.rrset)
print ("response:",ans.response)

结果为

('qname:', <DNS name www.baidu.com.>)
('reclass:', 1)
('rdtype:', 1)
('rrset:', <DNS www.a.shifen.com. IN A RRset>)
('response:', <DNS message, ID 64940>)

  在这里解析任务默认发送给系统默认的dns服务器,其中比较重要的是response,在dnspython的官方文档里,response属于类dns.message.Message,这个类也是许多DNS query请求的返回结果,下面详细介绍下这个类。

类的主要成员变量有:

int flags   #The DNS flags of the message.
int id    #The query id; the default is a randomly chosen id.
list of RRset addictional
list of RRset answer
list of RRset authority

  flags属于返回DNS报文的标志位(详见《TCP/IP详解(卷一)》关于DNS的部分),可以利用以下代码打印DNS报文的各个标志位:

#!/bin/env python2.7
ans = resolver.query("www.baidu.com", "A")def FlagCount(flags, pos):if (flags/(2**pos))%2 == 1:return Trueelse:return Falsedef GetFlags(flags):QR_pos = 15AA_pos = 10TC_pos = 9RD_pos = 8RA_pos = 7QR_flag = FlagCount(flags, QR_pos)AA_flag = FlagCount(flags, AA_pos)TC_flag = FlagCount(flags, TC_pos)RD_flag = FlagCount(flags, RD_pos)RA_flag = FlagCount(flags, RA_pos)flag_dic = {"QR":QR_flag, "AA":AA_flag, "TC":TC_flag, "RD":RD_flag, "RA":RA_flag}print "flag:",for flag in flag_dic:if flag_dic[flag]:print flag,flags = ans.response.flagsGetFlags(flags)

返回结果为:

flag: AA RD QR RA

  另外一个比较重要的类就是RRset,通常返回的三个section信息都使用这个类封装,常用的用法是使用类函数to_text()令解析结果以字符串形式显示。如:

ans = resolver.query("www.baidu.com", "A")
for i in ans.response.answer:print i.to_text()

结果为:

www.baidu.com. 1200 IN CNAME www.a.shifen.com.
www.a.shifen.com. 119 IN A 220.181.112.244
www.a.shifen.com. 119 IN A 220.181.111.188

 

使用实例:

A记录查询

#!/usr/bin/env python
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

 

MX记录查询(注意输入域名不包括www)

#!/usr/bin/env python
import dns.resolver
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

 

NS记录查询

#!/usr/bin/env python
import dns.resolver
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()

 

CNAME记录查询

#!/usr/bin/env python
import dns.resolver
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()

 

转载于:https://www.cnblogs.com/yyxianren/p/10757079.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 42 接雨水 单调栈

接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图&#xff0c;在这种情况下&#xff0c;可以接 6 个单位的雨水&#xff08;蓝色部分表示雨水…

第十八期:网页禁止复制粘贴怎么办?教你六招轻松搞定

经常在网上遇到一些无法复制的文章&#xff0c;那么问题来了&#xff0c;有什么办法可以绕开这种限制&#xff0c;将网页内容轻松下载回来呢&#xff1f; 经常在网上遇到一些无法复制的文章&#xff0c;那么问题来了&#xff0c;有什么办法可以绕开这种限制&#xff0c;将网页内…

[Leetcode][第99题][JAVA][恢复二叉搜索树][中序遍历]

【问题描述】[困难] 【解答思路】 1. 显示中序遍历 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(N) class Solution {public void recoverTree(TreeNode root) {List<Integer> nums new ArrayList<Integer>();inorder(root, nums);int[] swapped find…

复盘二进制的习题(2)

338 Counting Bits。输入一个整数n&#xff0c;对于 0 ≤ i ≤ num&#xff0c;计算每个数的二进制1的个数。例如&#xff1a;num 5 返回 [0,1,1,2,1,2]。希望能在O(n)的时间内完成。这里有动态规划的思想。 思路一&#xff1a; 十进制数二进制表示0000010011(0的bits)20101…

c#XML的基本使用

创建XML文档 static void Main(string[] args){//1.引入命名空间//2.创建XML文档对象XmlDocument xmldoc new XmlDocument();//3.创建第一行描述信息&#xff0c;添加到xmldoc文档中XmlDeclaration xmldec xmldoc.CreateXmlDeclaration("1.0", "utf-8", …

第四十一期:深度解析5G核心网建设难点和挑战

目前核心网处于架构转型和业务转型的关键期。在架构层面&#xff0c;NFV、CU分离、边缘计算等技术的成熟推动核心网络架构转型&#xff0c;控制面进一步集中&#xff0c;转发面进一步下沉。 目前核心网处于架构转型和业务转型的关键期。在架构层面&#xff0c;NFV、CU分离、边缘…

linux 进入一个中文乱码的目录的方法

bash命令&#xff1a;cd ls | awk NRxxx awk命令&#xff1a;获取第xxx行的目录名称&#xff0c;加上NR表示从第一行开始读的行号取 NR已经读出的记录数&#xff0c;就是行号&#xff0c;从1开始 用|把ls的结果传给后面的awk命令&#xff0c;连接上前面的cd就能进入啦 导引号…

[Leetcode][第696题][JAVA][计算二进制子串][分组]

【问题描述】[简单] 【解答思路】 1. 按字符分组 将字符串 ss 按照 00 和 11 的连续段分组&#xff0c;存在counts 数组中&#xff0c;例如 s 00111011&#xff0c;可以得到这样的counts 数组&#xff1a;counts{2,3,1,2}。 这里counts 数组中两个相邻的数一定代表的是两种…

第五章数理统计--样本和抽样分布

从今天开始要学习数理统计。 概率论&#xff1a;是专门研究随机现象的一门学科&#xff0c;定量描述随机现象及其规律。 数理统计&#xff1a;数理统计的研究对象是数据&#xff0c;包括对数据的采集、整理、分析、建模。主要任务是获取样本、描述样本&#xff0c;从样本得到…

Scrapy安装报错

python3 pip 安装Scrapy在win10 安装报错error: Microsoft Visual C 14.0 is required. Get it with "Microsoft Visual C Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools 问题描述 当前环境win10&#xff0c;python_3.6.1&#xff0c;64…

第四十三期:2020年企业面临的20大数据安全风险

为了帮助企业为日益增长的确定性风险做好准备&#xff0c;以下我们总结了企业2020年可能面临的20种数据安全风险。 如今&#xff0c;数据安全已成为公司、消费者和监管机构的头等大事。 近年来数据泄露和隐私事故越来越普遍&#xff0c;而且代价高昂。Risk Based Security的一…

[Leetcode][第93题][JAVA][复原IP地址][剪枝][回溯]

【问题描述】[中等] 【解答思路】 1. 递归 回溯剪枝 复杂度 class Solution {static final int SEG_COUNT 4;List<String> ans new ArrayList<String>();int[] segments new int[SEG_COUNT];public List<String> restoreIpAddresses(String s) {segmen…

函数嵌套

目录 一、函数的嵌套定义二、函数的嵌套调用一、函数的嵌套定义 函数内部定义的函数&#xff0c;无法在函数外部使用内部定义的函数。 def f1():def f2():print(from f2)f2()f2() # NameError: name f2 is not defined def f1():def f2():print(from f2)f2()f1() from f2 现在…

第六章 参数估计

依据样本推出总体分布的参数&#xff0c;方法有两种&#xff1a;矩估计和极大似然估计。  参数估计的形式有&#xff1a;点估计和区间估计。  点估计&#xff1a;构造合适的统计量θˆθˆ(X1,X2,...Xn)用来估计未知参数θ&#xff0c;θˆ称为参数θ的点估计量。  当给定…

第四十四期:1.3万亿条数据查询如何做到毫秒级响应?

知乎&#xff0c;在古典中文中意为“你知道吗?”&#xff0c;它是中国的 Quora&#xff0c;一个问答网站&#xff0c;其中各种问题由用户社区创建&#xff0c;回答&#xff0c;编辑和组织。 图片来自 Pexels 作为中国最大的知识共享平台&#xff0c;我们目前拥有 2.2 亿注册用…

Python拷贝梳理

python中存在与其他语言不同的概念&#xff0c;现在梳理一下相关概念。 其中 变量&#xff1a;拥有指向对象的连接空间&#xff0c;即引用空间的代称。 引用&#xff1a;指变量指向对象的指针。 对象&#xff1a;指变量声明后所产生的内存空间。 可变对象&#xff1a;表示…

sql一对多查询

子查询返回的值不止一个。当子查询跟随在 、!、<、<、>、> 之后&#xff0c;或子查询用作表达式时&#xff0c;这种情况是不允许的。 正确写法&#xff1a; select Material_Manage.MaterialNum,Material_Manage.MaterialName,Material_Manage.MaterialWeight,Mate…

[Leetcode][第130题][JAVA][被围绕的区域][DFS][BFS]

【问题描述】[中等] 【解答思路】 1. 深度优先搜索 使用深度优先搜索实现标记操作。在下面的代码中&#xff0c;我们把标记过的字母 O 修改为字母 A。 复杂度 class Solution {int[] dx {1, -1, 0, 0};int[] dy {0, 0, 1, -1};public void solve(char[][] board) {int n …

第四十五期:程序员未来干什么?做架构还是做管理?

很多程序员应该都会有这个疑问&#xff0c;尤其是工作经验不多的&#xff0c;对未来充满了期待。在我职业生涯的早期&#xff0c;比较偏重于走管理路线&#xff1b;现在呢&#xff0c;成了公司的架构师&#xff0c;当然也会承担一部分的管理工作。 很多程序员应该都会有这个疑问…

leetcode之回溯backtracing专题1

39 Combination Sum 给一组整数&#xff0c;给一个目标整数。从数组中任意选择几个数&#xff0c;这几个数的和等于目标整数。数组中每个数字可以选择多次。  例如given candidate set [2, 3, 6, 7] and target 7, 返回 [ [7], [2, 2, 3] ] 思路&#xff1a;数组candidat…