大部分的DNS解析是一个域名对应一个IP地址,但是通过DNS轮循技术可将一个域名对应多个IP地址,这样可以实现简单且高效的负载平衡,但是轮循技术有一个缺点就是当目标主机不可用时,不能自动的删除,所以引出了要对业务主机的服务的可用性进行监控。

本例通过分析当前域名的解析IP,再结合服务端口探测来实现自动监控,在域名解析中添加、删除IP时,无须对监控脚步更改。

! Python 2.x中的"httplib"模块在Python 3.x中变为"http.client"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/python3
#
import dns.resolver
import os
import http.client
iplist=[]   #定义域名IP列表变量
appdomain="www.google.cn"   #定义业务域名
def get_iplist(domain=""): #域名解析函数,解析成功IP将被追加到iplist
    try:
        = dns.resolver.query(domain, 'A')  #解析A记录类型
    except Exception as e:
        print ("dns resolver error: ")+str(e)
        return
    for in A.response.answer:
        for in i.items:
            iplist.append(j.address)    #追加到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": appdomain})        #发起url请求,添加host主机头
        = conn.getresponse()
        getcontent = r.read(15)       #获取url页面前15个字符,以便做可用性校验
    finally:
        if getcontent == "<!doctype html>":   #监控URL页的内容一般是事先定义好的,比如"HTTP200"等
            print (ip+" [OK]")
        else:
            print (ip+" [Error]"#此处可放告警程序,可以是邮件、短信通知
if __name__ == "__main__":
    if get_iplist(appdomain) and len(iplist)>0:   #条件:域名解析正确且至少返回一个IP
        for ip in iplist:
            checkip(ip)
    else:
        print ("dns resolver error.")

      本文转自谢育政 51CTO博客,原文链接:http://blog.51cto.com/kurolz/1935044,如需转载请自行联系原作者

Python学习笔记-DNS域名轮循业务监控相关推荐

  1. Python学习笔记-DNS处理模块dnspython

    DNS处理模块dnspython     dnspython是python实现的一个DNS工具包,它支持几乎所有的记录类型,可以用于查询.传输并动态更新ZONE信息,同时支持TSIG(事务签名)验证消 ...

  2. Python学习笔记:异步IO(1)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  3. Deep learning with Python 学习笔记(6)

    本节介绍循环神经网络及其优化 循环神经网络(RNN,recurrent neural network)处理序列的方式是,遍历所有序列元素,并保存一个状态(state),其中包含与已查看内容相关的信息. ...

  4. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

  5. Python学习笔记(六)

    1. IO编程 1.1 文件读写 1.2 StringIO和BytesIO 1.3 操作文件和目录 1.4 序列化 2. 进程和线程 2.1 多进程 2.2 多线程 2.3 ThreadLocal 2 ...

  6. Python学习笔记:Day15 部署Web App

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  7. Python学习笔记:web开发3

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  8. Python学习笔记:web开发2

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  9. Python学习笔记:web开发1

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

最新文章

  1. 建立实体-关系模型2
  2. 在centos6.4下安装python3.5
  3. python花钱培训值吗-Python培训费用高不高?Python培训真的值得吗?
  4. TCP之超时重传机制
  5. #论文 《ImageNet Classification with Deep Convolutional Neural Networks》
  6. 一个QQ旋风的BUG
  7. P3168 [CQOI2015]任务查询系统 主席树 + 差分
  8. 再送一波干货,测试2000线程并发下同时查询1000万条数据库表及索引优化
  9. Mobile and MID opportunities in APAC
  10. 鸿蒙硬件HI3861-MQTT-连接华为云
  11. java简单功能测试,java 自动化测试小功能集锦
  12. fpga数电基础之--------触发器
  13. registerClassAlias()函数和getClassByAlias()函数
  14. java集合学习笔记--二维集合HashMap
  15. 这40个Python可视化图表案例,强烈建议收藏!
  16. 目标跟踪 SiamFC++ (Towards Robust and Accurate Visual Tracking with Target Estimation Guidelines)
  17. 杰奇python采集器_linux下能完美运行的杰奇采集器ckp
  18. 初识内存控制器和SDRAM【一文了解】
  19. python剪切文件到另外路径_python剪切文件
  20. 自然语言处理系统NLP之拼写纠错

热门文章

  1. 手机端viewport的设置规范
  2. Jackson 框架使用说明,轻易转换JSON【转】
  3. Vim as Python IDE on windows(转)
  4. 课程名称翻译大全(zz)
  5. MSDE2000的安装方法
  6. 伪指令PAGE和TITLE说明
  7. 检测子进程的结束返回状态,status的取值可以是哪些?(简析)
  8. 敏捷 - #9 原则:持续关注卓越的技术和良好的设计 ( #9 Agile - Principle)
  9. Amazon Go亮相:消费者无需结账即可完成店面购物
  10. Access2007中如何运行SQL执行SQl语句