chasssis/netrecon

GitHub: chasssis/netrecon

一款用 Python/Flask 构建的网络侦察与漏洞扫描 Web 应用,整合端口扫描、HTTP 头分析、DNS 枚举、WHOIS 查询和 SSL 证书检查等模块,面向授权安全评估与教学场景。

Stars: 1 | Forks: 0

# NetRecon 一个使用 Python 和 Flask 构建的网络侦察与漏洞扫描 Web 应用程序。专为授权的安全评估、渗透测试实验室和网络安全教育而设计。 ## 功能 | 模块 | 描述 | |--------|-------------| | **IP 信息** | 将目标解析为 IP,并通过 ipapi.co 获取地理位置、ASN、ISP 和时区信息 | | **端口扫描器** | 多线程 TCP 连接扫描 75 个端口,支持感知协议的 banner grabbing 和风险注释 | | **HTTP 头分析器** | 获取 HTTP 安全头并给出 A–F 的评分 | | **WHOIS 查询** | 检索域名注册数据 —— 注册商、创建/过期日期、域名服务器 | | **DNS 枚举** | 查询 A、AAAA、MX、NS、TXT 和 CNAME 记录;检测 SPF/DMARC 并探测 13 个常见的 DKIM 选择器 | | **SSL/TLS 检查器** | 验证证书,检查过期时间、协议版本 (TLS 1.2+) 和 SANs | - 简洁的终端风格 Web 仪表盘 - 非阻塞的后台扫描任务,提供实时进度更新 - 一键将扫描结果导出为 JSON - 输入验证 —— 阻止私有 IP、localhost 和格式错误的目标 - 速率限制 —— 防止扫描 API 被滥用 - 通过 Python 的 `logging` 模块进行结构化日志记录 - 感知协议的 banner grabbing(在 Web 端口执行 HTTP GET 以获取更丰富的服务器信息) - 模块化架构 —— 轻松添加新的扫描模块 - 伦理使用声明和负责任的设计 ## 演示 ``` Target: scanme.nmap.org Modules: Port Scan, HTTP Headers, DNS, WHOIS [*] Running Port Scan... [+] Port Scan complete. [*] Running WHOIS Lookup... [+] WHOIS complete. ... [✓] Scan finished. ``` ## 安装 ### 前置条件 - Python 3.10+ - pip ### 本地设置 ``` # Clone 仓库 git clone https://github.com/yourusername/netrecon.git cd netrecon # 创建 virtual environment python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # 安装 dependencies pip install -r requirements.txt # 运行 app python app.py ``` 在浏览器中打开 `http://localhost:5000` 该应用程序默认以生产模式运行。要在本地启用 Flask 的 debug 模式: ``` FLASK_DEBUG=true python app.py ``` ### Docker ``` # 使用 Docker Compose 构建并运行 docker-compose up --build ``` 或者使用普通 Docker: ``` docker build -t netrecon . docker run -p 5000:5000 netrecon ``` ## 使用说明 1. 输入目标主机名或 IP 地址(例如 `scanme.nmap.org`) 2. 选择要运行的扫描模块 3. 点击 **Execute Scan** 4. 结果将随着每个模块的完成实时显示 5. 点击 **Export JSON** 将完整结果下载为 `.json` 文件 ### 输入验证 NetRecon 在每个扫描任务开始前对目标强制执行以下规则: - 阻止私有 IP 范围(`10.x.x.x`、`172.16–31.x.x`、`192.168.x.x`) - 阻止环回地址(`127.x.x.x`、`localhost`) - 拒绝包含无效字符的目标 - 空目标会立即返回错误 ### 速率限制 `/api/scan` endpoint 按每个 IP 进行速率限制: | 时间窗口 | 限制 | |--------|-------| | 每分钟 | 10 次请求 | | 每小时 | 50 次请求 | | 每天 | 200 次请求 | ## 运行测试 ``` # 安装 dev dependencies pip install -r requirements-dev.txt # 运行完整 test suite pytest tests/ -v ``` 测试套件涵盖: - `normalize_target` —— URL 剥离和主机名提取 - `validate_target` —— 阻止私有 IP、拒绝 localhost、字符验证 - `_ssl_warnings` —— 证书过期和已弃用协议检测 - `ReconScanner` 初始化 - 端口扫描器结果结构和总计数(通过 mock 的 sockets) - HTTP 头评级阈值(A–F) - 模块常量健全性检查(端口范围、头名称) ## 项目结构 ``` netrecon/ ├── app.py # Flask application, job management, rate limiting ├── modules/ │ ├── __init__.py │ └── scanner.py # Core scan modules + input validation ├── templates/ │ └── index.html # Frontend dashboard ├── tests/ │ ├── __init__.py │ └── test_scanner.py # pytest unit tests (50 tests) ├── Dockerfile ├── docker-compose.yml ├── requirements.txt # Production dependencies ├── requirements-dev.txt # Dev/test dependencies ├── .gitignore └── README.md ``` ## 环境变量 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `FLASK_DEBUG` | `false` | 启用 Flask debug 模式 (`true`/`false`) | | `PORT` | `5000` | 服务器监听的端口 | ## 扩展 NetRecon 添加新的扫描模块只需三个步骤: **1. 在 `modules/scanner.py` 的 `ReconScanner` 中添加一个方法:** ``` def my_new_scan(self) -> dict: logger.debug("My scan starting: target=%s", self.target) # your logic here return {"result": "data"} ``` **2. 在 `app.py` 的 `run_scan_job` 中注册它:** ``` if "my_scan" in scan_types: steps.append(("my_scan", "My Scan Label", scanner.my_new_scan)) ``` **3. 在 `index.html` 的表单中添加一个复选框,并在 JavaScript 中添加一个卡片渲染器。** ## 安全考量 - **线程池**设有上限,以避免向目标发起大量连接造成泛洪攻击 - **输入验证**在任何扫描开始前阻止私有/环回地址 - **速率限制**防止 API 被滥用为开放扫描代理 - **Debug 模式**默认关闭;需通过 `FLASK_DEBUG=true` 显式启用 - **SSL 验证**首先尝试;如果 HTTPS 失败则回退到 HTTP - **无持久化** —— 扫描结果仅存储在内存中,服务器重启后会丢失 ## 使用的技术 - **Flask** —— 轻量级 Python Web 框架 - **Flask-Limiter** —— API 速率限制 - **Python `logging`** —— 结构化应用程序日志 - **Python `socket`** —— 原始 TCP 连接扫描和 banner grabbing - **`concurrent.futures`** —— 100 个 worker 的线程池,用于并行端口扫描 - **`dnspython`** —— DNS 记录解析和 DKIM 选择器探测 - **`python-whois`** —— WHOIS 查询 - **`requests`** —— HTTP 头获取和 IP 地理定位 - **`ssl`** —— 证书检查 - **`ipaddress`** —— 私有 IP 范围验证 - **ipapi.co** —— 免费的 IP 地理位置和 ASN API(无需 key) - **pytest** —— 单元测试 - **gunicorn** —— 生产级 WSGI 服务器(在 Docker 中使用) - Vanilla JS + CSS —— 不使用前端框架 ## 法律免责声明 本工具仅供**教育目的和授权的安全测试使用**。 作者不对滥用行为承担责任。在扫描您不拥有的任何系统之前,请务必获得书面许可。 ## 许可证 MIT —— 详情请参阅 [LICENSE](LICENSE)。
标签:Flask, Python, 内存取证对抗, 安全规则引擎, 实时处理, 插件系统, 无后门, 网络安全, 请求拦截, 逆向工具, 隐私保护