標籤:ip地址 except domain 監控 import python
大部分的DNS解析是一個網域名稱對應一個IP地址,但是通過DNS輪循技術可將一個網域名稱對應多個IP地址,這樣可以實現簡單且高效的Server Load Balancer,但是輪循技術有一個缺點就是當目標主機不可用時,不能自動的刪除,所以引出了要對業務主機的服務的可用性進行監控。
本例通過分析當前網域名稱的解析IP,再結合服務連接埠探測來實現自動監控,在網域名稱解析中添加、刪除IP時,無須對監控腳步更改。
! Python 2.x中的"httplib"模組在Python 3.x中變為"http.client"
#!/usr/bin/python3#import dns.resolverimport osimport http.clientiplist=[]#定義網域名稱IP列表變數appdomain="www.google.cn"#定義業務網域名稱def get_iplist(domain=""):#網域名稱解析函數,解析成功IP將被追加到iplisttry:A = dns.resolver.query(domain, ‘A‘)#解析A記錄類型except Exception as e:print ("dns resolver error: ")+str(e)returnfor i in A.response.answer:for j in i.items:iplist.append(j.address)#追加到iplistreturn Truedef checkip(ip):checkurl = ip+":80"getcontent = ""http.client.socket.setdefaulttimeout(5)#定義http連線逾時時間(5秒)conn = http.client.HTTPConnection(checkurl)#建立http連線物件try:conn.request("GET", "/", headers = {"Host": appdomain})#發起url請求,添加host主機頭r = conn.getresponse()getcontent = r.read(15)#擷取url頁面前15個字元,以便做可用性校正finally:if getcontent == "<!doctype html>":#監控URL頁的內容一般是事先定義好的,比如"HTTP200"等print (ip+" [OK]")else:print (ip+" [Error]")#此處可放警示程式,可以是郵件、簡訊通知if __name__ == "__main__":if get_iplist(appdomain) and len(iplist)>0:#條件:網域名稱解析正確且至少返回一個IPfor ip in iplist:checkip(ip)else:print ("dns resolver error.")
本文出自 “謝育政” 部落格,請務必保留此出處http://kurolz.blog.51cto.com/11433546/1935044
Python學習筆記-DNS網域名稱輪循業務監控