DNSドメイン名ローテーションモニタリング(python)


前言:
通常、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)

これで終わりだ!