Python学习笔记-DNS处理模块dnspython

简介:

DNS处理模块dnspython

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

在系统管理方面,我们可以利用其查询功能来实现DNS服务监控以及解析结果的校验,可以替代nslookup和dig等工具,轻松做到与现有平台的整合。

    下载dnspython模块

1
[root@kurol ~] # python3 -m easy_install -i http://pypi.douban.com/simple/ dnspython

    dnspython提供大量关于DNS的处理方法,最常用的是域名查询。dnspython提供了一个DNS解析类resolver,使用它的query方法来实现域名的查询功能。 

1
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标记,一个起始授权区的定义


    常见的解析类型示例:

        A记录(实现A记录查询方法源码):  

?
1
   [root@kurol pkg1] # vim dnsa.py
1
2
3
4
5
6
#!/usr/bin/python3
#import dns.resolverdomain = input('Please input an domain: ')    #输入域名地址
=  dns.resolver.query(domain,  'A' )      #指定查询类型为A记录
for  in  A.response.answer:      #通过response.answer方法获取查询回应信息    
for  in  i.items:    #遍历回应信息        
     print  (j.address)
?
1
[root@kurol pkg1] # python3 dnsa.py Please input an domain: www.google.com93.46.8.89


        MX记录(实现MX记录查询方法源码):

?
1
[root@kurol pkg1] # vim mxdns.py
1
2
3
4
5
#!/usr/bin/python3
#import dns.resolverdomain = input('Please input an domain: ') #输入域名地址
MX  =  dns.resolver.query(domain,  'MX' #指定查询类型为MX记录
for  in  MX:  #通过response.answer方法获取查询回应信息    
     print  ( 'MX preference = ' , i.preference,  'main exchanger = ' , i.exchange)
1
2
3
4
5
6
[root@kurol pkg1] # python3 mxdns.py 
Please  input  an domain: baidu.com
MX preference  =  20  main exchanger  =  mx50.baidu.com.
MX preference  =  10  main exchanger  =  mx.n.shifen.com.
MX preference  =  20  main exchanger  =  mx1.baidu.com.
MX preference  =  20  main exchanger  =  jpmx.baidu.com.


        NS记录(实现NS记录查询方法源码):

?
1
[root@kurol pkg1] # vim nsdns.py
1
2
3
4
5
#!/usr/bin/python3#import dns.resolverdomain = input('Please input an domain: ') #输入域名地址
ns  =  dns.resolver.query(domain,  'NS' #指定查询类型为NS记录
for  in  ns.response.answer:  #通过response.answer方法获取查询回应信息    
for  in  i.items:  #遍历回应信息        
     print  (j.to_text())
1
2
3
4
5
6
[root@kurol pkg1] # python3 nsdns.py 
Please  input  an domain: qq.comn
s3.qq.com.
ns4.qq.com.
ns1.qq.com.
ns2.qq.com.


        CNAME记录(实现CNAME记录查询方法源码):

?
1
[root@kurol pkg1] # vim cnamedns.py
1
2
3
4
5
#!/usr/bin/python3#import dns.resolverdomain = input('Please input an domain: ') #输入域名地址
cname  =  dns.resolver.query(domain,  'CNAME' #指定查询类型为CNAME记录
for  in  ns.response.answer:  #通过response.answer方法获取查询回应信息    
for  in  i.items:  #遍历回应信息
     print  (j.to_text())



      本文转自谢育政 51CTO博客,原文链接:http://blog.51cto.com/kurolz/1935039 ,如需转载请自行联系原作者


相关文章
|
17天前
|
存储 开发者 Python
Python中的collections模块与UserDict:用户自定义字典详解
【4月更文挑战第2天】在Python中,`collections.UserDict`是用于创建自定义字典行为的基类,它提供了一个可扩展的接口。通过继承`UserDict`,可以轻松添加或修改字典功能,如在`__init__`和`__setitem__`等方法中插入自定义逻辑。使用`UserDict`有助于保持代码可读性和可维护性,而不是直接继承内置的`dict`。例如,可以创建一个`LoggingDict`类,在设置键值对时记录操作。这样,开发者可以根据具体需求定制字典行为,同时保持对字典内部管理的抽象。
|
1天前
|
测试技术 Python
Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
|
1天前
|
Serverless 开发者 Python
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
25 1
|
2天前
|
调度 Python
Python多线程、多进程与协程面试题解析
【4月更文挑战第14天】Python并发编程涉及多线程、多进程和协程。面试中,对这些概念的理解和应用是评估候选人的重要标准。本文介绍了它们的基础知识、常见问题和应对策略。多线程在同一进程中并发执行,多进程通过进程间通信实现并发,协程则使用`asyncio`进行轻量级线程控制。面试常遇到的问题包括并发并行混淆、GIL影响多线程性能、进程间通信不当和协程异步IO理解不清。要掌握并发模型,需明确其适用场景,理解GIL、进程间通信和协程调度机制。
17 0
|
2天前
|
API Python
Python模块化编程:面试题深度解析
【4月更文挑战第14天】了解Python模块化编程对于构建大型项目至关重要,它涉及代码组织、复用和维护。本文深入探讨了模块、包、导入机制、命名空间和作用域等基础概念,并列举了面试中常见的模块导入混乱、不适当星号导入等问题,强调了避免循环依赖、合理使用`__init__.py`以及理解模块作用域的重要性。掌握这些知识将有助于在面试中自信应对模块化编程的相关挑战。
17 0
|
2天前
|
Python
基于Django的Python应用—学习笔记—功能完善
基于Django的Python应用—学习笔记—功能完善
|
3天前
|
Python
python学习-函数模块,数据结构,字符串和列表(下)
python学习-函数模块,数据结构,字符串和列表
25 0
|
4天前
|
Python
python学习14-模块与包
python学习14-模块与包
|
6天前
|
SQL API 数据库
Python中的SQLAlchemy框架:深度解析与实战应用
【4月更文挑战第13天】在Python的众多ORM(对象关系映射)框架中,SQLAlchemy以其功能强大、灵活性和易扩展性脱颖而出,成为许多开发者首选的数据库操作工具。本文将深入探讨SQLAlchemy的核心概念、功能特点以及实战应用,帮助读者更好地理解和使用这一框架。
|
6天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。

相关产品

  • 云解析DNS
  • 推荐镜像

    更多