DNS 处理模块 dnspython

 简介:

dnspython (http://www.dnspython.org/)是Python实现一个DNS的工具包,支持所有的记录类型,可以用于查询、传输并动态更新ZONE信息.

安装

wget http://www.dnspython.org/kits/1.15.0/dnspython-1.15.0.tar.gz
tar zxf dnspython-1.15.0.tar.gz
cd dnspython-1.15.0/
cd dnspython-1.15.0/

模块域名解析方法详解

resolver --- DNS解析器类,使用它的query 方法来实现域名的查询功能。

query(self,qname,rdtype=1,rdclass=1,tcp=False,source=None,raise_on_no_answer=True,source_port=0)

其中:

qname参数为查询的域名,

rdtype参数用来执行RR资源(A , MX ,CNAME ,NS, PTR, SOA)的类型,

rdclass参数用于指定网络类型(IN ,CH,HS)

tcp参数用于用于执行查询是否启用TCP协议,默认是False

source和source_port参数作为指定查询源地址 和 端口

raise_on_on_answer 参加用于指定当查询无应答时是否触发异常,默认为True.

(1) A记录

#!/usr/bin/env python
#_*_ coding:utf-8_*_
import dns.resolver

domain = raw_input('Please input an domain: ') #输入域名地址
A = dns.resolver.query(domain, 'A')  #指定查询类型为A记录
for i in A.response.answer:     #通过response.answer方法获取查询回应信息
  for j in i.items:     #遍历回应信息
    print j.address

 (2) MX记录

#!/usr/bin/env python
#_*_ coding:utf-8_*_
import dns.resolver

domain = raw_input('Please input an domain: ') #输入域名地址
MX = dns.resolver.query(domain, 'MX')  #指定查询类型为A记录
for i in MX:           #遍历回应结果,输出MX记录的preference及exchanger信息
  print 'MX preference =',i.preference,' mail exchanger =',i.exchange

(3) NS记录

#!/usr/bin/env python
#_*_ coding:utf-8_*_
import dns.resolver

domain = raw_input('Please input an domain: ') #输入域名地址
NS = dns.resolver.query(domain, 'NS')  #指定查询类型为ns记录
for i in NS.response.answer:           #通过response.answer方法获取查询回应信息
  for j in i.items:
    print j.to_text()

(4) CNAME记录

#!/usr/bin/env python
#_*_ coding:utf-8_*_
import dns.resolver

domain = raw_input('Please input an domain: ') #输入域名地址
CNAME = dns.resolver.query(domain, 'CNAME')  #指定查询类型为CNAME记录
for i in CNAME.response.answer:           #结果将回应cname后的目标域名
  for j in i.items:
    print j.to_text()

DNS动态更新

dns动态更新是一种在不reload和重启DNS服务的情况下更新ZONE内容的机制。dns.update实现了这种功能。具体用法如下:

import dns.tsigkeyring
import dns.update
import dns.query

keyring = dns.tsigkeyring.from_text({'test_key': 'XXXXXXXXXXXXXXX'})  # xxx: 搭建bind时候用于验证的 key
update = dns.update.Update("ZONE", keyring=keyring)   # ZONE: 例如baidu.com
update.add("aaa", 60, 'a', "192.1.1.1")    
update.replace("bbb", 60, 'a', "192.168.1.2")
update.delete("cccc")
原文地址:https://www.cnblogs.com/blogscc/p/9187817.html