Dns輪訓(xùn)業(yè)務(wù)狀態(tài)監(jiān)測(cè)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/10/13 11:23
# @Author  : Beam
# @Site    : DNS域名輪訓(xùn)業(yè)務(wù)監(jiān)控
"""
通過DNS輪詢技術(shù)可以做多一個(gè)域名多贏多個(gè)IP實(shí)現(xiàn)簡單高效的負(fù)載均衡,該腳本主要用途監(jiān)控業(yè)務(wù)是否可用
本腳本以谷歌為例,在實(shí)際自行搭建的dns服務(wù)器只有純IP
"""
# @File    : demo_dns_actual.py
# @Software: PyCharm
 
import dns.resolver
import os
import httplib
 
iplist = []   #定義IP列表變量
appdomain = "www.beam.pub" #定義業(yè)務(wù)域名
 
def  get_iplist(domain=''):
    """
    域名解釋函數(shù),解釋成功的A記錄的IP追加到iplist列表中
    :param domain:
    :return:
    """
    try:
        A = dns.resolver.query(domain,'A') ##解析域名的A記錄
    except Exception,e:
        print "dns resolver error: " + str(e)
        return False
    for i in A.response.answer:
        for j in i.items:
            iplist.append(j.address)
    return True
 
def checkip(ip):
    """
    checkip函數(shù)用于檢查IP是否能正常打開,其實(shí)還能用curl -I 得到狀態(tài)碼來測(cè)試業(yè)務(wù)是否正常
    :param ip:
    :return:
    """
    checkurl = ip + ':80'   #定義要檢測(cè)的IP地址
    getcontent = ''
    httplib.socket.setdefaulttimeout(5)   ##定義HTTP連接超時(shí)時(shí)間為5秒
    conn = httplib.HTTPConnection(checkurl)  ##創(chuàng)建http連接對(duì)象
    try:
        conn.request("GET","/",headers = {"HOST":appdomain})   ##發(fā)起URL請(qǐng)求,添加host主機(jī)頭
        r = conn.getresponse()
        getcontent  = r.read(15)     ##獲取URL頁面前15個(gè)字符,用于做可用性校驗(yàn)
        print getcontent
    finally:
        if getcontent.lower() == '<!doctype html>':   ##監(jiān)控url頁的內(nèi)容一般是實(shí)現(xiàn)定義好的,比如http200等
            print ip + ' [OK]'
        else:
            print ip + ' [Error]'
 
if __name__ == '__main__':
    if get_iplist(appdomain) and len(iplist)> 0 :
        for ip in iplist:
            checkip(ip)
    else:
        print "dns resolver error"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容