YehiaGewily/netprobe-cpp

GitHub: YehiaGewily/netprobe-cpp

一款使用 Modern C++20 和 Dear ImGui 构建的跨平台实时与离线网络流量分析器,提供交互式带宽监控与协议解析能力。

Stars: 0 | Forks: 0

# NetProbe 一个使用 **Modern C++20**、**Npcap/libpcap** 和 **Dear ImGui** 构建的实时与离线网络流量分析器。 ![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey.svg) ![Standard](https://img.shields.io/badge/C%2B%2B-20-blue.svg) ![License](https://img.shields.io/badge/license-MIT-blue.svg) ## 下载 从 [GitHub Releases](https://github.com/YehiaGewily/netprobe-cpp/releases) 下载适用于您平台的 ZIP 压缩包。Windows 版本需要 [Npcap driver](https://npcap.com/#download) 以支持实时捕获和 PCAP。Linux 和 macOS 版本需要其系统自带的 libpcap 运行时。 ## 功能特性 - **实时与离线捕获**:检查活动的网络适配器,或将 `.pcap` 文件拖拽至应用中。 - **协议洞察**:Ethernet、VLAN、IPv4、TCP、UDP、TLS SNI、DNS A/AAAA/CNAME 以及主机名丰富化。 - **Flows 视图**:支持按每个连接的字节总数、每秒速率、持续时间、服务、主机名、国家/地区以及 ASN/组织进行排序。 - **过滤与导出**:应用实时 BPF 过滤器(如 `tcp port 443`),随后将保留的会话保存为兼容 Wireshark 的 PCAP 文件。 - **跨平台后端**:Windows 上使用 Npcap,Linux/macOS 上使用 libpcap。 | 实时数据包分析 | 连接流 | 离线 PCAP 模式 | | --- | --- | --- | | 协议和主机名详情 | 速率、服务、GeoIP 和 ASN | 无需管理员权限 | ## 演示与截图 发布媒体是从真实的捕获会话中录制的,因此能忠实呈现当前的 UI。捕获脚本和所需的文件名已在 [docs/record-demo.md](docs/record-demo.md) 中详细说明。 ## 技术栈 - **语言**:C++20 - **数据包捕获**:[Npcap SDK](https://npcap.com/) - **UI 框架**:[Dear ImGui](https://github.com/ocornut/imgui) + [GLFW](https://www.glfw.org/) - **图表绘制**:[ImPlot](https://github.com/epezent/implot) - **构建系统**:CMake ## 前置条件 NetProbe 在 Windows 上使用 Npcap,在 Linux/macOS 上使用 libpcap。 - **Windows 10/11**:安装了 C++ 桌面开发的 Visual Studio 2022、[Npcap driver](https://npcap.com/#download),以及解压至 `C:\Npcap-SDK` 的 Npcap SDK(`Include` 和 `Lib` 须直接位于其中)。 - **Ubuntu/Debian**:`sudo apt install build-essential cmake libpcap-dev libgl1-mesa-dev libgtk-3-dev pkg-config` - **macOS**:Xcode Command Line Tools 和 CMake。libpcap 和 OpenGL 由 macOS 提供;原生文件对话框使用 Cocoa。 ## 构建说明 ``` # 1. 克隆仓库 git clone https://github.com/YehiaGewily/netprobe-cpp.git cd netprobe-cpp # 2. 通过 Script 构建 (推荐) .\build_project.bat ``` 在 Linux 或 macOS 上: ``` cmake -S . -B build -DCMAKE_BUILD_TYPE=Release cmake --build build --parallel ctest --test-dir build --output-on-failure ``` 创建与 Releases 相同的 ZIP 布局: ``` cpack --config build/CPackConfig.cmake -C Release -G ZIP -B package ``` ## 使用说明 1. 从解压后的发布 ZIP 或构建输出目录中运行可执行文件。 2. **实时捕获**通常需要提升的权限。在 Windows 上: Start-Process ".\build\Release\NetProbe.exe" -Verb RunAs 3. 在菜单栏中选择活动的适配器,或选择 **File → Open PCAP…** / 将 PCAP 文件拖放到窗口上。 4. 使用 **Flows** 查看每个连接的活动,或在菜单栏中输入 BPF 过滤器(如 `tcp port 443`)。 若要显示 GeoIP 和 ASN 列,请将 `GeoLite2-Country.mmdb` 和 `GeoLite2-ASN.mmdb` 放在 `data/` 目录中。请参阅 [data/README.md](data/README.md)。 ## 架构 NetProbe 采用经典的 **Producer-Consumer** 模式,以确保在处理高吞吐量流量时 UI 仍能保持响应。 - **Capture Engine (Producer)**: - 运行在专用的后台 `std::jthread` 中。 - 使用平台捕获后端:Windows 上使用 Npcap,或 Linux/macOS 上使用 libpcap。 - 将原始数据包数据推送到 `PacketQueue` 中。 - **GUI 层**: - 运行在主应用程序线程中。 - 渲染 Dear ImGui 界面。 - 每帧从 `PacketQueue` 中提取数据包,进行解析,并更新指标/图表。 - **PacketQueue**: - 围绕 `std::queue` 构建的线程安全封装。 - 使用 `std::mutex` 和 `std::condition_variable` 防止竞态条件并确保数据完整性。 ## 贡献 欢迎贡献代码!请随时提交 Pull Request。 ## 许可证 本项目基于 MIT 许可证授权。
标签:Bash脚本, C++20, Dear ImGui, GitHub搜索工具, Mutation, Npcap, 可视化, 网络抓包, 网络流量分析