標籤:python DNS Linux
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資源。
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(‘----------------‘)
Python DNS 處理模組 dnspython