因要每天去查找漏洞信息,来判断架构和应用服务有没有新漏洞被发现,若有 则需修复升级。所以写了一个去漏洞库平台通过关键字爬取数据生成日志文件,这三个平台,就美国国家信息安全漏洞库地址会时不时出现超时情况。若出现超时,可多试两次,三个平台检索出的漏洞差不多,写的不好,仅供参考
python版本3.7
pip安装requests即可
#coding=utf-8
import requests as r
import re
import time
import datetime
#爬取国家信息安全漏洞平台
class gjxxaqpt:
def get_404(self,url,keyword):
#定义提交数据 qcvCname 检索的词,pageno 页数 一般是抓取第一页
data = {"qcvCname":keyword,"pageno":1}
#post数据
result = r.post(url,data=data).text
#正则匹配信息
filter_result = re.findall('\r\n \t\t (.*?).*?(.*?).*?
.*?
\n(.*?)\r\n\t\t\t
',result,re.S)
if filter_result is not None:
return filter_result[0]
else:
return ""
except:
print("连接超时"+url)
def write_file(self,keyword,date_time):
#定义post的url
url = "http://www.cnnvd.org.cn/web/vulnerability/queryLds.tag"
#定义后面组合信息需要的域名
url_domain = "http://www.cnnvd.org.cn"
#存放最后结果数据的数组
mes_list = []
#循环检索关键词
for keyword in keylist:
try:
#调用方法获取检索的结果
get_404_re = self.get_404(url,keyword)
#循环结果,拼接成字符串,写入log文件
for res in get_404_re:
#判断包含本年日期的漏洞
if date_time in res[4]:
mes_url = url_domain + res[1]
try:
message = self.get_404_mes(mes_url)
mes = res[0] + " | " "漏洞编号:" + res[2] + " | " + "等级:" + res[3] + " | " + "时间:" + res[4] + " | " + "详情地址:" + mes_url + " | " + "漏洞简介:" + message
mes_list.append(mes)
except:
print("timeout: "+mes_url)
except:
print("timeout:"+url+","+"keyword")
return mes_list
#cve中文漏洞信息库 - scap中文社区
class cve_scap:
#获取所有漏洞集合
def get_cve_404(self,url,keyword):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}
#定义提交数据 qcvCname 检索的词,pageno 页数 一般是抓取第一页
data = {"search_type":"t_keyword","keyword":keyword}
#post数据
result = r.get(url,params=data).text
filter_result = re.findall(".*?\n (.*?)\n .*? .*?title='(.*?)' class='grade",result,re.S)
return filter_result
#对单个漏洞信息获取
def get_cve_404_mes(self,url):
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}
try:
result = r.get(url,headers=header).text
filter_result = re.findall("pad30T pad30B mrg0B' style='word-wrap: break-word;'>\n (.*?)",result,re.S)
if filter_result is not None:
return filter_result[0]
else:
return ""
except:
print("timeout: " + url)
#信息获取
def write_file(self,keylist,date_time):
#定义post的url
url = "http://cve.scap.org.cn/vulns/1"
#定义数组,存放信息
mes_list = []
for keyword in keylist:
#爬取网站
html_filter = self.get_cve_404(url,keyword)
#定义后面组合信息需要的域名
url_domain = "http://cve.scap.org.cn"
for res in html_filter:
if date_time in res[2]:
try:
mes_url = url_domain + res[0].strip('"')
message = self.get_cve_404_mes(mes_url)
mes = "漏洞编号:" + res[1] + " | " + "等级:" + res[3] + " | " + "时间:" + res[2] + " | " + "详情地址:" + mes_url + " | " + "漏洞简介:" + message.replace("\n","")
mes_list.append(mes)
except:
print("timeout: "+mes_url)
return mes_list
#美国国家信息安全漏洞库
class nvd_nist:
#获取所有漏洞集合
def get_nvd_404(self,url,keyword):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}
#定义提交数据 qcvCname 检索的词,pageno 页数 一般是抓取第一页
data = {"form_type":"Basic","results_type":"overview","query":keyword,"search_type":"all"}
#关闭ssl告警提示
r.packages.urllib3.disable_warnings()
#post数据
result = r.get(url,params=data,verify=False).text
filter_result = re.findall("(.*?)
.*?(.*?)
.*?(.*?)",result,re.S)
return filter_result
def write_file(self,keylist,date_time):
#查找漏洞的url地址
url = "https://nvd.nist.gov/vuln/search/results"
#拼接url的地址
url_dom = "https://nvd.nist.gov"
#存储最后结果的数组
mes_list = []
#循环获取关键字的漏洞信息
for keyword in keylist:
try:
filter_html = self.get_nvd_404(url,"nginx")
for res in filter_html:
url_domain = url_dom + res[0]
#对英文的时间格式进行转换
eng_time = res[3]
if "AM" in eng_time:
up_time = eng_time.split("AM")[0]
elif "PM" in eng_time:
up_time = eng_time.split("PM")[0]
else:
print("时间判断有误")
#我获取到的时间是英文的时间格式,需要转换为数字时间格式,这里时间字符串和里面的时间格式要保持一次,差一个空格,也不行
time_format=str(datetime.datetime.strptime(up_time,'%B %d, %Y; %H:%M:%S '))
if date_time in time_format:
mes = "漏洞编号:" + res[1] + " | " + "时间:" + time_format + " | " + "详情地址:" + url_domain + " | " + "漏洞简介:" + res[2]
mes_list.append(mes)
except:
print("timeout:" + url + "," + keyword)
return mes_list
if __name__ == "__main__":
#需要查找的关键字数组
keylist=['nginx','openssl','openssh']
#获取本年的日期
date_time = time.strftime("%Y",time.localtime())
#打开写入log文件
files = open("404_message.log","w+",encoding='utf-8')
#获取国家信息漏洞库
guojia = gjxxaqpt()
files.write("#国家信息漏洞库:\n")
for i in guojia.write_file(keylist,date_time):
files.write(i+"\n")
files.write("\n")
#cve中文漏洞信息库 - scap中文社区 查找
cve = cve_scap()
files.write("#cve中文漏洞信息库:\n")
for i in cve.write_file(keylist,date_time):
files.write(i+"\n")
files.write("\n")
#美国国家信息安全漏洞库 查找
nvd = nvd_nist()
files.write("#美国国家信息安全漏洞库:\n")
for i in nvd.write_file(keylist,date_time):
files.write(i+"\n")
files.write("\n")
files.close()
上一篇:H3C基本配置
相关内容
热门资讯
局势有变,韩国货船被炸?李在明...
局势有变,韩国货船到底是因为什么被炸?李在明考虑下场护航,这将引发怎样的连锁反应?美国和伊朗之间的停...
“五一”两起野外事故敲响老年出...
“五一”假期,不少市民外出踏青游玩,山野间的安全隐患也随之增多。近日,卫辉市斑马应急救援队接连处置两...
进口马铃薯“逐颗检查”?岛内名...
海峡导报综合报道 新党籍台北市议员侯汉廷指控,民进党为配合“台美贸易协定(ART)”,放宽174项农...
燃气灶的火为什么会突然灭掉
原因是燃气灶的电池没有电了,需要拆掉电池盒更换一个新的电池;还有可能是燃气用完了,可以充值燃气;还有...
燃气灶的控制器坏了怎么修
控制器内部都是由复杂的电子元件组成的,所以当燃气灶的电子控制器坏了,一般都是需要直接更换燃气灶的控制...
燃气灶为什么外圈蓝火苗内圈红火...
燃气灶充分燃烧的情况下应该是呈蓝色火焰,这个时候产生的热能值最高,也最安全。出现“红火”主要是以下原...
燃气灶一用中间就没火是什么原因
原因可能是电池没电了,建议更换电池解决一下;还有就是点火针发方向可能倾斜,建议调整点火针的方向,对准...
燃气灶为什么外圈没火
原因可能是因为点火针位置不当,通常情况下点火针与火盖之间的距离控制在4至6毫米,且需要对准火孔,而且...
批民进党当局完全脱离民意,蓝营...
海峡导报综合报道 国民党台北市议员参选人李明璇6日提及台湾地区领导人赖清德以及台行政机构负责人卓荣泰...
五月天“宠己”正当时
【核心提示】消费是经济发展的晴雨表。如今,有人为一场演唱会奔赴一座城;有人心甘情愿为宠物买单;也有人...