dnspython是python實現的乙個dns工具包,它幾乎支援所有的記錄型別,可以用於查詢、傳輸病動態更新zone資訊,同時支援tsig(事務簽名)驗證訊息和ends0(擴充套件dns)。在系統管理方面,我們可以利用其查詢功能來實現dns服務監控以及解析結果的校驗,可以代替nslookup、dig等工具。
安裝1、pip方式安裝
pip install dnspython2、原始碼安裝方式
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.resolverdomain = 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.resolverdomain = 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.resolverdns網域名稱輪詢業務監控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解析都是乙個網域名稱對應乙個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:
"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
:
"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頁面,而...