DNSドメイン名ローテーションモニタリング(python)
2863 ワード
前言:
通常、1つのIPは1つのドメイン名に対応するが、dns輪訓によって1つのドメイン名を複数のipに対応することができ、これにより負荷均衡の効果を達成することができ、ユーザーがウェブサイトにアクセスすると、異なるipに解析される可能性があり、このipのサーバに異常が発生した場合、この場合、この部分のユーザーがアクセスするページはエラーであり、アクセスできません.このような状況を避けるためには、これらのipノードを監視する必要があります.乾物を開始し、スクリプトをcrontabに追加すれば、リアルタイムで監視できます.
Dnsドメイン名の輪訓監視コードは以下の通りである.
これで終わりだ!
通常、1つのIPは1つのドメイン名に対応するが、dns輪訓によって1つのドメイン名を複数のipに対応することができ、これにより負荷均衡の効果を達成することができ、ユーザーがウェブサイトにアクセスすると、異なるipに解析される可能性があり、このipのサーバに異常が発生した場合、この場合、この部分のユーザーがアクセスするページはエラーであり、アクセスできません.このような状況を避けるためには、これらのipノードを監視する必要があります.乾物を開始し、スクリプトをcrontabに追加すれば、リアルタイムで監視できます.
Dnsドメイン名の輪訓監視コードは以下の通りである.
root@search zhaodong]# cat dns_monitor.py
#!/usr/bin/env python
#coding=utf8
#Author zhaodong
# pydns , A iplist , httplib iplist , 200, dns
import dns.resolver
import os
import httplib
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
# ,
mailto_list=['[email protected]']
#
#########################################
mail_host="smtp.163.com" #
mail_user="zhaodong" #
mail_pass="123456" #
mail_postfix="163.com" #
##########################################
# dns ip
iplist=[]
#
#
dlist=['tshare365.com','baidu.com']
######################################
def send_mail(to_list,sub,content):
me="DNS "+""
msg = MIMEText(content,_subtype='plain',_charset='utf_8')
msg['Subject'] = sub
msg['From'] = me
msg['To'] = ";".join(to_list)
try:
server = smtplib.SMTP()
server.connect(mail_host)
server.login(mail_user,mail_pass)
server.sendmail(me, to_list, msg.as_string())
server.close()
return True
except Exception, e:
print str(e)
return False
def Dns(domain):
A = dns.resolver.query(domain, 'A')
for i in A.response.answer:
for p in i:
iplist.append(p.address)
def Checkip(ip):
try:
httpClient = httplib.HTTPConnection(ip, 80, timeout=30)
# , /
httpClient.request('GET', '/')
#response HTTPResponse
response = httpClient.getresponse()
#
#print response.status
#print response.reason
except Exception, e:
print e
finally:
# 200,
if response.status==200:
# print ip+"[ok]"
else:
# 200 send_mail
send_mail(mailto_list,"DNS ",ip)
# print ip+"[Error]"
if httpClient:
httpClient.close()
if __name__ =="__main__":
#
for d in dlist:
#print d
Dns(d)
for i in iplist:
Checkip(i)
これで終わりだ!