torjaeger1709/cpp-port-scanner

GitHub: torjaeger1709/cpp-port-scanner

基于 C++17 和 Dear ImGui 的高性能多线程 TCP/IP 端口扫描器,支持多种隐蔽扫描技术与桌面端可视化操作。

Stars: 0 | Forks: 0

# C++ 模块化端口扫描器与 Dear ImGui 桌面端 现代化的 **C++17** 网络端口扫描器,具备可重用的扫描引擎、多线程架构、原始 socket 扫描技术以及 Dear ImGui 桌面端界面。 ## 桌面端预览 ![桌面端预览](https://static.pigsec.cn/wp-content/uploads/repos/cas/87/8713a2ca0d70881cfbbbea007e9530e3d076357dfc216f99f0074b84d9dda8aa.png) # 功能 * 跨平台 CLI 扫描器(Windows 和 Linux) * 原生 Dear ImGui 桌面端应用程序 * 模块化 MVC 架构 * 多线程扫描引擎 * 可重用的线程池 * TCP Connect 扫描 * SYN / FIN / NULL / XMAS 原始扫描 * 协议感知的 banner grabbing * CIDR 子网扫描 * JSON / CSV / XML 报告导出 * 优雅的扫描取消机制 * WSAPoll / poll 异步 I/O 多路复用 # 项目架构 该项目构建了两个共享同一扫描引擎的可执行文件。 ``` graph TD CLI["port_scanner (CLI)"] --> Engine GUI["port_scanner_gui"] --> Controller Controller --> Engine Engine --> ThreadPool ThreadPool --> Network["Sockets / WSAPoll / poll"] ``` ## MVC 设计 ### Model 负责: * TCP/UDP 扫描 * 原始 socket 数据包构造 * Banner grabbing * 导出 pipeline * 线程池调度 位置: ``` src/scanner_engine.cpp ``` ### Controller 负责: * 启动扫描 worker * 进度更新 * 扫描取消 * 线程同步 位置: ``` src/scan_controller.cpp ``` ### View 负责: * Dear ImGui 渲染 * 交互式扫描配置 * 实时控制台 * 结果表格 * 响应式布局 位置: ``` src/gui_view.cpp ``` # 支持的功能 | 功能 | CLI | GUI | | ---------------- | --- | --- | | Windows | ✅ | ✅ | | Linux | ✅ | ❌ | | TCP Connect 扫描 | ✅ | ✅ | | SYN 扫描 | ✅ | ✅ | | FIN 扫描 | ✅ | ✅ | | NULL 扫描 | ✅ | ✅ | | XMAS 扫描 | ✅ | ✅ | | Banner grabbing | ✅ | ✅ | | CIDR 扫描 | ✅ | ✅ | | JSON 导出 | ✅ | ✅ | | CSV 导出 | ✅ | ✅ | | XML 导出 | ✅ | ✅ | # 工程说明 ### 响应式桌面端 UI 扫描完全在后台 worker 线程上执行,确保 GUI 在长时间的扫描过程中保持响应。 ### 高效同步 扫描引擎通过将 atomic counters 与预分配的扫描结果存储相结合,最大限度地减少了 mutex 争用。 ### 优雅关闭 在活动扫描期间关闭应用程序会发送取消信号,等待 worker 线程完成,并安全释放资源。 ### 跨平台网络 网络通过公共接口进行抽象,在 Windows 上使用 Winsock,在 Linux 上使用 POSIX socket。 # 构建 ## Windows 环境要求 * Visual Studio 2019 或更高版本 * 使用 C++ 的桌面开发 * CMake ``` cmake -B build -S . cmake --build build --config Release ``` 生成的二进制文件 ``` build/ ├── port_scanner.exe └── port_scanner_gui.exe ``` ## Linux 安装依赖 ``` sudo apt update sudo apt install build-essential cmake git ``` 构建 ``` cmake -B build -S . cmake --build build -j$(nproc) ``` 生成的二进制文件 ``` ./build/port_scanner ``` # 使用方法 ## 启动 GUI ``` .\build\port_scanner_gui.exe ``` 步骤 1. 输入 IP 地址、主机名或 CIDR 范围。 2. 指定目标端口。 3. 选择扫描方法。 4. 配置线程数。 5. 开始扫描。 ## CLI 示例 TCP Connect 扫描 ``` ./build/port_scanner \ -t scanme.nmap.org \ -p 22,80,443 \ -o result.json ``` 子网扫描 ``` ./build/port_scanner \ -t 192.168.1.0/24 \ -p 80 \ --threads 200 \ --timeout 500 ``` Linux SYN 扫描 ``` sudo ./build/port_scanner \ -t 10.0.0.1 \ -p 1-1024 \ -sS \ -o report.csv ``` # 项目结构 ``` . ├── assets/ ├── include/ ├── src/ │ ├── scanner_engine.cpp │ ├── scan_controller.cpp │ ├── gui_view.cpp │ └── ... ├── third_party/ ├── CMakeLists.txt └── README.md ``` # 技术限制 ## Windows 原始 socket 限制 Windows 限制通过原始 socket 发送自定义 TCP 数据包。真正的 SYN/FIN/NULL/XMAS 扫描需要 Npcap。否则,扫描器将自动回退到 TCP Connect 模式。 ## RFC 793 兼容性 FIN、NULL 和 XMAS 扫描依赖于 RFC 793 行为。某些操作系统(尤其是 Windows)并未完全实现此行为,从而降低了这些扫描技术的可靠性。 # 许可证 本项目基于 MIT 许可证授权。 # 作者 **Khiem Nguyen**
标签:Bash脚本, C++17, Dear ImGui, GUI桌面应用, HTTP头分析, Raw Socket, 云存储安全, 插件系统, 数据统计, 端口扫描, 网络扫描