告别手动整理!用Python脚本NessusToReport一键生成中文漏洞报告(附百度翻译API配置)
从Nessus扫描到专业报告:Python自动化工作流实战
每次完成大规模内网扫描后,面对数百台主机的Nessus扫描结果,安全工程师们往往需要花费数小时甚至数天时间整理报告。传统的手工处理方式不仅效率低下,还容易出错。本文将介绍如何利用Python生态中的NessusToReport工具,构建从原始扫描数据到精美中文报告的自动化工作流。
1. 环境准备与工具部署
在开始自动化报告生成之前,我们需要搭建合适的工作环境。NessusToReport基于Python 3.8+开发,对操作系统没有特殊要求,但Windows环境下可能遇到更少的兼容性问题。
1.1 Python环境配置
建议使用conda或pyenv等虚拟环境工具创建隔离的Python环境:
conda create -n nessus_report python=3.8 conda activate nessus_report安装依赖包时,需要注意几个关键点:
pandas用于数据处理和分析requests处理API调用jinja2负责报告模板渲染
pip install pandas requests jinja21.2 工具获取与目录结构
从GitHub克隆最新版本的NessusToReport:
git clone https://github.com/Hypdncy/NessusToReport.git cd NessusToReport项目目录结构说明:
NessusToReport/ ├── data/ # 存放输入输出数据 │ ├── nessus/ # 原始扫描报告(CSV格式) │ └── systems.csv # 自定义实施范围 ├── cnf/ # 配置文件 │ ├── const.py # API密钥等常量 │ └── data.py # 报告基础信息 ├── templates/ # 报告模板 └── main.py # 主程序入口2. 百度翻译API集成
自动化翻译是生成中文报告的核心功能。百度翻译API提供了稳定可靠的机器翻译服务,但需要正确配置才能避免常见的KeyError问题。
2.1 API申请与认证
- 访问百度翻译开放平台注册开发者账号
- 申请通用翻译API服务
- 完成个人高级认证(提升QPS限制至10)
注意:未认证的免费账号QPS仅为1,在批量翻译漏洞描述时极易触发限流导致程序中断。
2.2 密钥配置与测试
在cnf/const.py中配置获取到的API密钥:
BAIDU_APP_ID = '你的APP_ID' BAIDU_APP_KEY = '你的APP_KEY'可以通过简单的Python脚本测试API连通性:
import requests def test_translate(): url = "https://fanyi-api.baidu.com/api/trans/vip/translate" params = { 'q': 'Vulnerability description', 'from': 'en', 'to': 'zh', 'appid': BAIDU_APP_ID, 'salt': '123456', 'sign': '生成的签名' } response = requests.get(url, params=params) print(response.json())3. 报告生成实战
NessusToReport支持三种报告生成模式,满足不同场景下的需求:
| 模式类型 | 命令参数 | 适用场景 | 输出特点 |
|---|---|---|---|
| 漏洞排序 | -t loops | 漏洞管理 | 按漏洞严重程度分组 |
| 主机排序 | -t hosts | 主机加固 | 按IP地址分组 |
| 单机报告 | -t host | 专项分析 | 每个主机单独报告 |
3.1 基础报告生成
将Nessus导出的CSV文件放入data/nessus目录后,执行:
python main.py -t loops这个过程会自动完成:
- 原始数据解析
- 漏洞描述翻译
- 风险等级分类
- 报告模板渲染
3.2 自定义配置技巧
通过修改config.py可以实现高度定制化的报告输出:
# 忽略特定IP的漏洞(如扫描器自身) config.nessus_ignore_ips = ['192.168.1.100'] # 忽略特定类型的漏洞(已知误报) config.nessus_ignore_ids = [12345, 67890] # 手动调整漏洞风险等级 config.nessus_risk_self = { 'plugin_id': '高危' }4. 高级应用与问题排查
4.1 批量处理技巧
对于定期扫描任务,可以编写简单的shell脚本实现自动化:
#!/bin/bash # 移动最新扫描报告 mv /path/to/latest_scan.csv ./data/nessus/ # 生成报告并添加时间戳 python main.py -t loops mv ./data/report.docx "./reports/scan_$(date +%Y%m%d).docx"4.2 常见错误处理
问题1:翻译API报错KeyError
解决方案:
- 检查百度API密钥是否正确
- 确认已完成高级认证
- 在代码中添加延时避免QPS超限
import time def safe_translate(text): try: result = translate(text) time.sleep(0.2) # 控制请求频率 return result except Exception as e: print(f"翻译失败: {e}") return text问题2:报告格式混乱
可能原因:
- CSV导出时编码问题
- 模板文件损坏
解决方法:
- 重新从Nessus导出UTF-8编码的CSV
- 检查
templates目录下的.docx模板文件
5. 扩展应用场景
NessusToReport的自动化思路可以扩展到其他安全工具的报告生成:
- 集成多工具结果:修改解析模块支持Nmap、OpenVAS等工具的XML输出
- 自定义模板:根据不同客户需求设计专属报告模板
- 结果可视化:添加Matplotlib生成风险分布图表
- 自动化邮件发送:使用smtplib实现报告自动发送
# 示例:添加图表生成功能 import matplotlib.pyplot as plt def generate_pie_chart(vuln_stats): labels = ['Critical', 'High', 'Medium', 'Low'] sizes = [vuln_stats.get(k, 0) for k in labels] plt.pie(sizes, labels=labels, autopct='%1.1f%%') plt.savefig('risk_distribution.png')在实际项目中,这套自动化流程将报告生成时间从平均4小时缩短到15分钟以内,同时显著降低了人为错误率。对于需要同时处理多个客户项目的安全团队,这种效率提升意味着可以承接更多的业务量。
