天天看点

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,如需转载请自行联系原作者

继续阅读