爬取阿里云安全公告实现漏洞告警通知
群里无意中讨论了。监控漏洞平台的那些安全预警
然后发现阿里云的安全公告挺及时的。就造了一个轮子。 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个小时执行一次



