crawler_exa2
优化中...
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# Author: Tdcqma '''
v17.0920.1401 基本功能实现,漏洞标题与漏洞链接优化
v17.0922.1800 已实现对【Cisco 漏洞告警】提供受影响的版本信息
v17.0922.1913 优化代码,对版本v17.0922.1800实现函数化
''' import urllib.request
import ssl,re
import smtplib,email
import datetime f = open("secInfo-lvmeng.txt", 'w', encoding='utf-8') #today = str(datetime.date.today()) # 指定以当前时间为搜索条件
today = "2017-09-20" # 临时指定测试时间 # 生产列表保存所有安全漏洞标题
tomcat_sec = ["Apache Tomcat 漏洞告警(当前生产版本为7.0.68)\n\n"]
Cisco_sec = ["Cisco 漏洞告警(当前生产版本为1.0.35)\n\n"]
WebLogic_sec = ["WebLogic 漏洞告警(当前生产版本为10.33)\n\n"]
Microsoft_sec = ["Microsoft 漏洞告警(当前生产版本为windows2012)\n\n"]
Noinfo_sec = "本日无爬虫安全告警.\n\n" tomcat_msg = ''' '''
WebLogic_msg = ''' '''
Cisco_msg = ''' '''
Microsoft_msg = ''' ''' count = 0 # 计算告警漏洞总数
str_domain = "http://www.nsfocus.net"
msg_fl = ""
newline = "" def get_infected_vision(info_sec,info_msg,sub_url): line = " ♠ " + today + " " + title + "\n >> " + sub_url + '\n'
info_msg += line # 逐行读取,将其保存到msg字符变量里。
info_sec.append(line)
global count
count += 1 # 进入漏洞详细页面,调取受影响的漏洞版本
vul_request = urllib.request.Request(sub_url)
vul_response = urllib.request.urlopen(vul_request)
vul_data = vul_response.read().decode('utf-8') # 正则表达式匹配受影响的版本
affected_version = re.findall("<blockquote>.*</blockquote>", vul_data, re.S)
affected_version = " 受影响的版本:" + affected_version[0][12:-13], '\n' for newline in affected_version:
newline = newline.replace('<', '<')
info_sec.append(newline + '\n') for i in range(5): #指定被扫描网站需要扫描的网页数范围,默认读取1-10页,即一天的漏洞个数可能要占用好几个页面
url = "http://www.nsfocus.net/index.php?act=sec_bug&type_id=&os=&keyword=&page=%s" % (i+1)
request = urllib.request.Request(url) # 当尝试访问https开始当站点时,设置全局取消SSL证书验证
ssl._create_default_https_context = ssl._create_unverified_context
response = urllib.request.urlopen(request)
data = response.read().decode('utf-8') if today in data:
# 用于匹配内容的正则表达式部分
str_re = "<.*" + today + ".*"
res = re.findall(str_re, data) for line in res:
title_craw = re.findall("/vulndb/\d+.*</a>", line) # 获取标题
title = title_craw[0][15:-4] url_craw = re.findall("/vulndb/\d+", line) # 获取链接
sub_url = str_domain + url_craw[0] if "Apache Tomcat" in title:
get_infected_vision(tomcat_sec,tomcat_msg,sub_url)
elif "WebLogic" in title:
get_infected_vision(WebLogic_sec,WebLogic_msg,sub_url)
elif "Cisco" in title:
get_infected_vision(Cisco_sec,Cisco_msg,sub_url) # 获取漏洞的受影响版本 elif "Microsoft" in title:
get_infected_vision(Microsoft_sec,Microsoft_msg,sub_url) msg_fl = [tomcat_sec, WebLogic_sec, Cisco_sec,Microsoft_sec]
secu_msg = ''' '''
for i in range(len(msg_fl)):
if len(msg_fl[i]) > 1:
for j in range(len(msg_fl[i])):
secu_msg += msg_fl[i][j]
msg_fl = secu_msg if count == 0 :
msg_fl += Noinfo_sec
msg_fl += ("漏洞告警总数:" + str(count))
else:
msg_fl += ("漏洞告警总数:" + str(count)) f.writelines(msg_fl)
f.close()
# print(msg_fl) # 发送邮件
chst = email.charset.Charset(input_charset = 'utf-8')
header = ("From: %s\nTo: %s\nSubject: %s\n\n" %
("from_mail@163.com",
"to_mail@163.com",
chst.header_encode("[爬虫安全通告-绿盟]"))) # 借用163smtp服务器发送邮件,将上面读到的报警信息作为邮件正文发送。 email_con = header.encode('utf-8') + msg_fl.encode('utf-8')
smtp = smtplib.SMTP("smtp.163.com")
smtp.login("from_mail@163.com","from_mail_password")
smtp.sendmail('from_mail@163.com','to_mail@163.com',email_con)
print('mail send success!')
smtp.quit()
爬虫邮件告警截图:

crawler_exa2的更多相关文章
随机推荐
- git命令详解( 五 )
此篇只会来介绍rebase和merge的区别 rebase merge 区别 rebase 下面我们进行一个小练习来练习一下rebase 看一下题目要求: 共有三个特性分支 —— side1 side ...
- XamarinEssentials教程首选项Preferences判断项目是否存在
XamarinEssentials教程首选项Preferences判断项目是否存在 首选项也可以称为偏好设置.它以键值对的形式保存数据,适用于用户少量数据的存储.例如,将用户的个性化设置保存后,每次打 ...
- BZOJ.5251.[八省联考2018]劈配mentor(最大流)
BZOJ 洛谷 对于每个人,每次枚举一个志愿看是否能增广即可. 对于第二问,可以保留第一问中\(n\)次增广前后的\(n\)张图,二分,在对应图上看是否能增广即可. 貌似匈牙利的某种写法比网络流优多了 ...
- Flask框架返回值
Flask中的HTTPResponse def index(): #视图函数 return 'Hello World' #直接return就是返回的字符串 Flask中的Redirect,和djang ...
- PAT基础6-3
6-3 简单求和 (10 分) 本题要求实现一个函数,求给定的N个整数的和. 函数接口定义: int Sum ( int List[], int N ); 其中给定整数存放在数组List[]中,正整数 ...
- 对学习Ajax的知识总结
1.对Ajax的初步认识 1.1. Ajax 是一种网页开发技术,(Asynchronous Javascript + XML)异步 JavaScript 和 XML: 1.2.Ajax 是异步交互, ...
- bzoj 1005
prufer序列 性质: 1.一棵n个结点的树可表示为长度 n-2 的prufer序列 2.每个结点出现在prufer序列中的次数==该结点的度 -1 公式推出来了,大数模板没有除法..等开学了Jav ...
- PLC300寻址指令
1.寻址图解 2.直接寻址 直接寻址包括两大类,绝对地址寻址和符号地址寻址 绝对地址:由一个标识符和存储器位置组成. 例如:I 0.0 Q 1.7 PIW 256 PQW 512 MD 20 T 15 ...
- GMA Round 1 向量计算
传送门 向量计算 已知$\left |\overrightarrow{AB} \right |^2+\left |\overrightarrow{CD} \right |^2+\left |\over ...
- Wpf 之Canvas介绍
从这篇文章开始是对WPF中的界面如何布局做一个较简单的介绍,大家都知道:UI是做好一个软件很重要的因素,如果没有一个漂亮的UI,功能做的再好也无法吸引很多用户使用,而且没有漂亮的界面,那么普通用户会感 ...