DNS域名轮循业务监控
2016-07-24 13:38
435 查看
我们一般的DNS解析是一个域名对应一个IP地址,但是若我们用DNS轮循技术即可将一个域名对应多个IP地址,这样可以实现简单且高效的负载平衡,但是轮循技术有一个缺点就是当目标主机不可用时,不能自动的删除,所以引出了要对业务主机的服务的可用性进行监控。
具体流程是利用dnspython模块的resolver.query()函数对域名进行解析,获取域名的所有A记录的IP地址,再是对每一个IP地址进行HTTP级别的探测。
以下给一个检测baidu.com的目标主机是否可用。
import dns.resolver
import httplib
import os
iplist = []
appdomain = “baidu.com” #host域名
def get_iplist(domain = “”):
try:
A = dns.resolver.query(appdomain, “A”)
except Exception, e:
print “dns resolver error:” + str(e)
return
for i in A.response.answer:
for j in i.items:
if j.rdtype == 1:
iplist.append(j.address)
else:
pass
return True
def checkip(ip):
conn = httplib.HTTPConnection(ip, 80, False, 5)
try:
conn.request(“GET”, “/”, headers = {“Host”:appdomain})
r = conn.getresponse()
getcontent = r.read(6)
if getcontent == “”: #每一个域名发送回来的数据都不同这里必须是特定的
print ip + ” [OK]”
else:
print ip + ” [Error]” #
except:
pass
if name == “main“:
if get_iplist(appdomain) and len(iplist) > 0:
for ip in iplist:
checkip(ip)
else:
print “dns resolver error”
我们其实可以将这个脚本放入crontab中定时运行。
具体流程是利用dnspython模块的resolver.query()函数对域名进行解析,获取域名的所有A记录的IP地址,再是对每一个IP地址进行HTTP级别的探测。
以下给一个检测baidu.com的目标主机是否可用。
# -*- coding: utf-8 -*-
import dns.resolver
import httplib
import os
iplist = []
appdomain = “baidu.com” #host域名
def get_iplist(domain = “”):
try:
A = dns.resolver.query(appdomain, “A”)
except Exception, e:
print “dns resolver error:” + str(e)
return
for i in A.response.answer:
for j in i.items:
if j.rdtype == 1:
iplist.append(j.address)
else:
pass
return True
def checkip(ip):
conn = httplib.HTTPConnection(ip, 80, False, 5)
try:
conn.request(“GET”, “/”, headers = {“Host”:appdomain})
r = conn.getresponse()
getcontent = r.read(6)
if getcontent == “”: #每一个域名发送回来的数据都不同这里必须是特定的
print ip + ” [OK]”
else:
print ip + ” [Error]” #
except:
pass
if name == “main“:
if get_iplist(appdomain) and len(iplist) > 0:
for ip in iplist:
checkip(ip)
else:
print “dns resolver error”
我们其实可以将这个脚本放入crontab中定时运行。
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- 如何使用 bind 设置 DNS 服务器
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例