GreyWizardPublic/network-traffic-monitor

GitHub: GreyWizardPublic/network-traffic-monitor

自托管的隐私优先网络流量聚合监控系统,通过多平台抓包代理采集元数据并在自有服务器上统一可视化。

Stars: 0 | Forks: 0

# 网络流量监控器 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) 一个自托管、隐私优先的网络流量聚合系统。抓包代理在你的设备上运行,仅将元数据发送到中央服务器,并在浏览器或原生 iOS 应用中可视化流量——任何数据都不会离开你自己的基础设施。 ## 系统概述 ``` ┌─────────────────────────────────────────────────────────────┐ │ Your infrastructure │ │ │ │ ┌──────────────┐ Wire protocol ┌──────────────────┐ │ │ │ ntm-client │ ─────────────────► │ │ │ │ │ (Linux / Win)│ TCP/TLS + Ed25519│ ntm-server │ │ │ └──────────────┘ │ (aggregation + │ │ │ │ HTTPS API) │ │ │ ┌──────────────┐ │ │ │ │ │ ntm-client │ ─────────────────► │ │ │ │ │ (another │ └────────┬─────────┘ │ │ │ machine) │ │ │ │ └──────────────┘ │ HTTPS API │ │ │ │ │ ┌────────────────────┼──────────┐ │ │ │ Dashboard clients │ │ │ │ │ ▼ │ │ │ │ ┌──────────────────────────┐ │ │ │ │ │ Web browser (built-in) │ │ │ │ │ └──────────────────────────┘ │ │ │ │ ┌──────────────────────────┐ │ │ │ │ │ NTM Dashboard (iOS app) │ │ │ │ │ └──────────────────────────┘ │ │ │ └───────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` ## 组件 ### ntm-server 中央聚合引擎。接受来自任意数量 `ntm-client` 实例的连接,在可配置的滚动时间窗口内,将数据包元数据聚合为按接口、按流和按实体(ASN)统计的总计,并通过 HTTPS REST API 提供结果。 还内置了 Web 仪表板,因此任何浏览器都可以显示实时流量数据,而无需安装单独的软件。 **关键特性:** - 强制要求 TLS 和 Ed25519 客户端身份验证 - 仪表板的 WebAuthn 通行密钥身份验证(FIDO2 — Face ID、Touch ID、硬件密钥) - 传统模式下仅限 LAN 过滤;WebAuthn 模式下进行基于会话的身份验证 - 使用基于 CC0 许可的 iptoasn.com 数据进行 IP → ASN/国家解析(无需 MaxMind 账户) - 运行于 Linux;使用 C++17 编写 → **[服务器部署指南](SERVER_DEPLOYMENT.md)** ### ntm-client 轻量级抓包代理。运行在每个受监控的设备上,通过身份验证的 TLS 连接,嗅探每个接口上的所有 IPv4/IPv6 流量,并将元数据(接口名称、源 IP、目的 IP、字节数)流式传输到 `ntm-server`。 **关键特性:** - 无 GUI;设计为作为守护进程或后台服务运行 - 仅发送元数据 — 不包含负载、端口、主机名 - 每个客户端拥有独立的 Ed25519 身份密钥 — 每个代理都有稳定、可验证的身份 - 支持 Linux(libpcap,RTNETLINK 变更检测)和 Windows(Npcap,NotifyIpInterfaceChange) - 在网络变更时自动重新通告其外部 IP 和 LAN 地址 - 可选自动更新:每天检查一次服务器并原子化替换自身的二进制文件(选择启用) → **[客户端部署指南](CLIENT_DEPLOYMENT.md)** ### NTM 仪表板 — iOS 应用 适用于 iPhone 和 iPad 的原生 SwiftUI 监控应用。使用 FIDO2 通行密钥(Face ID / Touch ID)与服务器进行身份验证,并显示与 Web 仪表板相同的流量数据:接口总计、实体流、LAN 设备详情以及客户端健康状态。 **关键特性:** - iOS 18+ / Xcode 16+;Swift 6 严格并发 - 通过 `ASAuthorizationController` 进行通行密钥身份验证 — 绝不发送密码 - 会话 Bearer token 存储在 Keychain 中 - 可选 TLS 证书锁定,支持自签名服务器证书 - 可配置的轮询间隔;下拉刷新 - 要求服务器端处于 WebAuthn 模式(已设置 `webauthn_rp_id`) → **[iOS 仪表板部署指南](IOS_DEPLOYMENT.md)** ### NTM 客户端 — iOS 抓包代理 在 iPhone 和 iPad 上充当通信协议客户端的原生 SwiftUI 应用。使用 Ed25519 密钥对通过 TLS 连接到 `ntm-server`,并流式传输流量观察结果(与 Linux/Windows 上的 `ntm-client` 协议相同)。 **关键特性:** - iOS 18+ / Xcode 16+;Swift 6 严格并发 - Ed25519 密钥对在 Keychain 中生成并存储;通过 HTTPS API 在服务器上注册 - 与 ntm-server 端口 5555 建立 TCP/TLS 通信协议连接 - 显示在服务器仪表板的 **客户端健康状态** 部分 - 自我恢复:采用指数退避算法自动重连 → **[iOS 客户端部署指南](IOS_CLIENT_DEPLOYMENT.md)** ### Web 浏览器仪表板(内置) `ntm-server` 内嵌了一个自包含的 HTML/JS 仪表板,直接通过 HTTPS 提供服务。 无需单独安装或构建步骤 — 在任何浏览器中打开服务器 URL 即可。 - **WebAuthn 模式:** `https://your.domain.com`(Cloudflare Tunnel 或反向代理) - **传统 LAN 模式:** `https://:8443` ## 协议 这两种协议均独立进行版本控制并配有文档。只要组件保持在各自支持的版本范围内,就可以以不同的速度演进。 | 协议 | 参与方 | 传输方式 | 文档 | |---|---|---|---| | **通信协议** | ntm-client → ntm-server | TCP/TLS + Ed25519 | [docs/wire-protocol.md](docs/wire-protocol.md) | | **API 协议** | 浏览器 / iOS 应用 → ntm-server | HTTPS REST + WebAuthn | [docs/api-protocol.md](docs/api-protocol.md) | ### 当前版本 | | 版本 | 引入于 | |---|---|---| | 通信协议 | 参见源码中的 `kWireProtoVersion` | — | | API 协议 | 14 | ntm-server 2.0.0 | | 软件 | 参见 `src/version.hpp` | — | ## 快速构建 **服务器 + Linux 客户端:** ``` cmake -B build-linux -DCMAKE_BUILD_TYPE=Release . cmake --build build-linux -j$(nproc) # 产生:build-linux/ntm-server build-linux/ntm-client ``` **Windows 客户端**(使用 MinGW-w64 和 Npcap SDK 从 Linux 交叉编译): ``` cmake -B build-windows \ -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mingw64.cmake \ -DNPCAP_SDK=/opt/npcap-sdk \ -DCMAKE_BUILD_TYPE=Release . cmake --build build-windows -j$(nproc) # 产生:build-windows/ntm-client.exe ``` **iOS 应用:** 需要配备 Xcode 16+ 的 macOS 以及 [XcodeGen](https://github.com/yonaskolb/XcodeGen)。 ``` cd ios/NTMDashboard xcodegen generate open NTMDashboard.xcodeproj ``` 请参阅下方的部署指南,了解包含 TLS、身份验证和服务配置在内的完整生产环境设置。 ## 部署指南 | 指南 | 描述 | |---|---| | [SERVER_DEPLOYMENT.md](SERVER_DEPLOYMENT.md) | 完整的服务器设置:TLS、Ed25519、WebAuthn、systemd、安全强化检查清单 | | [CLIENT_DEPLOYMENT.md](CLIENT_DEPLOYMENT.md) | 适用于 Linux(systemd)和 Windows(任务计划程序)的客户端设置 | | [IOS_DEPLOYMENT.md](IOS_DEPLOYMENT.md) | NTM 仪表板:构建、通行密钥注册、证书锁定 | | [IOS_CLIENT_DEPLOYMENT.md](IOS_CLIENT_DEPLOYMENT.md) | NTM 客户端:构建、密钥注册、通信协议代理 | | [docs/auto-update.md](docs/auto-update.md) | 自动更新操作员指南:服务器设置、二进制文件命名、管理页面 | | [docs/wire-protocol.md](docs/wire-protocol.md) | 通信协议规范(ntm-client ↔ ntm-server) | | [docs/api-protocol.md](docs/api-protocol.md) | API 协议规范(仪表板客户端 ↔ ntm-server) | ## 安全模型 | 边界 | 机制 | |---|---| | 客户端 → 服务器数据接入 | 双向 TLS + Ed25519 密钥身份验证(均为强制要求) | | 浏览器 → 仪表板 | WebAuthn 通行密钥会话(推荐)或仅限局域网的 HTTPS(无身份验证) | | iOS → 仪表板 | WebAuthn 通行密钥(Face ID / Touch ID);会话 token 存储在 Keychain 中 | | 传输中的数据 | 所有链路强制使用 TLS 1.2+ | | 静态数据 | 流量统计仅存在于内存中;WebAuthn 凭据和 IP→ASN 数据库位于磁盘上 | ## 许可证 源代码:MIT — 参见 [`LICENSE`](LICENSE)。 第三方库和数据源:参见 [`LICENSES.md`](LICENSES.md)。
标签:Bash脚本, C++17, HTTP头分析, iOS, TLS加密, WebAuthn, 底层编程, 自托管