
#### **1. 系统架构**
该系统是一个基于 **celery** 和 **redis** 的分布式任务调度与执行框架,主要用于网络安全扫描和渗透测试任务的管理与自动化。系统架构包括以下核心组件:
- **任务调度与执行层**:使用 celery 作为任务队列和分布式任务执行框架,Redis 作为消息代理和结果存储。
- **数据库层**:使用 SQLite 作为本地数据库,存储任务状态、扫描结果、主机信息、服务信息等。
- **任务管理层**:通过命令行工具和 Python 脚本管理任务的提交、暂停、取消、恢复等操作。
- **扫描工具集成层**:集成多种网络安全扫描工具(如 Nmap、Aquatone、Sublist3r、Photon 等),支持自动化扫描和结果解析。
- **报告生成层**:支持生成 HTML 格式的报告,包含扫描结果、截图、服务信息等。
#### **2. 主要功能模块**
- **任务管理**:
- 支持任务的提交、暂停、取消、恢复等操作。
- 通过 celery 实现任务的分布式执行和状态跟踪。
- 任务状态存储在 SQLite 数据库中,包括任务 ID、命令、状态、运行时间等。
- **扫描工具集成**:
- 支持多种扫描工具(如 Nmap、Aquatone、Sublist3r、Photon 等)的集成和自动化调用。
- 支持通过配置文件(`config.ini`)动态加载扫描工具的命令和参数。
- **主机与服务管理**:
- 支持主机(IP 或域名)的导入、范围定义、状态管理(如是否在扫描范围内)。
- 支持服务(端口、协议、服务名称等)的自动发现和存储。
- **报告生成**:
- 支持生成 HTML 格式的报告,包含扫描结果、截图、服务信息等。
- 支持通过 Aquatone 生成截图和可视化报告。
- **备份与恢复**:
- 支持工作空间的备份与恢复,备份内容包括数据库和扫描结果文件。
#### **3. 核心技术点**
- **celery**:用于任务队列管理和分布式任务执行。
- **redis**:作为消息代理和结果存储,支持任务状态的实时更新。
- **SQLite**:用于存储任务状态、主机信息、服务信息等。
- **Nmap**:用于端口扫描和服务发现。
- **Aquatone**:用于生成截图和可视化报告。
- **Sublist3r 和 Photon**:用于子域名枚举和 URL 路径发现。
- **HTML 报告生成**:通过 Python 脚本生成动态 HTML 报告,支持截图展示和路径导航。
#### **4. 应用场景**
- **网络安全扫描**:
- 自动化执行端口扫描、服务发现、子域名枚举等任务。
- 支持大规模网络的分布式扫描。
- **渗透测试**:
- 自动化执行渗透测试任务,如漏洞扫描、路径枚举、截图生成等。
- 支持任务的暂停、恢复和取消,方便渗透测试人员灵活管理任务。
- **报告生成与展示**:
- 生成详细的 HTML 报告,包含扫描结果、截图、服务信息等。
- 支持通过浏览器查看报告,方便团队协作和结果分享。
- **工作空间管理**:
- 支持多工作空间的创建、备份和恢复,方便管理不同的扫描任务和结果。
### **核心代码分析**
以下是部分核心代码的功能说明:
#### **1. 任务管理**
- **任务提交**:
def create_task(command_name, populated_command, ip, output_dir, workspace, task_id):
db_task = (task_id, 1, command_name, populated_command, ip, output_dir, 'SUBMITTED', workspace)
db.create_task(db_task)
//该函数用于创建任务并将其提交到 celery 任务队列。- **任务状态更新**:
def update_task_status_started(status, task_id, pid, start_time):
CUR.execute("UPDATE tasks SET status=?,pid=?,start_time=? WHERE task_id=?", (status, pid, start_time, task_id))
CONNECTION.commit()
//该函数用于更新任务的状态(如开始、完成、失败等)。#### **2. 扫描工具集成**
- **Nmap 扫描**:
def nmap_scan(hosts, output_dir):
nm = NmapProcess(hosts, options="-sC -sV -Pn -p1-65535")
rc = nm.run()
nmap_report = NmapParser.parse(nm.stdout)
return nmap_report
// 该函数用于执行 Nmap 扫描并解析扫描结果。- **Aquatone 截图生成**:
def aquatone_all_paths(workspace, simulation=None, config_file=None):
paths = lib.db.get_all_paths_exclude_404(workspace)
if len(paths) > 0:
populated_command = "celerystalk db paths_only limit | aquatone -out " + outdir
p = Popen(populated_command, shell=True)
p.communicate()
//该函数用于调用 Aquatone 生成截图和可视化报告。 #### **3. 报告生成**
- **HTML 报告生成**:
def populate_report_head():
web_head = """<!DOCTYPE html><html><head>..."""
return web_head
//该函数用于生成 HTML 报告的头部内容。### **总结**
该系统是一个功能强大的网络安全扫描与渗透测试自动化工具,具有以下特点:
- **分布式任务管理**:通过 celery 和 Redis 实现任务的分布式执行和状态跟踪。
- **灵活的扫描工具集成**:支持多种扫描工具的集成和自动化调用。
- **详细的报告生成**:支持生成 HTML 格式的报告,包含扫描结果、截图、服务信息等。
- **易用的命令行工具**:通过命令行工具管理任务、工作空间和报告生成。
适用于网络安全团队、渗透测试人员以及需要自动化扫描和报告生成的企业用户。
github链接地址:https://github.com/sethsec/celerystalk.git
文末附有功能展示图