国家漏洞库
目标
从国家信息安全漏洞库(CNNVD)中爬取目标软件的相关漏洞,统计漏洞类型、危害等级、相关数量等,并进行可视化。
具体流程
- 构造URL,根据关键词(如glibc)爬取相关软件的漏洞信息,统计其数量和网页数
- 构造URL,一个一个网页的爬取,找到每个具体漏洞的链接,保存这些链接
- 根据每个具体漏洞的链接,爬取相关页面,用正则表达式和BeautifulSoup找到我们需要的链接。
代码实现
- 爬取网页并保存到excel文件中
# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
import traceback
import re
import xlwt
list=['glibc','Microsoft Office word','microsoft internet explorer']#想要查询的相关漏洞
num=[] # 存放每个实体对应的漏洞数目
page=[]# 存放每个实体对应的漏洞的页数
# 根据url爬取网页
def getHTMLTEXT(url,code="utf-8"):
kv = {'user-agent': 'Mozilla/5.0'} # 模拟浏览器访问网站
try:
r=requests.get(url,headers=kv,timeout=30)
r.raise_for_status()
r.encoding=code
return r.text
except:
traceback.print_exc()
return ""
# 初始网页
def parsepage(name,url):
type={}# 存放每个实体中的漏洞类型
html=getHTMLTEXT(url)
soup=BeautifulSoup(html,'html.parser')
#每个类型的数量
#text=soup.find_all('a',text=re.compile('总条数:'))
#num.APPend(re.findall(r'[0-9,]+',text.__str__()[:][:]))
#统计当前实体搜索结果共有多少页
value = soup.find_all('input',id="pagecount")
page.append(re.findall(r'[0-9]+',value.__str__()))
#爬取对应漏洞下所有的网页
def all_page(name,url,n):
type=[] #漏洞类型
level=[] #漏洞危害等级
name_info=[]#每个漏洞的名称
link=[] #每个漏洞的链接
#循环遍历每个网页
for p in range(1,int(n)+1):
html=getHTMLTEXT(url+str(p))
soup = BeautifulSoup(html, 'html.parser')
# 统计每个实体中具体漏洞的链接
text = soup.find_all('a',attrs={'class':'a_title2'})
for i in text:
try:
href = i.attrs['href']
if(re.findall(r'.?CNNVD.?',href)):
link.append(href)
except:
continue
#对于每一个链接,去爬取链接的页面
for i in link:
html=getHTMLTEXT('http://www.cnnvd.org.cn'+i)
soup = BeautifulSoup(html, 'html.parser')
title=soup.find_all('h2',style="")
for m in title[0]:
title=m #每个漏洞的具体名称
#寻找类型和等级
text=soup.find_all('a',style="color:#4095cc;cursor:pointer;",href="")
S=[]
if len(text):
for t in text[:2]:
t=re.findall(r'[\u4E00-\u9FA5]+',str(t)) #匹配汉字
try:
S.append(t[0])
except:
S.append('未评定')
type.append(S[0])
level.append(S[1])
name_info.append(title)
#将列表信息写入EXCEL中
f = xlwt.Workbook() # 创建EXCEL工作簿
sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True) # 创建sheet
sheet1.write(0, 0, "漏洞名称")
sheet1.write(0, 1, "类型")
sheet1.write(0, 2, "危害等级")
for i in range(len(name_info)):
sheet1.write(i + 1, 0, name_info[i])
sheet1.write(i + 1, 1, type[i])
sheet1.write(i + 1, 2, level[i])
f.save(name+"_result.xls") #保存文件
if __name__=="__main__":
url='http://www.cnnvd.org.cn/web/vulnerability/queryLds.tag?qcvCname='
for i in list:
parsepage(i,url+i)
for i in range(len(list)):
turl=url+list[i]+'&pageno='
all_page(list[i],turl,page[i][0])
#创建工作簿
f=xlwt.Workbook()#创建EXCEL工作簿
sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True) # 创建sheet
for i in range(len(num)):
sheet1.write(i,0,list[i])
sheet1.write(i,1,num[i])
f.save("实体总量.xls")
生成的文件如下所示
2. 统计数据
import xlrd
import xlwt
import traceback
def open_excel(path,name):
type={}
level={}
try:
data=xlrd.open_workbook(path)
table=data.sheet_by_name(sheet_name=u'sheet1')
t=table.col_values(1)[1:]
l=table.col_values(2)[1:]
#去掉重复值
t1=set(t)
l1=set(l)
#初始化字典
for i in t1:
type[i]=0
for i in l1:
level[i]=0
#统计数量
for i in t:
type[i]=type[i]+1
for i in l:
level[i]=level[i]+1
f = xlwt.Workbook() # 创建EXCEL工作簿
tkeys=list(type.keys())
sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True) # 创建sheet
for i in range(len(tkeys)):
sheet1.write(i, 0,tkeys[i])
sheet1.write(i, 1,type[tkeys[i]])
sheet2=f.add_sheet(u'sheet2',cell_overwrite_ok=True)
lkeys=list(level.keys())
for i in range(len(lkeys)):
sheet2.write(i,0,lkeys[i])
sheet2.write(i,1,level[lkeys[i]])
f.save(name+'_sum_up.xls')
except :
traceback.print_exc()
print('ERROR!')
if __name__=="__main__":
path=['glibc_result.xls',
'Microsoft Internet Explorer_result.xls',
'Microsoft Office Word_result.xls']
name=['glibc','Microsoft Internet Explorer','Microsoft Office Word']
for i in range(len(path)):
open_excel(path[i],name[i])
统计后的数据如下所示
结果可视化
用EXCEL将数据绘图,实现可视化,下面给出一例。
相关阅读
目标站点与分析 访问http://www.globaltimes.cn 站点,可以看到目标站点分为几大新闻板块,大板块下还有其他子板块,其中还包含了视频
LocationManager、Geocoder获取当前位置
参考:Android获取当前位置的经纬度 示例: public class MainActivityI extends Activity { private LocationUtils locat
C++常用的取整函数有三个ceil,floor,round ceil的英文释义:装天花板,装船内格子板;函数功能是向上取整 floor的英文释义:楼层; 地面,地板
由于国内应用市场趋于成熟稳定,用户增量较少,超级应用的格局难以撼动,相似的应用形态竞争激烈。因此,不妨把目光转向小米最大最成功的
手机淘宝红包怎么领取?手机淘宝是淘宝网官方出品的手机应用软件,整合旗下团购产品天猫,聚划算,淘宝商城为一体,手机淘宝不仅购物方便,里