YehiaGewily/netprobe-cpp
GitHub: YehiaGewily/netprobe-cpp
一款使用 Modern C++20 和 Dear ImGui 构建的跨平台实时与离线网络流量分析器,提供交互式带宽监控与协议解析能力。
Stars: 0 | Forks: 0
# NetProbe
一个使用 **Modern C++20**、**Npcap/libpcap** 和 **Dear ImGui** 构建的实时与离线网络流量分析器。
  
## 下载
从 [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, 可视化, 网络抓包, 网络流量分析