Python自动化运维笔记(三):DNS处理模块dnspython
来源:互联网 发布:造价大数据 编辑:程序博客网 时间:2024/06/06 17:29
运行环境:Python3.6,Windwos10 RS1,Pycharm
模块介绍
dnspython
是Python
实现的一个DNS
工具包,支持几乎所有的记录类型,可以用于查询,传输并动态更新ZONE信息,同时支持TSIG
(事务签名)验证消息和EDNS0
(扩展DNS)。可以替代nslookup
,dig
等工具,轻松做到平台整合
模块安装
因为我电脑目前环境是Python3.6
,已经继承了pip
软件管理工具,所以我就直接使用pip
来进行安装dnspython
模块了。
pip install dnspython #最新版本为1.15.0,如果是Python2和Python3环境同时安装了,安装到指定python3上,则使用pip3 install dnspython进行安装
域名解析方法
dnspython
提供了大量的DNS
处理方法,最常用的是域名查询。dnspython
提供了一个DNS
解析器类resolver
,使用它的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记录:一个起始授权区的定义
如果想要了解更多关于域名解析类型的信息,可以参考这篇文章(链接)
常见域名解析示例
上面说到了六种域名解析类型,不过我们常用的不过A
、MX
、NS
、CNAME
四种解析类型。
①A记录
关于A记录的实例代码如下:
# -*- coding: utf-8 -*-# @Time : 2017/10/1 9:58 # @File : DNS.py # @Software: PyCharmimport dns.resolverdomain = input("请输入域名地址:") # 输入域名地址A = dns.resolver.query(domain, 'A') # 指定查询记录为A型 for i in A.response.answer: # 通过response.answer方法获取查询回应信息 # print(i) for j in i.items: print(j)
运行结果如下:
请输入域名地址:>? www.baidu.comwww.a.shifen.com.14.215.177.3814.215.177.39
这样子我们就将www.baidu.com
的域名解析出来了。
除此之外,我们可以在调试窗口中看一下变量i是什么。
print(i) # 输出变量i中的内容
输出结果如下:
>>> print(i)www.a.shifen.com. 225 IN A 14.215.177.38www.a.shifen.com. 225 IN A 14.215.177.39
发现i
中具有两个条目,对应我们输出的j
值。
另外这里面有几个需要注意的地方:
- 在《Python自动化运维》一书中使用的
Python2.6
,示例代码中最后一行为print j.address
,即打印出变量i中的address
属性,但是我在运行代码时出现异常,提示并没有该address
属性存在,而直接打印变量j
即可反馈出解析地址,这个具体原因还未知。- 该
DNS
解析时出现了一个新的域名www.a.shifen.com
,上网查了一下相关资料,根据dig
跟踪发现shifen.com
和baidu.com
服务器是同一台,具体可以参考(链接)
②MX记录
实现MX记录查询方法示例,在上面提到了是用于邮箱解析的,所以我们以QQ邮箱为例。
# -*- coding: utf-8 -*-# @Software: PyCharmimport dns.resolverdomain = input('Input an domain')MX = dns.resolver.query(domain, 'MX') # 指定解析类型为MX记录for i in MX: # 遍历回应结果 print('MX preference =', i.preference, 'mail exchanger =', i.exchange)
运行结果如下:
>>> Please input a domain>? qq.comMX preference = 20 mail exchanger = mx2.qq.com.MX preference = 30 mail exchanger = mx1.qq.com.MX preference = 10 mail exchanger = mx3.qq.com.
其中我们可以看到
preference
值(优先级)和exchange
值(交换地址),其中优先级默认为10
,MX记录可以通过设置优先级实现主辅服务器设置,”优先级”中的数字越小表示级别越高,“优先级”仅对MX记录有效。
③NS记录
NS记录示例代码如下:
# -*- coding: utf-8 -*-# @Software: PyCharmimport dns.resolverdomain = input('Input an domain')NS = dns.resolver.query(domain, 'NS')for i in NS.response.answer: for j in i.items: print(j.to_text())
运行结果如下:
>>> Input an domain>? baidu.comdns.baidu.com.ns3.baidu.com.ns4.baidu.com.ns2.baidu.com.ns7.baidu.com.
NS(Name Server)
域名服务器记录。用来表明由哪台服务器对该域名进行解析。在注册域名时,总有默认的DNS服务器
,每个注册的域名都是由一个DNS域名服务器来进行解析的。但是需要注意的是只能输入一级域名,如:baidu.com
;对于二级以及多级域名,如www.baidu.com
、wenku.baidu.com
则是错误的。
④CNAME记录
CNAME记录查询代码示例如下:
# -*- coding: utf-8 -*-# @Software: PyCharmimport dns.resolverdomain = input('Input an domain:')CNAME = dns.resolver.query(domain,'CNAME')for i in CNAME.response.answer: for j in i.items: print(j.to_text())
运行结果如下:
>>> Input an domain:>? www.baidu.comwww.a.shifen.com.
发现又再次出现了上面在A记录中出现的
www.a.shifen.com
域名,这个域名就是www.baidu.com
的别名指向。相当于用子域名来代替ip地址
,优点是如果ip地址
变化,只需要改动子域名的解析,而不需要逐一改变ip地址
解析。注意事项:
- CNAME的目标主机地址只能使用主机名,不能使用
IP地址
;- 主机名前不能有任何其他前缀,如:
http://
等是不被允许的;- A记录优先于CNAME记录。即如果一个主机地址同时存在A记录和CNAME记录,则CNAME记录不生效。
- Python自动化运维笔记(三):DNS处理模块dnspython
- python自动化运维学习笔记3 - DNS处理模块dnspython
- Python学习笔记-DNS处理模块dnspython
- python DNS处理模块dnspython
- dnspython模块处理dns信息
- Python自动化运维笔记(二):Python中的IP地址处理模块IPy的使用
- python -- DNS处理模块
- python自动化运维学习笔记2- 实用的IP地址处理模块IPy
- Python自动化运维笔记(七):XlsxWriter模块实现Excel操作(上)
- Python自动化运维笔记(八):XlsxWriter模块实现Excel操作(下)
- Python自动化运维笔记(一):系统性能信息模块psutil
- Python自动化运维笔记(四):使用difflib模块实现文件内容差异对比
- Python自动化运维笔记(六):使用smtplib模块发送电子邮件
- 【Python自动化运维】DNS轮询技术
- Python自动化运维笔记(五):使用filecmp模块实现文件以及文件目录差异对比
- Python笔记之psutil模块(自动化运维利器psutil玩转系统监控及管理)
- python自动化运维学习笔记1- psutil系统性能信息模块
- linux环境(三)python自动化运维
- 信号报告
- bzoj 4364: [IOI2014]wall砖墙
- 【洛谷】P1629 邮递员送信
- 剑指offer-(1-5)
- HDU: Fire Net
- Python自动化运维笔记(三):DNS处理模块dnspython
- 【概率论】作业三
- Rust : codewars的Product of consecutive Fib numbers
- 10.1国庆快乐
- 网易测试面试
- 客户机操作系统已禁用cpu
- python3列表
- 计算机程序的思维逻辑(挺好的文章列表)
- 一遍记住Java常用的八种排序算法与代码实现