not-protocol/shadowport-scanner

GitHub: not-protocol/shadowport-scanner

一款基于 Python 和 Nmap 的模块化网络端口扫描器,提供多种扫描模式、双通道日志记录、变更检测和插件扩展,专为安全教育和实验室场景设计。

Stars: 1 | Forks: 0

# ShadowPort Scanner v2.1.0 一个基于 Python 和 Nmap 构建的模块化网络端口扫描器,专为道德黑客、网络安全学生和家庭实验室爱好者设计。 ## v2.1.0 新特性 | 功能 | v2.0 | v2.1 | |---|---|---| | Database schema | 固定的 | **完整 schema + 通过 PRAGMA 迁移** | | Excel 日志记录 | 损坏的 | **双重写入:每次扫描同时写入 SQLite + Excel** | | SQL injection 防护 | 基础的 | **仅使用参数化查询,零 f-string SQL** | | 线程安全 | 部分的 | **在 DB、Excel 和 UI 事件上使用 threading.Lock** | | 服务知识库 | — | ✅ **17 个端口,包含用途、使用场景、风险等级** | | 扫描配置 | 基础的 | ✅ **5 个 dataclass 配置:Fast、Deep、Web、Stealth、Vuln** | | 变更检测 | 基础的 | ✅ **SQLite 端口表差异对比:新增/关闭/未更改** | | 实时遥测监控 | — | ✅ **Textual 小部件:ScanStatusPanel + LiveEventsLog** | | 服务情报插件 | — | ✅ **新插件:service_intel** | | 日志一致性审计 | — | ✅ **启动健康检查:SQLite 与 Excel 计数对比** | | 生产检查清单 | — | ✅ **PRODUCTION_CHECKLIST.md 包含 12 个部分** | | 测试套件 | 4 个文件 | **6 个文件,80+ 个测试用例** | ## 文件夹结构 ``` shadowport-v2.1.0/ ├── main.py # Entry point ├── scanner.py # Nmap engine, validation, timeout, DNS pre-check ├── output.py # Terminal UI, progress bar, results table ├── reports.py # TXT / JSON / XML / HTML export ├── logger.py # Silent error logging → Log/error.log │ ├── config/ │ ├── __init__.py │ └── settings.py # All constants, modes, profiles, service intel │ ├── db/ │ ├── __init__.py │ └── database.py # SQLite: full schema, migration, thread-safe │ ├── core/ │ ├── __init__.py │ ├── excel_logger.py # openpyxl dual-write logger, file lock, retry │ ├── service_kb.py # Service Knowledge Base (17 ports) │ ├── scan_profiles.py # 5 scan profile dataclasses │ └── change_detector.py # Scan diff engine using ports table │ ├── ui/ │ ├── __init__.py │ └── live_monitor.py # Textual: ScanStatusPanel + LiveEventsLog │ ├── plugins/ │ ├── __init__.py # Auto-discovery loader │ ├── base.py # BasePlugin abstract class │ ├── dns_lookup.py # DNS forward + reverse lookup │ ├── banner_grabber.py # TCP banner grabbing (5s timeout) │ └── service_intel.py # Service KB for every open port │ ├── tests/ │ ├── __init__.py │ ├── test_validation.py # 30+ input validation cases + injection attempts │ ├── test_database.py # save_scan, history, migration, SQL injection safety │ ├── test_excel_logger.py # new file, append, auto-increment, missing dir │ ├── test_change_detector.py# new/closed/unchanged port detection │ └── test_service_kb.py # known ports, fallback, formatting │ ├── Log/ # Auto-created │ ├── shadowport.db # SQLite scan history │ ├── scannerhistory.xlsx # Excel scan log (dual-write) │ └── error.log # Silent error log │ ├── reports/ # Auto-created — exported scan reports ├── PRODUCTION_CHECKLIST.md ├── requirements.txt └── README.md ``` ## 安装说明 ### 1. 安装 Nmap ``` # Fedora / RHEL sudo dnf install nmap # Debian / Ubuntu / Kali sudo apt install nmap ``` ### 2. 安装 Python 依赖 ``` sudo pip install -r requirements.txt --break-system-packages ``` ### 3. 如有需要,修复权限 ``` sudo chown -R $USER:$USER Log/ reports/ ``` ## 使用方法 ``` python main.py # standard modes sudo python main.py # full access: OS detect, SYN, Aggressive ``` ## 扫描模式 | # | 模式 | 需要 Root? | 超时 | |---|---|---|---| | 1 | 快速扫描 | 否 | 60s | | 2 | 完整 TCP 扫描 | 否 | 600s | | 3 | 服务检测 | 否 | 180s | | 4 | 操作系统检测 | **是** | 120s | | 5 | 激进扫描 | **是** | 300s | | 6 | 主机发现 | 否 | 30s | | 7 | 隐蔽 SYN 扫描 | **是** | 120s | | 8 | 漏洞脚本 | 否 | 300s | ## 扫描配置 在模式提示符下按 `p` 键: | # | 配置 | 描述 | |---|---|---| | 1 | 快速实验室扫描 | 前 1000 个端口,快速分诊 | | 2 | 深度枚举 | 所有 65535 个 TCP 端口 + 服务版本 | | 3 | Web 服务器分析 | 端口 80/443/8080/8443 + HTTP 标头 | | 4 | 隐蔽 SYN 扫描 | 半开 SYN,慢速时序(需要 root) | | 5 | 漏洞审计 | NSE 漏洞脚本 + 服务检测 | ## 插件 扫描后按 `x` 键运行插件: | 插件 | 描述 | |---|---| | `dns_lookup` | 正向和反向 DNS 解析 | | `banner_grabber` | TCP banner 抓取(每个主机最多 5s) | | `service_intel` | 每个开放端口的服务知识库 | ### 编写插件 ``` # plugins/my_plugin.py from plugins.base import BasePlugin class MyPlugin(BasePlugin): name = "my_plugin" description = "Does something useful" version = "1.0" def run(self, target: str, scan_data: dict) -> dict: return {"output": f"Hello from {target}!"} ``` 将其放入 `plugins/` 目录 —— 它将在下次运行时自动加载。 ## 变更检测 在模式提示符下按 `d` 键,对当前目标进行最近两次扫描的差异对比: ``` Change Detection: 192.168.1.1 Comparing scan #3 → #4 ✚ New open ports: → 3306/tcp (mysql) ═ Unchanged: 22/tcp, 80/tcp ``` ## Excel 日志 每次扫描都会立即写入 `Log/scannerhistory.xlsx`: | 扫批 # | 日期 | 时间 | 目标 | 扫描类型 | 开放端口 | 总端口 | 风险评分 | 持续时间 (s) | 状态 | |---|---|---|---|---|---|---|---|---|---| ## 运行测试 ``` pytest tests/ -v --tb=short ``` ## 安全说明 - 所有用户输入在到达 Nmap 之前都会进行验证 - 拒绝 Shell 元字符 - Subprocess 从不使用 `shell=True` 调用 - 永远不会以编程方式自动调用 `sudo` - 在执行 SYN 和操作系统检测扫描之前强制进行 root 检查 ## 免责声明 本工具仅供教育和授权的安全测试使用。未经授权的扫描可能违反地方、州或联邦法律。作者对任何滥用行为不承担任何责任。
标签:CTI, Nmap, Python, 安全规则引擎, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 虚拟驱动器, 逆向工具, 隐私保护