简介:
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")