通过关键字获取漏洞平台最新漏洞信息
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,因要每天去查找漏洞信息,来判断架构和应用服务有没有新漏洞被发现,若有 则需修复升级。所以写了一个去漏洞库平台通过关键字爬取数据生成日志文件,这三个平台,就美国国家信息安全漏洞库地址会时不时出现超时情况
千家信息网最后更新 2025年01月20日通过关键字获取漏洞平台最新漏洞信息
因要每天去查找漏洞信息,来判断架构和应用服务有没有新漏洞被发现,若有 则需修复升级。所以写了一个去漏洞库平台通过关键字爬取数据生成日志文件,这三个平台,就美国国家信息安全漏洞库地址会时不时出现超时情况。若出现超时,可多试两次,三个平台检索出的漏洞差不多,写的不好,仅供参考
python版本3.7pip安装requests即可#coding=utf-8import requests as rimport reimport timeimport 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_listif __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()
漏洞
信息
时间
数据
国家
地址
检索
安全
安全漏洞
中文
关键
数组
格式
结果
美国
关键字
平台
信息库
文件
简介
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广东尚睿网络技术公司
湖南美音网络技术有限公司微信
郑州亨瑞软件开发有限公司公告
网络安全需要数学
西安路客互联网科技
免费服务器体验
哪些数据库用b 树
苏州企业软件开发哪个好
日本水资源数据库
教育部网络安全专题研讨班
网络安全教案中班
进服务器找文件管理
哈尔滨软件开发公司排行榜
阿拉尔租房网络安全
导航怎么看服务器名字
放在水里的服务器
深圳市云创网络技术有限公司
jsp登录查询数据库
数据库管理的教案
河南鹤壁网络安全
jdbc连接关系数据库
怡分钟互联网科技
网络安全活动周2020
app程序一般用什么数据库
数据库面试经验
软件开发完成后最麻烦的是什么
收缩300g数据库
qq怎么设置网络和服务器
acess数据库对象的视图
web服务器监控软件
相关文章