爬取阿里云安全公告实现漏洞告警通知
群里无意中讨论了。监控漏洞平台的那些安全预警
然后发现阿里云的安全公告挺及时的。就造了一个轮子。 emmm
此代码基于宝塔面板开发的。记得安装宝塔面板才能执行哦
代码如下:(代码你只需要修改你的邮箱。STMP密码。和stmp HOST , 需要发送的邮箱)
#!/usr/bin/python # coding: utf-8 # Author: 1249648969@qq.com # 漏洞预警 import sys, os import smtplib from email.mime.text import MIMEText from email.utils import formataddr if sys.version_info[0] == 2: reload(sys) sys.setdefaultencoding('utf-8') os.chdir('/www/server/panel') sys.path.append("class/") import time,requests,re,public class pa_main: my_mail='1249648969@qq.com' ####发送邮件的信息 stmp_pass='xxx' ##发送邮件的STMP stmp='smtp.qq.com' # 发送邮件的STMP host to_mail = ["1249648969@qq.com"] #需要发送的邮箱 headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3)AppleWebKit / 535.20(KHTML, like Gecko) Chrome / 19.0.1036.7Safari / 535.20', } #数据库标识符号 __sql_path = '/tmp/sql_path___333______.path' def __init__(self): if not os.path.exists(self.__sql_path): public.M('sites').execute('''CREATE TABLE "wen_data" ( "id" INTEGER NOT NULL, "title" TEXT, "url" TEXT, "wen_url" TEXT, "ok" TEXT, PRIMARY KEY ("id") );''') os.system('touch %s'%self.__sql_path) def pa(self,url): wen_zhang=[] data = requests.get(url=url, headers=self.headers, verify=False) data22=re.findall('''<a class="notice-list-item" href="(.*)">''',data.text) try: for i2 in data22: wen_data={} title = re.findall('<a class="notice-list-item" href="%s">\s(.*)\s(.*)\s(.*)' % i2, data.text) title = title[0] if not len(title)==3:continue title = re.findall('<div class="title">(.*)</div>', title[2]) wen_data['title']=title[0] wen_data['url']='https://m.aliyun.com%s'%i2 wen_zhang.append(wen_data) return wen_zhang except: self.mail(self.my_mail, self.stmp_pass, '1249648969@qq.com','爬虫挂了', '爬虫挂了') return [] # 存入数据库中 def insert_data(self,data): print('存入数据库中') if len(data)==0:return False for i in data: if public.M('wen_data').where('url=?', (i['url'],)).count() ==0: list_data={"url":i['url'],"title":i['title'],"wen_url":'',"ok":False} public.M('wen_data').insert(list_data) print('数据库中已经存储OK') return True def get_html(self): list_data = public.M('wen_data').select() for i in list_data: if not 'm.aliyun.com' in i['url']: continue if i['ok'] == '0': for i2 in self.to_mail: time.sleep(1) send_html='<br>阿里云漏洞预警平台__</br><a href=%s>%s</a><br></br><br>'%(i['url'],i['title']) #微信发送成 if self.mail(self.my_mail,self.stmp_pass,i2,'阿里云漏洞预警平台'+i['title'],send_html): print('发送邮件成功%s'%i2) list={"ok":'1'} public.M('wen_data').where('url=?', (i['url'],)).update(list) else:print('发送邮件失败%s'%i2) print('已经全部搞定了') #发送邮件 def mail(self,my_sender, my_pass, my_user, title, body): time.sleep(10) ret = True try: msg = MIMEText(body, 'html', 'utf-8') msg['From'] = formataddr([my_sender, my_sender]) msg['To'] = formataddr([my_user, my_user]) msg['Subject'] = title server = smtplib.SMTP_SSL(self.stmp, 465) server.login(my_sender, my_pass) server.sendmail(my_sender, [my_user, ], msg.as_string()) server.quit() except Exception: ret = False return ret aa=pa_main() print('爬取阿里云漏洞公告') aa.insert_data(aa.pa('https://m.aliyun.com/doc/notice_list/9213612.html')) aa.get_html()
测试咯
然后新建一个计划任务每3个小时执行一次