巡风xunfeng代码研究---新建Flask项目模板
生成以下的Flask项目模板
现所缺功能还是很多
如何完成以下的目录架构:
1)在项目下面穿件 aider子目录,db子目录,views子目录,和其他功能模块目录(nascan,masscan,vulscan等),将static和templates目录移动到views目录下
注意: views目录是package,因为新建package目录会生成__init__.py初始化文件
下面就说说:
view目录下的代码说明:
1) static目录放置html页面的css文件和js文件和img图形文件
2) templates放置的是html页面文件
3)lib目录放置的是python文件,是模块文件,含: 数据库连接, excel使用,搜索逻辑,登录状态检查等模块脚本
4) __init__.py文件:
app = Flask(__name__) 创建Flask实例
同时使用FLask的config模块: Flask可以通过以下两步获取到常用变量的值
(1) app.config.from_object(类): 从类对象中获取各种
(2) app.config.get('DB') --DB为类的属性
本例子中,我写了一个Config.py文件,里面定义了ProductConfig类和它的属性
class Config(object): ACCOUNT = 'admin' PASSWORD = 'xunfeng321' class ProductionConfig(Config): DB = '127.0.0.1' PORT = 65521 DBUSERNAME = 'scan' DBPASSWORD = '123456' DBNAME = 'xunfeng'
然后在创建FLask实例的初始文件__init__.py引用定义好的常用变量。已完成数据库的链接等等。
下面的是本项目的核心代码:
视图的路由和核心算法:
View.py:
FLask的优秀算法就是路由算法很简洁易懂
@app.route('/filter')
核心算法分析请看这里————————
# 搜索页 @app.route('/filter') @logincheck def Search() # 搜索结果页 @app.route('/') @logincheck def Main(): # 获取插件信息异步 @app.route('/getplugin', methods=['get', 'post']) @logincheck def Getplugin(): # 新增任务异步 @app.route('/addtask', methods=['get', 'post']) @logincheck def Addtask(): # 任务列表页面 @app.route('/task') @logincheck def Task(): # 复测任务异步 @app.route('/taskrecheck') @logincheck def Recheck(): # 任务详情页面 @app.route('/taskdetail') @logincheck def TaskDetail(): # 删除任务异步 @app.route('/deletetask', methods=['get', 'post']) @logincheck def DeleteTask(): # 下载excel报表异步 @app.route('/downloadxls', methods=['get', 'post']) @logincheck def DownloadXls(): # 插件列表页 @app.route('/plugin') @logincheck def Plugin(): # 新增插件异步 @app.route('/addplugin', methods=['get', 'post']) @logincheck def AddPlugin(): # 删除插件异步 @app.route('/deleteplugin', methods=['get', 'post']) @logincheck def DeletePlugin(): # 统计页面 @app.route('/analysis') @logincheck def Analysis(): # 配置页面 @app.route('/config') @logincheck def Config(): # 配置更新异步 @app.route('/updateconfig', methods=['get', 'post']) @logincheck def UpdateConfig(): # 拉取线上最新插件异步 @app.route('/pullupdate') @logincheck def PullUpdate(): # 检查本地已知的线上插件列表异步 @app.route('/checkupdate') @logincheck def CheckUpdate(): # 安装/下载插件异步 @app.route('/installplugin') @logincheck def installplugin():
登录,登出和异常
# 登录
@app.route('/login', methods=['get', 'post'])
def Login():
if request.method == 'GET':
return render_template('login.html')
else:
account = request.form.get('account')
password = request.form.get('password')
if account == app.config.get('ACCOUNT') and password == app.config.get('PASSWORD'):
session['login'] = 'loginsuccess'
return redirect(url_for('Search'))
else:
return redirect(url_for('Login'))
# 登出异步 @app.route('/loginout') @logincheck def LoginOut(): session['login'] = '' return redirect(url_for('Login')) @app.route('/404') def NotFound(): return render_template('404.html') @app.route('/500') def Error(): return render_template('500.html')
如何启动和查看view
根目录下的Run.py文件就是启动Flask项目的入口文件。但是关启动这个还不行,因为这个是跟mongodb连接,所以要保证mongodb处于运行状态:
start mongod.exe --port 65521 --dbpath Data --auth
同时这个巡风系统还有其他的服务模块: aider,nascan,vulscan等等。所以需要按顺序写一个启动脚本(linux下的是sh文件 ,windows下是bat文件),按顺序启动对应的服务。
start mongod.exe --port 65521 --dbpath Data --auth start python Run.py start python aider/Aider.py start python nascan/NAScan.py start python vulscan/VulScan.py
当然可以使用supervisorctl 工具(只针对linux下,不支持windows),启动对应的服务。
其中Run.py
from views.View import app if __name__ == '__main__': app.debug = True app.run(threaded=True, port=80,host='127.0.0.1')
就是定义好Flask实例同时 定义好应用启动的端口和IP,以及是否使用debug模式和支持多线程
flask使用threaded模式,可以支持并发访问