天天看點

DNS域名輪循業務監控

<code>''</code><code>'</code>

<code>                </code><code>192.168.0.1</code>

<code>--&gt; www.xxx.com 192.168.0.2</code>

<code>                </code><code>192.168.0.3</code>

<code>擷取業務域名A記錄,查詢出所有IP位址清單,在使用httplib子產品的request()方法</code>

<code>以get方式請求監控頁面,監控業務所有服務IP是否服務正常</code>

<code>#!/usr/bin/env python</code>

<code>import dns.resolver</code>

<code>import os</code>

<code>import http.client</code>

<code>import socket</code>

<code>iplist=[] #定義ip清單變量</code>

<code>appdomain=</code><code>"51cto.com"</code> <code>#定義業務域名(例)</code>

<code>def get_iplist(domain=</code><code>""</code><code>): #域名解析函數,解析成功後IP将追加到iplist</code>

<code>    </code><code>try</code><code>:</code>

<code>        </code><code>A=dns.resolver.query(domain,</code><code>'A'</code><code>)</code>

<code>    </code><code>except Exception </code><code>as</code> <code>e:</code>

<code>        </code><code>print</code><code>(</code><code>"dns resolver error:"</code><code>+str(e))</code>

<code>        </code><code>return</code>

<code>    </code><code>for</code> <code>i in A.response.answer:</code>

<code>        </code><code>for</code> <code>j in i.items:</code>

<code>            </code><code>iplist.append(j.address)</code>

<code>    </code><code>return</code> <code>True</code>

<code>def checkip(ip):</code>

<code>    </code><code>checkurl=ip + </code><code>":80"</code>

<code>    </code><code>getcontent=</code><code>""</code>

<code>    </code><code>#socket.setdefaulttimeout(5) #使用socet子產品定義逾時時間為5秒</code>

<code>    </code><code>http.client.socket.setdefaulttimeout(5)</code>

<code>    </code><code>conn=http.client.HTTPConnection(checkurl) #建立http連結對象</code>

<code>        </code><code>conn.request(</code><code>"GET"</code><code>,</code><code>"/"</code><code>,headers={</code><code>"HOST"</code><code>:appdomain}) #發起URL請求,添加host主機t頭</code>

<code>        </code><code>r=conn.getresponse()</code>

<code>        </code><code>getcontent=r.read(15) #擷取URL頁面前1個字元,以便可用性校驗</code>

<code>    </code><code>finally:</code>

<code>        </code><code>if</code> <code>getcontent==</code><code>"&lt;!doctype html&gt;"</code><code>: #監控URL頁的内容一般事先定義好的,比如“HTTP200”等</code>

<code>            </code><code>print</code><code>(ip+</code><code>"[Ok]"</code><code>)</code>

<code>        </code><code>else</code><code>:</code>

<code>            </code><code>print</code><code>(ip+</code><code>"[ERROR]"</code><code>) #此處可放置警告程式,可以是郵件,可以是短信</code>

<code>if</code> <code>__name__==</code><code>"__main__"</code><code>:</code>

<code>    </code><code>if</code> <code>get_iplist(appdomain) </code><code>and</code> <code>len(iplist) &gt; 0 : #條件:域名解析正确至少傳回一個IP</code>

<code>        </code><code>for</code> <code>ip in iplist:</code>

<code>            </code><code>checkip(ip)</code>

<code>    </code><code>else</code><code>:</code>

<code>        </code><code>print</code><code>(</code><code>"DNS resolver error."</code><code>)</code>

本文轉自 SoulMio 51CTO部落格,原文連結:http://blog.51cto.com/bovin/1881256,如需轉載請自行聯系原作者

繼續閱讀