【Python自动化运维】DNS轮询技术

来源:互联网 发布:知乎新房床选购 编辑:程序博客网 时间:2024/06/12 12:09

DNS轮询技术主要先解析出所有主机,然后可通过http请求方式测试主机,再决定是否将请求发送到此主机,实现负载均衡。

结构图如下:

图.1

DNS域名解析代码清单:

具体实现转发请求不实现

#!/usr/bin/python#-*- coding: utf-8 -*-import sysimport dns.resolverimport httplibIP=[]def Get_IP_List(domain=""):    AB = None        try:        AB = dns.resolver.query(domain, 'A')    except Exception,e:        print "dns.resolver.query:",str(e)    finally:        if AB is not None:            for i in AB.response.answer:                for j in i.items:            #query第二个参数明明指定是返回'A'记录,测试了一下www.baidu.com,居然'CNAME'也返回了,增加异常处理                #print type(j)                    try:                        IP.append(j.address)                    except Exception,e:                        continue    return Truedef Check_IP(ip, i):    checkurl = ip+":80"    httplib.socket.setdefaulttimeout(5)    conn = httplib.HTTPConnection(checkurl)    ret = None    content = None        try:        conn.request("GET", "/", headers={"Host":sys.argv[i]})        ret = conn.getresponse()        content = ret.read(15)    finally:        if content == "<!DOCTYPE HTML>" or content == "<!doctype html>":            print ip+" [OK]"        else:            print ip+" [ERROR]"if __name__ == "__main__":    arglen = len(sys.argv)    for i in range(1,arglen):        print "-"*20        print sys.argv[i]        Get_IP_List(sys.argv[i])        for ip in IP:            Check_IP(ip, i)        print "-"*20


0 0