ezequielranieri/recon-tool
GitHub: ezequielranieri/recon-tool
一款基于 Python Asyncio 的高性能网络侦察 CLI 工具,用于并发端口扫描、Banner 抓取和服务识别。
Stars: 0 | Forks: 0
# 🚀 recon-tool





**使用 Python 和 Asyncio 构建的专业网络侦察工具。**
`recon-tool` 是一款高性能 CLI 实用工具,专为快速、安全且可靠的网络扫描而设计。它利用异步 I/O 执行并发的端口发现、Banner 抓取和服务识别,并以人类可读和机器可互操作的格式提供详细的报告。
## 🛡️ 为什么开发这个项目?
开发此工具旨在展示对 Python 生态系统的资深掌握程度,特别是专注于**安全**和**后端工程**领域。它作为一个实用的展示项目,体现了以下方面:
- **异步并发**:使用 `asyncio` 和信号量处理海量网络 I/O 而不发生阻塞。
- **安全第一的理念**:实现健壮的输入验证,阻止对保留/私有 IP 范围的扫描,并清理不受信任的数据。
- **整洁的架构**:遵循 SOLID 原则和 Google 风格文档的模块化、高度类型化且经过测试的代码库。
- **专业的用户体验**:使用 `Typer` 和 `Rich` 打造精致的 CLI 体验,提供实时反馈和结构化输出。
## ✨ 特性
- **并发 TCP 扫描**:使用非阻塞套接字实现极速端口发现。
- **智能服务识别**:端口到服务的映射,以及使用捕获的 Banner 进行基于启发式的检测。
- **高级 Banner 抓取**:安全地捕获服务 Banner,并自动进行清理以防止终端注入。
- **智能输入解析**:支持复杂的端口规范(例如,`80,443,1-1024,8080`)。
- **可导出的报告**:以结构化的 `JSON` 或格式化的 `TXT` 生成详细的扫描结果。
- **安全边界**:内置防止扫描本地/保留网络的保护机制(符合 RFC 规范)。
## 🛠️ 技术
- **Python 3.12+**
- **Asyncio**:主要的并发引擎。
- **Typer**:专业的 CLI 框架。
- **Rich**:终端格式化、表格和进度条。
- **Pydantic v2**:数据建模和严格验证。
- **Pydantic Settings**:基于环境的配置。
- **Pytest**:全面的单元测试和集成测试。
- **Ruff & Mypy**:行业标准的代码检查和严格类型检查。
## 📦 安装
克隆仓库并以可编辑模式安装包:
```
git clone https://github.com/ezequielranieri/recon-tool.git
cd recon-tool
pip install -e .
```
安装开发依赖:
```
pip install -e ".[dev]"
```
## 🚀 使用
### 基本扫描
扫描目标主机的常用前 1000 个端口:
```
python -m recon scan google.com
```
### 高级端口选择
扫描特定端口和范围:
```
python -m recon scan 8.8.8.8 --ports 22,80,443,8000-9000
```
### 高性能扫描
调整并发数和工作超时时间:
```
python -m recon scan example.com --workers 500 --timeout 0.5
```
### 导出报告
将扫描结果保存为 JSON 格式的文件:
```
python -m recon scan scanme.nmap.org -o results.json -f json
```
## 📊 预期输出
```
╭─────────────────────────────────────╮
│ recon-tool v0.1.0 │
│ Network Reconnaissance Tool │
╰─────────────────────────────────────╯
Target: scanme.nmap.org
Ports: 22,80,443 (3 ports)
Workers: 100 | 1.0s
Scanning scanme.nmap.org... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100%
Results for scanme.nmap.org
┏━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Port ┃ State ┃ Service ┃ Banner ┃
┡━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 22 │ open │ SSH │ SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2 │
│ 80 │ open │ HTTP │ - │
└────────┴─────────┴─────────────────┴─────────────────────────────────────────┘
Completed in 1.42s
Open: 2
```
## 🏗️ 架构
项目遵循为可维护性和可测试性而设计的模块化结构:
- **`core/`**:核心引擎。处理套接字连接(`scanner.py`)、Banner 获取(`banner.py`)和服务逻辑(`service.py`)。
- **`utils/`**:共享逻辑。包含严格的安全验证器和网络解析器。
- **`reports/`**:数据持久化。针对不同导出格式的解耦逻辑。
- **`models/`**:Pydantic 模型,确保整个数据流水线中的数据完整性。
- **`cli.py`**:接口层。编排流程并处理 UI。
## 🧪 质量与测试
项目通过自动化检查维持高标准:
- **单元测试**:覆盖所有核心逻辑、验证器和报告生成器。
- **集成测试**:端到端的 CLI 流程验证。
- **静态分析**:100% 类型安全(Mypy strict)且无代码规范问题。
运行测试:
```
pytest
```
运行代码检查:
```
ruff check .
mypy src/
```
## 👨💻 关于作者
专注于 Python、后端工程和网络安全的自学开发者。
没有正式的计算机科学学位或证书——只有持续的学习、构建真实项目,
以及对底层系统运作方式的浓厚兴趣。
构建此项目是为了展示实用的 Python 技能:异步编程、
安全第一的思维方式以及专业的代码质量——这些都是在生产环境中至关重要的能力,而非仅仅为了应付考试。
如果您是招聘人员或开发者,希望与我取得联系:
[LinkedIn](https://linkedin.com/in/ezequielranieri) · [GitHub](https://github.com/ezequielranieri)
标签:Asyncio, CLI, mypy, Python, Qt框架, Rich, Ruff, SOLID原则, TCP扫描, Typer, WiFi技术, 后端工程, 异步编程, 抓取, 插件系统, 数据统计, 无后门, 服务器安全, 服务识别, 端口扫描, 网络安全, 网络调试, 自动化, 逆向工具, 隐私保护