dns处理模块dnspython

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:

环境说明:linux系统 python 2.6.6



安装:

1
2
3
4
5
6
7
wget https://pypi.python.org/packages/b3/e3/091c6489f0b573b8a4069ce956d037061ae9321401c89323386fe748dc9f/dnspython-1.12.0.zip
 
unzip dnspython-1.12.0.zip 
 
cd dnspython-1.12.0
 
python setup.py install



导入模块是:

1
import  dns.resolver


dnsPython模块提供了大量的dns处理方法,最常见的是域名查询,dnsPython提供一个DNS解析类—>resolver,使用它的query方法来实现域名查询功能,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记录 邮件交换记录,定义邮件服务器域名。
CHAME记录 指别名记录实现域名间的映射。
NS记录 标记区域的域名服务器以及授权子域。
PTR记录 反向解析,与A记录相反,将IP转化成主机名。
SOA记录 SOA标记,一个起始授权区定义。



(一)实现A记录例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# 2017,8,24
 
import  dns.resolver
 
domain  =  raw_input ( 'Please input an domain:' )
 
=  dns.resolver.query(domain, 'A' )
 
for  in  A.response.answer:
         for  in  i.items:
                 print  j.address


执行结果:以QQ为例子:

1
2
3
4
5
[root @China  dns] # python simple1.py 
Please input an domain:www.qq.com
61.135.157.156
125.39.240.113
[root @China  dns] #


(二),实现MX记录的例子:

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# 2017,8,24
 
import  dns.resolver
 
domain  =  raw_input ( 'Please input an domain:' )
 
MX  =  dns.resolver.query(domain, 'MX' )
 
for  in  MX:
         print  'MX preferce=' ,i.preference, 'mail exchaner=' ,i.exchange

以QQ和163为例看结果:

1
2
3
4
5
6
7
8
9
10
11
12
[root@China dns] # python simple2.py 
Please input an domain:163.com
MX preferce= 10 mail exchaner= 163mx01.mxmail.netease.com.
MX preferce= 50 mail exchaner= 163mx00.mxmail.netease.com.
MX preferce= 10 mail exchaner= 163mx03.mxmail.netease.com.
MX preferce= 10 mail exchaner= 163mx02.mxmail.netease.com.
[
root@China dns] # python simple2.py 
Please input an domain:qq.com
MX preferce= 30 mail exchaner= mx1.qq.com.
MX preferce= 20 mail exchaner= mx2.qq.com.
MX preferce= 10 mail exchaner= mx3.qq.com.


(三)NS记录例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# 2017,8,24
 
import  dns.resolver
 
domain  =  raw_input ( 'Please input an domain:' )
 
ns  =  dns.resolver.query(domain, 'NS' )
 
for  in  ns.response.answer:
         for  in  i.items:
                 print  j.to_text()


以QQ和百度为例子进行验证:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@China dns] # python simple3.py 
Please input an domain:baidu.com
ns7.baidu.com.
ns2.baidu.com.
ns4.baidu.com.
dns.baidu.com.
ns3.baidu.com.
 
[root@China dns] # python simple3.py 
Please input an domain:qq.com
ns3.qq.com.
ns1.qq.com.
ns4.qq.com.
ns2.qq.com.


(四)CNAME例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# 2017,8,24
 
import  dns.resolver
 
domain  =  raw_input ( 'Please input an domain:' )
 
cname  =  dns.resolver.query(domain, 'CNAME' )
 
for  in  cname.response.answer:
         for  in  i.items:
                 print  j.to_text()

应用实例:DNS域名轮循业务监控(参考资料:http://book.51cto.com/art/201411/456723.htm)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#2017,8,25
#change dns is ok?
 
import  dns.resolver
import  os
import  httplib
import  requests
 
iplist = []  #定义域名IP列表变量
appdomain = "www.qq.com"  #定义业务域名
 
def  get_iplist(domain = ""):  #域名解析函数,解析成功IP将被追加到iplist
     try :
         =  dns.resolver.query(domain,  'A' )
     except  Exception,e:
         print  "dns resolver error :" + str (e)
         return
     for  in  A.response.answer:
         for  in  i.items:
             iplist.append(j.address)  #追加到iplist
 
     return  True
 
def  checkip(ip):
     checkurl = ip + ":80"
     getcontent = ""
     httplib.socket.setdefaulttimeout( 5 #定义连接超时时间为5秒
     conn = httplib.HTTPConnection(checkurl)  #创建http连接对象
 
 
     try :
         conn.request( "GET" , "/" ,headers  =  { "Host" :appdomain})  #发起url请求,添加host头
         r = conn.getresponse()
         getcontent = r.status  #获取URL页面状态码
 
     finally :
         
         if  getcontent  = = 200 :
             print  ip + "[ok]"
         else :
             print  ip + "[error]"
 
 
if   __name__ = = "__main__" :
     if  get_iplist(appdomain)  and  len (iplist) >  0 :
         for  ip  in  iplist:
             checkip(ip)
     else :
         print  "dns resolver error"


执行结果:

1
2
3
4
5
6
7
8
9
[root@China dns] # python simple5.py 
125.39.240.113[ok]
61.135.157.156[ok]
[root@China dns] # python simple5.py 
61.135.157.156[ok]
125.39.240.113[ok]
[root@China dns] # python simple5.py 
125.39.240.113[ok]
61.135.157.156[ok]



wKiom1me1D2iiBYJAAQF1aT1ixQ283.png


本文转自 天道酬勤VIP 51CTO博客,原文链接:http://blog.51cto.com/tdcqvip/1958996


相关文章
|
2月前
|
安全
BOSHIDA DC电源模块的基本参数解析
BOSHIDA DC电源模块的基本参数解析
BOSHIDA  DC电源模块的基本参数解析
|
2月前
|
机器学习/深度学习 存储 Python
|
2月前
|
存储 编译器 BI
掌握Go语言:Go语言基础构建模块解析,优缺点及进销存项目实战(2)
掌握Go语言:Go语言基础构建模块解析,优缺点及进销存项目实战(2)
|
2月前
|
存储 缓存 算法
Python中collections模块的deque双端队列:深入解析与应用
在Python的`collections`模块中,`deque`(双端队列)是一个线程安全、快速添加和删除元素的双端队列数据类型。它支持从队列的两端添加和弹出元素,提供了比列表更高的效率,特别是在处理大型数据集时。本文将详细解析`deque`的原理、使用方法以及它在各种场景中的应用。
|
1月前
|
存储 安全 Linux
深入解析Linux命令p11-kit:PKCS#11模块的协调器
**p11-kit详解:连接PKCS#11模块的桥梁** p11-kit是Linux下管理PKCS#11加密设备的库,它提供统一接口,简化与智能卡、HSM等的交互。用于密码学开发、系统集成及云服务,支持动态加载模块,通过API简化编程。安装时注意依赖,选择合适方式,关注版本兼容性,并通过文档和测试确保稳定。代码示例展示如何加载和卸载PKCS#11模块。
|
11天前
|
存储 SQL Python
`urllib.parse`模块是Python标准库`urllib`中的一个子模块,它提供了处理URL(统一资源定位符)的实用功能。这些功能包括解析URL、组合URL、转义URL中的特殊字符等。
`urllib.parse`模块是Python标准库`urllib`中的一个子模块,它提供了处理URL(统一资源定位符)的实用功能。这些功能包括解析URL、组合URL、转义URL中的特殊字符等。
|
1月前
|
物联网 开发者 智能硬件
无线模块透明传输原理及过程解析
透明传输是无线模块中一种保持数据原样的传输技术,它使数据在发送和接收时不经过任何处理,确保内容一致。该过程包括配置模块为透明模式、数据通过串口发送、模块封装帧格式并通过无线信道传输,以及接收端解封装并传递给应用。这种传输方式简化开发、保证数据完整性、提高通信效率且灵活性高,常用于物联网和智能家居等领域的无线通信。
|
26天前
|
前端开发 程序员 UED
全面解析layui:掌握基础知识与实用技能(1. 核心组件与模块 2. 布局与容器 3. 弹出层与提示框;1. 数据表格与数据表单 2. 表单验证与提交 3. 图片轮播与导航菜单)
全面解析layui:掌握基础知识与实用技能(1. 核心组件与模块 2. 布局与容器 3. 弹出层与提示框;1. 数据表格与数据表单 2. 表单验证与提交 3. 图片轮播与导航菜单)
27 0
|
1月前
|
JavaScript Linux 开发者
【Node.js】从基础到精通(二)—— Path 模块全解析
【Node.js】从基础到精通(二)—— Path 模块全解析
21 0
|
1月前
|
JavaScript 安全 前端开发
【Node.js】从入门到精通(一)—— fs 模块全解析
【Node.js】从入门到精通(一)—— fs 模块全解析
29 0

相关产品

  • 云解析DNS
  • 推荐镜像

    更多