跨平台流量观测骨架:桌面(Windows / macOS / Linux)使用 C++ + PcapPlusPlus + nDPI(可选系统安装)+ libhv;Web 使用 React + Vite + uPlot;Android 使用 VpnService + JNI(当前 JNI 为 L3 粗分类,可按 LGPL 要求接入 nDPI 动态库)。
依赖:vcpkg(pcapplusplus、openssl、sqlite3)、已安装 Npcap(Windows)或 libpcap(Linux/macOS)、可选 nDPI(NDPI_ROOT 或系统包)。
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake
cmake --build build未检测到 Pcap++/PCAP 时仅编译 netpulse_core(不拉取 libhv)。
cd web && npm install && npm run build && cd ..
./build/desktop/netpulse-desktop --http 8081 --gui web/dist --data ./data环境变量:NETPULSE_IFACE、NETPULSE_BIND(默认 127.0.0.1)、NETPULSE_GUI、NETPULSE_DATA。
cd web && npm install && npm run dev开发服务器将 /api 代理到 http://127.0.0.1:8081;请先运行 netpulse-desktop。WebSocket 直连 ws://127.0.0.1:8081/。
使用 Android Studio 打开 android/。需本机 NDK + CMake。当前实现为演示隧道:不转发流量,可能导致暂时断网;可在 app/src/main/cpp 的 CMake 中增加 nDPI 与共享解析逻辑。
powershell -ExecutionPolicy Bypass -File scripts/setup-env.ps1
powershell -ExecutionPolicy Bypass -File scripts/package-portable.ps1在仓库根目录也可直接运行 .\setup-env.ps1、.\package-portable.ps1(转发到 scripts/)。
setup-env.ps1:可选通过 winget 安装 CMake / Git / Ninja / Node;在仓库根目录下的vcpkg/克隆并 bootstrap(已写入.gitignore);执行 manifest install;web/下 npm;检测 Npcap。参数:-VcpkgRoot(改用其它路径时)、-Triplet(默认x64-windows)、-SkipVcpkgInstall、-SkipNpm。package-portable.ps1:Release 构建、dist/NetPulse-win-x64/绿色目录(含start.bat、gui/、data/、README_PORTABLE.txt)及dist/NetPulse-win-x64.zip。动态链接时会复制 vcpkg 下非 Npcap 的 DLL;不得捆绑wpcap.dll/Packet.dll,终端用户须自行安装 Npcap。- 生成
scripts/env-local.ps1(VCPKG_ROOT),供打包脚本自动加载。
chmod +x scripts/setup-env.sh scripts/package-portable.sh
./scripts/setup-env.sh
source scripts/env-local.sh
./scripts/package-portable.shsetup-env.sh:按发行版尝试 apt/dnf/pacman 或提示 Homebrew;默认在仓库内vcpkg/克隆 vcpkg 与 manifest;webnpm。参数:--vcpkg-root、--triplet、--skip-vcpkg-install、--skip-npm。package-portable.sh:生成dist/<名称>/与dist/<名称>.tar.gz,内含start.sh(设置LD_LIBRARY_PATH/DYLD_LIBRARY_PATH)。
nDPI 为 LGPL-3.0。闭源分发时请满足动态链接与再链接义务。