大部分的dns解析是乙個網域名稱對應乙個ip位址,但是通過dns輪循技術可將乙個網域名稱對應多個ip位址,這樣可以實現簡單且高效的負載平衡,但是輪循技術有乙個缺點就是當目標主機不可用時,不能自動的刪除,所以引出了要對業務主機的服務的可用性進行監控。
本例通過分析當前網域名稱的解析ip,再結合服務埠探測來實現自動監控,在網域名稱解析中新增、刪除ip時,無須對監控腳步更改。
! python 2.x中的"httplib"模組在python 3.x中變為"http.client"
iplist
=
#定義域名ip列表變數
=
"www.google.cn"
#定義業務網域名稱
def
get_iplist(domain
=
""):
#網域名稱解析函式,解析成功ip將被追加到iplist
try
:
a
=
dns.resolver.query(domain,
'a'
)
#解析a記錄型別
except
exception as e:
print
(
"dns resolver error: "
)
+
str
(e)
return
for
i
in
a.response.answer:
for
j
in
i.items:
#追加到iplist
return
true
def
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"
#發起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__"
:
if
and
len
(iplist)>
0
:
#條件:網域名稱解析正確且至少返回乙個ip
for
ip
in
iplist:
checkip(ip)
else
:
print
(
"dns resolver error."
)
學習網域名稱系統(DNS)
網域名稱系統 dns 是用於計算機 服務 連線到internet或專用網路的任何資源的分層分布式命名系統。它將各種資訊與分配給每個參與實體的網域名稱相關聯。最重要的是,它將人們可以輕易記憶的網域名稱轉換為全球計算機服務和裝置所需的數字ip位址。網域名稱系統是大多數網際網路服務功能的重要組成部分,因為...
DNS學習筆記
dns簡單介紹 1.dns 是乙個由分層的dns伺服器實現的分布式資料庫,是乙個允許主機查詢分布式資料庫的應用層協議 2.dns伺服器 就相當於乙個軟體程式 其實乙個重要dns伺服器是乙個集群 他一般部署在unix或者linux系統上,dns協議是執行在udp協議之上,使用的是53號埠 3.獲取ip...
DNS網域名稱系統
前言 學過計算機網路的我們知道,整個 internet 網路就是乙個單一的 抽象的網路,各個主機通過全世界範圍內唯一的 32位識別符號 ip 位址來標識唯一性,很顯然,在網際網路中它們只能通過 ipip ip202.108.22.5 然而,當我們想要訪問的 變多,我們就不得不記住一串又一串長達 32...