落地域名检测,并实时邮件通知.脚本采用定时任务执行
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from redis import ConnectionPool, Redis
import requests
import json
import logging
from logging import handlers
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

class Logger(object):
    level_relations = {
        'debug':logging.DEBUG,
        'info':logging.INFO,
        'warning':logging.WARNING,
        'error':logging.ERROR,
        'crit':logging.CRITICAL
    }#日志级别关系映射
    #def __init__(self,filename,level='info',when='D',backCount=3,fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
    def __init__(self,filename,level='info',when='midnight',backCount=3,fmt='%(asctime)s - %(levelname)s: %(message)s'):
        self.logger = logging.getLogger(filename)
        format_str = logging.Formatter(fmt)#设置日志格式
        self.logger.setLevel(self.level_relations.get(level))#设置日志级别
        #sh = logging.StreamHandler()#往屏幕上输出
        #sh.setFormatter(format_str) #设置屏幕上显示的格式
        th = handlers.TimedRotatingFileHandler(filename=filename,when=when,backupCount=backCount,encoding='utf-8')#往文件里写入#指定间隔时间自动生成文件的处理器
        #实例化TimedRotatingFileHandler
        #interval是时间间隔,backupCount是备份文件的个数,如果超过这个个数,就会自动删除,when是间隔的时间单位,单位有以下几种:
        # S 秒
        # M 分
        # H 小时、
        # D 天、
        # W 每星期(interval==0时代表星期一)
        # midnight 每天凌晨
        th.setFormatter(format_str)#设置文件里写入的格式

        #self.logger.addHandler(sh) #把对象加到logger里
        self.logger.addHandler(th)

def SendTextMsgByEmail(qq,redlist):
    msg_from='12345678@qq.com'                                 #发送方邮箱
    passwd='xxxxxx'                                   #填入发送方邮箱的授权码
    msg_to=qq+'@qq.com'                                       #收件人邮箱

    subject="服务提醒"                                     #主题     
    content="您好,您下面的域名在微信中已无法访问:" + redlist        #正文
    msg = MIMEText(content, 'plain', 'utf-8')
    msg['Subject'] =  Header(subject, 'utf-8')
    msg['From'] = Header(msg_from, 'utf-8')
    msg['To'] = Header(msg_to, 'utf-8')
    try:
        s = smtplib.SMTP_SSL("smtp.qq.com",465)                  #邮件服务器及端口号
        s.login(msg_from, passwd)                               #登录SMTP服务器
        s.sendmail(msg_from, msg_to, msg.as_string())         #发邮件 as_string()把MIMEText对象变成str
        #print ("发送成功")
    except s.SMTPException:
        #print ("发送失败")
        pass
    finally:
        s.quit()

if __name__ == '__main__':
    pool = ConnectionPool(host='127.0.0.1', port=6379, db=2, decode_responses=True)
    rdb = Redis(connection_pool=pool)

    key = rdb.randomkey()  ## 获取随机key
    #print(key)
    keyValue =  rdb.get(key)## 获取key的值
    #print(keyValue)
    keyTime = rdb.ttl(key) ## 获取key有效时间 秒
    #print(keyTime)
    keyValue = keyValue.replace("\"","").replace("\'","")
    xx = keyValue.split(";")
    nKeyValue = keyValue;
    newkeyValue = xx[1]
    Logger('/var/Logs/gm.log', level='info').logger.info(key + ":" + keyValue+"\n\r")
    if (len(xx) == 2 and newkeyValue) :        
        domainlist = newkeyValue.split(",")
        redlist = ""
        for domain in domainlist:
            try:
                headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
                url = 'http://wx.rrbay.com/pro/wxUrlCheck.ashx?url=' +  domain
                response = requests.get(url,headers=headers)
                html = response.text
                html = json.loads(html)

                if (html['Code'] == "101") :
                    redlist += domain + ","
                    if (len(domainlist) == 1):                    
                        xx[1] = "";

                    else:           
                        xx[1] = xx[1].replace("," + domain, "").replace(domain + ",", "");                    


            except Exception,e:
                html = ''
                Logger('/var/Logs/gmerror.log', level='error').logger.error(e.message+"\n\r")
        nKeyValue = xx[0] + ";" + xx[1]
        if keyTime == -1:
           rdb.set(key,nKeyValue)
        else:
           rdb.setex(key,keyTime,nKeyValue) 
        if(redlist):
            #插入屏蔽的记录
            redStr = "";
            pool1 = ConnectionPool(host='127.0.0.1', port=6379, db=1, decode_responses=True)
            rdb1 = Redis(connection_pool=pool1)
            if (rdb1.exists("Red" + key)):                   
                redStr = rdb1.get("Red" + key);
                redStr = redStr + "," + redlist;

            else:                    
                redStr = redlist;
            if keyTime == -1:
                rdb1.setex("Red" + key, 1088139, redStr);
            else:
                rdb1.setex("Red" + key, keyTime, redStr);

            SendTextMsgByEmail(xx[0],redlist)

定时计划任务,间隔3分钟检测一次

crontab -e

*/3 * * * * /usr/bin/python /var/www/service/GroundMonitor.py


标签:落地域名检测 邮件通知 定时任务