Python DNS 處理模塊 dnspython
以下列舉了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資源。
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
# -
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記錄
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(‘----------------‘)
Python DNS 處理模塊 dnspython