DNS處理模組dnspython

2022-08-26 08:30:07 字數 4665 閱讀 3451

dnspython是python實現的乙個dns工具包,它幾乎支援所有的記錄型別,可以用於查詢、傳輸病動態更新zone資訊,同時支援tsig(事務簽名)驗證訊息和ends0(擴充套件dns)。在系統管理方面,我們可以利用其查詢功能來實現dns服務監控以及解析結果的校驗,可以代替nslookup、dig等工具。

安裝1、pip方式安裝

pip install dnspython
2、原始碼安裝方式

wget 

tar zxf dnspython-1.9.4.tar.gz

cd dnspython-1.9.4

python setup.py install

模組網域名稱解析方法詳解

dnspython提供了大量的dns處理方法,最常用的方法是網域名稱查詢。dnspython提供了乙個dns解析器類---resolver,使用它的query方法實現網域名稱的查詢功能。query方法的定義

query(self, qname, rdtype=dns.rdatatype.a, rdclass=dns.rdataclass.in,tcp=false, source=none, raise_on_no_answer=true, source_port=0)

qname:查詢的網域名稱

rdtype:rr資源型別,常用有a、mx、cname、ns、ptr、soa,soa標記啟始授權定義

rdclass:指定網路型別,可選值有in、ch、hs,in為預設使用最廣泛的

tcp:指定查詢是否啟用tcp協議,預設為false(不啟用)

raise_on_no_answer:指定當查詢無應答時是否觸發異常,預設為true

常見解析型別示例說明

常見的解析型別包括a、mx、ns、cname等。利用dnspython的dns.resolver.query方法可以簡單實現這些的dns的查詢,為後面實現的功能提供資料**,比如對乙個使用dns輪詢業務的網域名稱進行可用性監控,需要得到當前解析結果。下面進行詳細介紹

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

#執行結果

please input an domain: www.google.com

74.86.151.162

import dns.resolver

domain = raw_input('please input an domain: ')

mx = dns.resolver.query(domain, 'mx') #指定查詢型別為mx記錄型別

for i in mx: #遍歷回應結果,輸出為mx記錄的的preference和exchange資訊

print 'mx preference =', i.preference, 'mail exchanger =', i.exchange

#執行結果

#please input an domain: 163.com

#mx preference = 10 mail exchanger = 163mx03.mxmail.netease.com.

#mx preference = 10 mail exchanger = 163mx01.mxmail.netease.com.

#mx preference = 10 mail exchanger = 163mx02.mxmail.netease.com.

#mx preference = 50 mail exchanger = 163mx00.mxmail.netease.com.

import dns.resolver

domain = raw_input('please input an domain: ')

ns = dns.resolver.query(domain, 'ns') #指定查詢型別為ns記錄

for i in ns.response.answer:

for j in i.items:

print j.to_text()

#執行結果

cname = dns.resolver.query(domain, 'cname') #指定查詢型別為cnmae記錄

for i in cname.response.answer: #結果將回應cname後的目標網域名稱

for j in i.items:

print j.to_text()

#執行結果

#please input an domain: www.qtv.com.cn

#other-qtv.qd.danghongyun.com.

dns網域名稱輪詢業務監控

大部分的dns解析都是乙個網域名稱對應乙個ip位址,但是通過dns輪詢技術可以做到乙個網域名稱對應多個ip,從而實現最簡單且高效的的負載均衡,不過此方案的弊端是目標主機不可用時無法自動剔除,因此做好業務主機的服務可用監控至關重要。

示例:當前網域名稱的解析ip,再結合服務埠探測來實現自動監控,在網域名稱解析中新增、刪除ip時,無須對監控指令碼進行更改。架構圖如下:

1、步驟

2、**解析

本示例第一步通過dns.resolver.query()方法獲取業務網域名稱a記錄資訊,查詢出所有ip位址列表,再使用httplib模組request()方法get方式請求頁面,監控業務所有服務的ip是否服務正常。

'''網域名稱解析函式,解析成功的ip將追加到iplist列表

'''try

: a = dns.resolver.query(domain,'

a') #

解析a記錄

except

exception,e:

print

"dns resolver error:

" +str(e)

return

for i in

a.response.answer:

for j in

i.items:

#追加到iplist

return

true

defcheckip(ip):

'''對ip列表進行http級別探測

定義http連線超時時間5s

建立http連線物件

try:

conn.request(

"get

", "

/",headers = {"

host

發起url請求,新增host主機頭

r=conn.getresponse()

getcontent =r.read(15) #

獲取url頁面前15個字元,以便做可用性校驗

finally

:

if getcontent=="

": #

監控url頁的內容一般是事先定義好,比如「http200」等

print ip+"

[ok]

"else

:

print ip+"

[error]"#

此處可放告警程式,可以是郵件、簡訊通知

if__name__=="

__main__":

條件:網域名稱解析正確且至少要返回乙個ip

for ip in

iplist:

checkip(ip)

else

:

print

"dns resolver error.

"

dnspython模組處理dns資訊

dnspython模組支援處理所有的記錄型別,可以查詢 傳輸並動態更新zone的資訊。pip install dnspythondef check a domain raw input please input an domain a dns.resolver.query domain,a for ...

python自動化DNS處理模組dnspython

一 點睛 dnspython 是python實現的乙個dns 工具包,它支援幾乎所有的記錄型別,可以用於查詢 傳輸並動態更新 zone資訊,同時支援tsig 事務簽名 驗證訊息和edns0 擴充套件 dns 在系統管理方面,我們可以利用其查詢功能來實現dns服務監控以及解析結果的校驗,可以代替nsl...

如何處理DNS劫持

我們知道,某些網路運營商為了某些目的,對 dns 進行了某些操作,導致使用 isp 的正常上網設定無法通過網域名稱取得正確的 ip 位址。常用的手段有 dns劫持 和 dns汙染。dns劫持 和 dns汙染 在 是非常常見的現象。一般情況下輸入乙個錯誤或不存在的 url 後,本應該出現404頁面,而...