起因是公司对客户进行了一次漏扫出来1000多个存活IP,由于扫描器是绿盟的没有总表,然后公司有要求将部门和IP对应然后理出每个IP中存在的中高危的漏洞及解决办法(这个解决办法只存在于)筛选下来发现200来个IP,要在这一千多个excl表中一张张的翻有点受不了于是决定写一个脚本来实现对需要数据的提取。
首先理出来需要的厂商名及对应IP以公司名为排序依据如下命名为name.xls
绿盟的主机扫描结果为主机IP.xls
需要的数据在该表的第二张分表里
所以大致思路为
- 获取第一张存储厂商IP表(name.xls)的内容
- 建立厂商为依据的分表
- 将获取到的IP拼接形成需要的文件名并获取数据写入对应分表
- 保存文件
具体代码如下
# coding=utf-8
# -*- coding:utf-8 -*-
import xlrd
import xlwt
workbook = xlwt.Workbook(encoding='utf-8')#打开写入空间设置编码模式
worsheet = workbook.add_sheet('count')
pw = xlrd.open_workbook("G:/4444/name.xls")#打开厂商IP表
sheet = pw.sheet_by_index(0)
tab = pw.sheets()[0]
anrow = tab.nrows # 获取总行数
a = 1
for j in range(anrow):
ip = tab.cell(j, 1).value
if j==0 :
part=tab.cell(j, 0).value
worsheet = workbook.add_sheet(part)#创建一张以部门为名称的分表
worsheet.write(0, 0, '厂商/部门')#设置表头
worsheet.write(0, 1, 'IP')
worsheet.write(0, 2, '漏洞名')
worsheet.write(0, 3, '漏洞等级')
worsheet.write(0, 4, '整改措施 ')
worsheet.write(0, 5, '是否整改')
worsheet.write(0, 6, '未整改原因')
else: #建立分表
if part !=tab.cell(j, 0).value:
part=tab.cell(j, 0).value
worsheet = workbook.add_sheet(part)
worsheet.write(0, 0, '厂商/部门')
worsheet.write(0, 1, 'IP')
worsheet.write(0, 2, '漏洞名')
worsheet.write(0, 3, '漏洞等级')
worsheet.write(0, 4, '整改措施 ')
worsheet.write(0, 5, '是否整改')
worsheet.write(0, 6, '未整改原因')
a=1 #重置到分表第二行
filename = "G:/4444/" + ip + '.xls' #文件绝对路径
excel = xlrd.open_workbook(filename) # 打开excel文件
sheet = excel.sheet_by_index(0) # 获取工作薄
table = excel.sheets()[1]
anrows = table.nrows # 获取主机漏洞行数
for i in range(anrows):
cell = table.cell(i, 5).value# 漏洞等级
if cell == u"[中]" or cell == u"[高]":
name = table.cell(i, 3).value#漏洞名称
soulve = table.cell(i, 18).value#解决办法
worsheet.write(a, 0, part)
worsheet.write(a, 1, ip)
worsheet.write(a, 2, name)
worsheet.write(a, 3, cell)
worsheet.write(a, 4, soulve)
a = a + 1
workbook.save('result.xls') # 保存文件
结果如图每个厂商都建立了一张分表保存他们的主机IP及对应的漏洞名