beast6713/PortFootprint

GitHub: beast6713/PortFootprint

PortFootprint 是一个零依赖、跨平台的生产级 TCP 端口扫描与服务指纹识别 CLI 框架,解决网络端口发现、服务识别及扫描报告导出与对比的需求。

Stars: 0 | Forks: 0

# PortFootprint PortFootprint 是一个生产级、高度模块化、跨平台的 TCP 端口扫描与服务指纹识别命令行界面(CLI)工具,完全使用标准 Python 实现。 本代码仓库实现了设计的 **阶段 1**、**阶段 2** 和 **阶段 3**,提供了稳定的多线程扫描核心、模块化的服务发现与协议指纹识别引擎,以及专业的报告生成、统计、历史记录、比较和 CLI 增强。 ## 概述 PortFootprint 完全在用户态 socket API 下运行,确保其在 Windows、macOS 和 Linux 上可靠运行,而无需 root 或管理员权限。它使用 **Clean Architecture** 和 **SOLID** 原则进行设计,分离了各个关注层,使得该框架可以轻松集成到更大的环境中。 ## 已实现的功能 ### 阶段 1:并发核心 - **健壮的 DNS 查询**:验证目标并处理 IPv4/IPv6 名称解析。 - **端口规范解析器**:支持范围 (`20-80`)、逗号分隔列表 (`22,80,443`)、重复项检查以及自动排序。 - **多线程扫描引擎**:通过可配置的 `ThreadPoolExecutor` 并发执行 TCP Connect 扫描。 - **Socket 超时与重试**:可为每个端口连接请求自定义参数设置。 - **动态视觉指示器**:线程安全的终端进度状态更新。 ### 阶段 2:服务发现与探测 - **主动/被动 Banner Grabbing**:读取初始 socket 欢迎字符串;如果无响应,则回退到发送安全的 ASCII 探测。 - **动态 Protocol Registry**:实现了一种注册表模式,允许指纹模块自行注册映射端口匹配、优先级和 banner 关键字。 - **独立的 Protocol 模块**:HTTP、HTTPS/TLS、SSH、FTP、SMTP、DNS、IRC 以及数据库(MySQL、PostgreSQL、Redis、MongoDB)。 - **安全解码**:Unicode 异常捕获,安全地从 UTF-8 回退到 Latin-1。 ### 阶段 3:报告与操作增强 - **动态导出注册表**:根据请求的报告扩展名动态分配给相应的导出器。 - **专业导出器**: - **JSON 报告**:全面的结构化 JSON 布局,包含目标详细信息、统计数据以及详细的服务证书/header 字典。 - **CSV 报告**:扁平化的、适配电子表格的 CSV 列表。 - **HTML 报告**:响应式、交互式的单文件 HTML 报告,包含摘要卡片、快速搜索过滤、暗色模式样式,以及显示特定于 protocol 握手数据的可折叠详情。 - **性能与 Protocol 指标**:计算平均扫描速度(每秒端口数)、服务检测计数,并识别最常用的 protocol。 - **执行历史记录管理器**:将扫描指标保存到本地历史日志数据库 (`.portfootprint_history.json`) 中。 - **差分扫描比较**:允许比较两份 JSON 报告(`--compare old.json new.json`)以发现新开放的端口、已关闭的端口以及更新的服务版本变更。 - **灵活的配置文件**:使用 `config.json` 参数覆盖默认设置。 - **结构化文件日志记录**:支持线程名称、日志级别、时间戳和日志文件输出。 ## 要求 - **Python 版本**:Python 3.8 或更高版本。 - **外部依赖**:零外部运行时要求(仅使用标准库)。 ## 安装 克隆此代码仓库并直接使用 Python 运行扫描器: ``` # Clone 仓库 git clone https://github.com/username/PortFootprint.git cd PortFootprint ``` 要运行本地测试验证套件,请安装开发依赖: ``` # 安装开发依赖 pip install -r requirements.txt ``` ## 完整 CLI 命令速查表 以下是扫描器执行命令的渐进列表,按从基础诊断到最复杂的组合排序: ### 1. 基础系统诊断 * 检查命令行选项和帮助菜单详情: python main.py --help * 输出当前框架的发布版本: python main.py --version ### 2. 标准扫描 * 使用默认的 top 端口扫描目标主机名: python main.py scanme.nmap.org * 直接扫描原始 IP 地址目标: python main.py 127.0.0.1 ### 3. 自定义端口选择 * 扫描单个自定义端口: python main.py localhost -p 80 * 扫描多个逗号分隔的端口: python main.py localhost -p 22,80,443,8080 * 扫描一个包含边界的端口范围: python main.py localhost -p 20-100 * 扫描包含单个端口和端口范围的混合列表: python main.py localhost -p 21-25,80,443,8080-8090 ### 4. 性能设置 * 使用自定义的并发线程限制进行扫描: python main.py localhost --threads 50 * 使用自定义的连接超时阈值(以秒为单位)进行扫描: python main.py localhost --timeout 1.5 * 使用自定义的 socket 失败连接重试次数进行扫描: python main.py localhost --retries 2 * 在 verbose 模式下进行扫描,以打印调试时间戳和活动线程日志: python main.py localhost --verbose ### 5. 结构化导出报告 * 生成单个 JSON 报告: python main.py localhost --json my_scan.json * 生成扁平化的 CSV 电子表格: python main.py localhost --csv my_scan.csv * 生成交互式响应暗色模式 HTML 仪表板: python main.py localhost --html my_scan.html * 使用快捷方式自动保存所有支持的输出文件: python main.py localhost --all-reports * 将执行追踪流记录到自定义文件路径: python main.py localhost --log-file scan.log ### 6. 操作与比较控制 * 打印本地扫描历史记录索引列表: python main.py --history * 比较两次扫描结果以检查差异/状态变化: python main.py --compare old_scan.json new_scan.json ### 7. 复杂且冗长的综合命令 * 对目标主机执行高速扫描,查询混合端口列表,并使用自定义超时和重试、verbose 日志,输出所有报告文件并保存调试日志: python main.py scanme.nmap.org -p 21,22,25,80,100-200,443,3306,8080 --threads 60 --timeout 1.2 --retries 2 --verbose --json report.json --csv report.csv --html report.html --log-file activity.log ## 控制台与报告预览 为了便于快速验证,命令执行和 HTML 仪表板的快照已保存在项目中: * **交互式 HTML 报告**:扫描器输出一个带有内置暗色模式的交互式、响应式 HTML 报告仪表板: ![交互式 HTML 报告仪表板](https://static.pigsec.cn/wp-content/uploads/repos/cas/f4/f41cf6005595ba64d5c3a50f9aa1da9e4cbc40768754fef692f927413fd596f1.png) * **CLI 扫描输出**:在 [cli_scan_output.txt](docs/snapshots/cli_scan_output.txt) 中查看端口扫描的终端表格输出。 * **CLI 扫描历史记录**:在 [cli_history_output.txt](docs/snapshots/cli_history_output.txt) 中查看本地扫描执行日志索引。 * **CLI 比较差异**:在 [cli_compare_output.txt](docs/snapshots/cli_compare_output.txt) 中查看差异检查日志。 ## 配置文件指南 可以在当前目录下放置一个可选的 `config.json` 来覆盖默认配置: ``` { "threads": 50, "timeout": 1.5, "retries": 2, "verbose": false, "log_file": "scan.log", "default_reports": { "json": "report.json", "html": "report.html" } } ``` ## 架构设计 PortFootprint 利用解耦的层来强制实施关注点分离: - **cli/**:解析终端指令,打印实时进度,并显示格式化的服务详细信息和比较结果。 - **core/**:管理调度器、配置加载器、统计估算器、历史日志和比较。 - **scanner/**:控制主机名查询、端口列表解析、socket 连接 (`connect_ex`) 和线程池工作线程。 - **services/**:管理被动/主动 banner grabbing、注册表候选项查找以及专门的 protocol 指纹识别器。 - **reports/**:通过 ExportRegistry 格式化并导出 JSON、CSV 和高级交互式 HTML 报告。 - **common/**:共享的验证规则、路径清理器和标准日志初始化程序。 ## 当前局限性 - **仅限 TCP Connect 扫描**:在连接时执行完整的 3 次握手,这比原始 SYN 扫描更慢且更容易被检测到。 - **主机发现**:假定目标主机处于活动状态;不执行预扫描 ping 探测。 ## 路线图 - **阶段 1**:核心 TCP 扫描器、CLI 验证、线程池和进度格式化。*(已完成)* - **阶段 2**:实现深度被动/主动 banner grabbing 和服务检测映射。*(已完成)* - **阶段 3**:专业报告、统计指标、执行历史日志、扫描比较和配置文件。*(已完成)* - **阶段 4**:开发高级漏洞集成插件或动态插件加载器。 ## 免责声明 本软件仅严格出于教育目的、安全研究和授权审计而开发。未经目标所有者明确许可,请勿对系统执行扫描。作者和维护者不对未经授权的使用或次生损害承担任何责任。
标签:Python, Scrypt密钥派生, TCP协议, 报告生成, 插件系统, 数据泄露防护, 数据统计, 无后门, 服务指纹识别, 端口扫描, 网络探测, 逆向工具