以下列举了 DNSPython 模块中常用方法, 借鉴于书籍Python 自动化运维: 技术与最佳实践
dnspython 提供大量关于 DNS 的处理方法, 最常用的是域名查询. dnspython 提供了一个 DNS 解析类 resolver, 使用它的 query 方法来实现域名的查询功能.
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 标记, 一个起始授权区的定义
rdclass 指定网络类型, IN,CH,HS, IN 默认
tcp 指定查询是否启用 TCP 协议 (默认不启用)
source 与 source_port 指定查询源的地址与端口, 默认为查询设备的 IP 地址和 0
raise_on_no_answer 指定查询无应答时是否触发异常, 默认为 True
以下是代码
- #! /usr/bin/env python
- # -- coding:utf-8 -*-**
- import dns.resolver
- Domain = raw_input('Please input an domain:')
- class DNS:
- def Get_A(self,Domain): # 查询 A 记录
- print('输出 A 记录')
- try:
- A = dns.resolver.query(Domain, 'A')
- for i in A.response.answer:
- for j in i.items:
- print(j.address)
- except Exception as e:
- print('未查询到 A 记录')
- def Get_MX(self,Domain): # 查询 MX 记录
- print('输出 MX 记录')
- try:
- MX = dns.resolver.query(Domain, 'MX')
- for i in MX:
- print 'MX preference =', i.preference, 'mail exchanger=', i.exchange
- except Exception as e:
- print('未查询到 MX 记录')
- def Get_NS(self,Domain): # 查询 NS 记录
- print('输出 NS 记录')
- try:
- ns = dns.resolver.query(Domain, 'NS')
- for i in ns.response.answer:
- for j in i.items:
- print j.to_text()
- except Exception as e:
- print('未查询到 NS 记录')
- def Get_CNAME(self,Domain): # 查询 CNAME 记录
- print('输出 CNAME 记录')
- try:
- cname = dns.resolver.query(Domain, 'CNAME')
- for i in cname.response.answer:
- for j in i.items:
- print j.to_text()
- except Exception as e:
- print('未查询到 CNAME')
- if name =='main':
- d = DNS()
- d.Get_A(Domain)
- print('----------------')
- d.Get_MX(Domain)
- print('----------------')
- d.Get_NS(Domain)
- print('----------------')
- d.Get_CNAME(Domain)
- print('----------------')
来源: http://www.bubuko.com/infodetail-2636165.html