| 关键词: 34 DNS 域名 getcontent iplist http print 业务 testdomain resolver |
今天我们来看一下如何利用python的DNS模块来做一个简单的DNS域名轮循业务监控 DNS轮循技术可以实现一个域名对应多个IP,从而实现最简单且高效的负载均衡。不过这个技术最大的缺点在于当目标主机不可用时,无法被自动删除。本程序通过dns.resolver.query()方法获取业务域名A记录信息,查询出所有IP地址,再使用request()方法以GET方式请求页面,监控业务所有服务器的IP是否正常 代码如下: import dns.resolver import os import http.client iplist = [] testdomain = 'www.baidu.com' #定义业务域名 def get_iplist(domain = ""): try: A = dns.resolver.query(domain,'A') except Exception as e: print ("dns解析错误,错误为:"+str(e)) return for i in A.response.answer: for j 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": testdomain}) #发起URL请求,添加host主机头 r=conn.getresponse() getcontent =r.read(15) #获取URL页面前15个字符,以便做可用性校验 # print(getcontent) # 输出的是b''。需要用bytes转换下 finally: if getcontent==bytes("", 'utf-8'): #监控URL页的内容一般是事先定义好的,比如"HTTP200"等 print (ip+" [OK]") else: print (ip+" [Error]" ) #此处可放告警程序,可以是邮件、短信通知 if __name__=="__main__": if get_iplist(testdomain) and len(iplist)>0: #条件:域名解析正确且至少返回一个IP for ip in iplist: checkip(ip) else: print ("dns resolver error.") 我们以某度为例,进行dns服务器轮循,得到的结果如下图: ![]() 可以看出,解析出两个IP地址,并且服务正常。 如果本文对您有帮助,请关注并点赞,感谢您的观看,如有问题请私信或留言。 |
| 本文出处: https://www.toutiao.com/a6760454352306962957/ |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|