扫描器之自动生成网页报告
一、实验介绍
1.1 实验内容
前面我们写了很多功能模块,信息都是输出到控制台上的,有时候信息多了的时候根本看不过来,我们这节课做的就是将结果存储下来写到文件,然后写个网页生成器来自动生成网页报告。
最后结果是这样哒,是不是感觉酷酷的?
1.2 实验知识点
- 数据收集与输出
1.3 实验环境
- Python2.7
- Xfce终端
- Sublime
1.4 适合人群
本课程难度为一般,属于初级级别课程,适合具有Python基础的用户,熟悉python基础知识加深巩固。
1.5 代码获取
$ wget http://labfile.oss.aliyuncs.com/courses/761/shiyanlouscan9.zip
$ unzip shiyanlouscan9.zip
二、实验内容
2.1 定义结果输出类
我们需要创建一个结果输出类,用这个类来收集数据,输出数据,并且可以写到hmtl中生成网页报告。
定义一个ouputer
类
类中我们定义几个函数即可:
class outputer
def add(self,key,data):通过字典方式添加数据
def add_list(self,key,data): 通过列表方式添加数据
def get(self,key):获取某个数据
def show(self):显示加入的数据
def build_html(self,name):生成网页 name为保存的文件名
2.2 完整代码
类中实列一个变量,因为类定义的时候实例化的变量是不会改变的。
完整代码:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
class outputer:
data = {}
def get(self,key):
if key in self.data:
return self.data[key]
return None
def add(self,key,data):
self.data[key] = data
def add_list(self,key,data):
if key not in self.data:
self.data[key] = []
self.data[key].append(data)
def show(self):
for key in self.data:
print "%s:%s"%(key,self.data[key])
def _build_table(self):
_str = ""
for key in self.data:
if isinstance(self.data[key],list):
_td = ""
for key2 in self.data[key]:
_td += key2 + '</br>'
_str += "<tr><td>%s</td><td>%s</td></tr>"%(key,_td)
else:
_str += "<tr><td>%s</td><td>%s</td></tr>"%(key,self.data[key])
return _str
def build_html(self,filename):
html_head = '''
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="gbk">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>W8ayscan Report</title>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container container-fluid">
<div class="row-fluid">
<div class="span12">
<h3 class="text-center">
W8ayscan Report
</h3>
</BR>
<table class="table table-bordered">
<thead>
<tr>
<th>
title
</th>
<th>
content
</th>
</tr>
</thead>
<tbody>
build_html_w8ayScan
</tbody>
</table>
</div>
</div>
</div> </body>
</html>'''.replace("build_html_w8ayScan",self._build_table())
file_object = open(filename+'.html', 'w')
file_object.write(html_head)
file_object.close()
保存在/lib/core/outputer.py
。
2.3 使用方法
在需要的地方
from lib.core import outputer
output = outputer.outputer()
来初始化,通过output.add()
或者output.add_list()
加入数据,
在功能模块中显示数据的地方将数据添加进来即可。
比如这是w8ay.py
中的。
但是数据打印出来的地方都是在每个功能模块的内部实现的,所以我们要在每个功能模块中类似加入。是的,每个。。。
web敏感文件扫描模块加入
端口扫描中加入
等等。。 只要是功能模块输出的地方全部加上这个类,爬虫插件里面也要加上。
最后,在主调度程序每调用完一个程序后生成一次html。
扫描器运行截图
生成的网页报告
三、总结
至此,扫描器课程已经完结了,还记得第一节课的扫描器脑图吗
已经完成了其中大部分的功能,有部分功能在后期编写过程中感觉不需要了,所以没有加上,其实,如果学完了这个系列课程的话,相信大家已经有一个基本的制作扫描器的概念了。