python dnspod,python

  python dnspod,python

  第1篇DNS Python模块介绍2安装3。模块4域名解析方法详解常见解析类型示例:4.1 A记录实现A记录查询方法源代码4.2 MX记录实现MX记录查询方法源代码4.3 NS记录实现NS记录查询方法源代码4.4 CNAME记录实现CNAME记录查询方法源代码4.5 DNS域名轮换业务监控1 .第二步。代码分析

  1 DNS Python模块介绍DNS Python(http://www.dnspython.org/)是Python实现的DNS工具包。它支持几乎所有记录类型,可用于查询、传输和动态更新区域信息,还支持TSIG(交易签名)验证消息和EDNS0(扩展DNS)。在系统管理方面,可以利用其查询功能实现对DNS服务的监控和解析结果的验证。它可以取代nslookup和dig等工具,并轻松与现有平台集成。以下是详细介绍。

  2安装[root @ localhostipy]# pipi install DNS Python

  下载/解包dnspython

  正在下载DNS python-1 . 16 . 0-py2 . py3-none-any . whl(188kB):已下载188 kb

  安装收集的包:dnspython

  已成功安装dnspython

  清理.

  3.模块dnspython域名解析方法详解模块提供了大量的DNS处理方法,最常用的方法是域名查询。Dnspython提供了一个DNS解析器类3354Resolver,利用它的查询方法实现域名的查询功能。查询方法定义如下:

  query(self,qname,rdtype=1,rd 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_port参数作为指定的查询源地址和结束端口,默认值为查询设备的IP地址和0。

  raise_on_no_answer参数用于指定当查询无响应时是否触发异常。默认值为True。

  4常见解析类型示例:常见DNS解析类型包括A、MX、NS、CNAME等。使用dnspython的dns.resolver.query方法可以简单的实现这些dns类型的查询,为后面要实现的功能提供数据源。例如,如果您在三行中使用DNS循环服务监控域名的可用性,您需要获得当前的分析结果。

  4.1一个记录实现一个记录查询方法源代码[root @ localhost DNS Python]# catdnspthon 1 . py

  #/usr/bin/env python

  # _ * _编码:utf-8_*_

  导入dns.resolver

  Domain=raw _ input(请输入域:)#输入域名地址

  A=dns.resolver.query (domain, a) #指定查询类型为a的记录。

  对于A.response.answer中的I:#通过response.answer方法获取查询信息。

  打印I

  对于in i.items: #遍历响应信息

  print j[root @ localhost DNS python]# python DNS python 1 . py

  请输入域名:www.baidu.com

  www.baidu.com。5在www.a.shifen.com的CNAME。

  www.a.shifen.com。

  www.a.shifen.com。5在39.156.66.18

  www.a.shifen.com。5在39.156.66.14

  39.156.66.18

  39.156.66.14

  4.2 MX记录实现MX记录查询方法源代码[root @ localhost dnspthon]# catdnspthon 2 . py

  #/usr/bin/env python

  # _ * _编码:utf-8_*_

  导入dns.resolver

  domain=raw_input(请输入一个域: )

  MX=dns.resolver.query (domain, mx) #指定查询类型为MX。

  对于MX中的I:#遍历响应结果,输出MX记录的首选项和交换机信息。

  print MX preference=,i.preference, mail exchange=,I . exchange[root @ localhost DNS python]# python DNS python 2 .巴拉圭

  请输入域名:百度网

  麦克斯韦(maxwell磁通量单位)中性(Middlesex)首选=20邮件交换=mx50.baidu.com .

  麦克斯韦(maxwell磁通量单位)中性(Middlesex)首选=15邮件交换=mx.n.shifen.com .

  麦克斯韦(maxwell磁通量单位)中性(Middlesex)首选=10邮件交换=mx.maillb.baidu.com .

  麦克斯韦(maxwell磁通量单位)中性(Middlesex)首选=20邮件交换=jpmx.baidu.com .

  麦克斯韦(maxwell磁通量单位)中性(Middlesex)首选=20邮件交换=mx1.baidu.com .

  4.3纳秒记录实现纳秒记录查询方法源码[root @ localhost DNS python]# cat DNS python 3。巴拉圭

  #/usr/bin/env python

  #_*_conding:utf-8_*_

  导入dns.resolver

  域=原始输入(请输入一个域: )

  ns=dns.resolver.query(域,“ns”)

  对于ns.response .答案中的我:

  对于我。项目中的j:

  print j . to _ text()[root @ localhost DNS python]# python DNS python 3。巴拉圭

  请输入域名:百度网

  ns7.baidu.com .

  百度官方网站.

  ns2 .百度. com .

  ns4.baidu.com .

  百度域名.

  4.4 CNAME记录实现CNAME记录查询方法源码[root @ localhost DNS python]# cat DNS python 4。巴拉圭

  #/usr/bin/env python

  # _ * _编码:utf-8_*_

  导入dns.resolver

  域=原始输入(请输入一个域: )

  cname=dns.resolver.query(域,“CNAME”)#指定查询类型为CNAME

  对于cname.response.answer中的我:#结果将回应别名解析后的目标域名

  对于我。项目中的j:

  print j . to _ text()[root @ localhost DNS python]# python DNS python 4。巴拉圭

  请输入一个域名:www.baidu.com

  www.a.shifen.com .

  4.5 DNS域名轮循业务监控大部分的域名服务器(域名服务器)解析都是一个域名对应一个互联网协议(互联网协议)地址,但是通过域名服务器(域名服务器)轮循技术可以做到一个域名对应多个IP,从而实现最简单且高效的负载平衡,不过此方案最大的弊端是目标主机不可用时无法被自动剔除,因此做好业务主机的服务可用监控至关重要。

  1.步骤1)实现域名的解析,获取域名所有的A记录解析互联网协议(互联网协议)列表;2)对互联网协议(互联网协议)列表进行超文本传送协议级别的探测

  2.代码解析本示例第一步通过dns.resolver.query()方法获取业务域名A记录信息,查询出所有互联网协议(互联网协议)地址列表,再使用模块模块的请求()方法以得到方式请求监控页面,监控业务所有服务的互联网协议(互联网协议)是否服务正常。

  [root @ localhost DNS python]# cat DNS python 5。巴拉圭

  #/usr/bin/env python

  # _ * _编码:utf-8_*_

  导入dns.resolver

  导入操作系统

  导入模块

  iplist=[] #定义域名互联网协议(互联网协议的缩写)列表变量

  appdomain=www.baidu.com #定义业务域名

  def get_iplist(domain=): #域名解析函数,解析成功互联网协议(互联网协议)将被追加到文件

  尝试:

  A=dns.resolver.query(域,“一”)

  除了例外,e:

  "打印“dns解析器错误:"字符串(五)

  返回

  因为我在答:

  对于我。项目中的j:

  iplist.append(j) #追加到文件列表

  返回真实的

  def checkip(ip):

  checkurl=str(ip) : 80

  getcontent=

  http lib。插座。设置默认超时(5)#定义超文本传送协议(超文本传输协议的缩写)连接5秒超时(5)秒

  conn=httplib .HTTPConnection(checkurl) #创建超文本传送协议(超文本传输协议的缩写)连接对象

  尝试:

  conn.request(GET ,/,headers={Host: appdomain}) #发起统一资源定位器请求,添加宿主主机头

  r=conn.getresponse()

  getcontent=r.read(15) #获取统一资源定位器页面前15个字符用来可用性效验

  最后:

  if getcontent==: #监控统一资源定位器页的内容一般是事先定义好的比如http 200等

  打印字符串(IP) \ 033[32;1m[正常]\033[0m

  否则:

  打印字符串(IP) \ 033[31;1m[错误]\033[0m

  打印原因#获取反应的状态码

  打印r。状态#获取反应的状态好的或者错误

  if __name__==__main__ :

  if get_iplist(appdomain)和len(iplist) 0: #域名解析正确且至少返回一个互联网协议(互联网协议)

  对于文件中的ip:

  checkip(ip)

  否则:

  打印“dns解析器错误"[root @ localhost DNS python]# python DNS python 5。巴拉圭

  www.a.shifen.com .[好的]

  好

  200

  39.156.66.14[好]

  好

  200

  39.156.66.18[好]

  好

  200参考书籍:

  刘天斯《Python自动化运维》

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: