
新发布Aug 15, 2026
network-monitor v0.7.5
一款使用 Rust 和 GTK4 构建的实时网络连接监控工具,在现代图形界面中显示活动连接及实时 I/O 统计信息。
网络监视器

一款使用 Rust 和 GTK4 构建的实时网络连接监控工具,可在现代图形界面中显示活动连接及其实时 I/O 统计信息。
功能特性
- 实时监控:持续监控活动网络连接
- I/O 统计:显示每个连接的实时上传/下载速率
- 进程识别:显示与每个连接关联的程序和 PID
- 现代 GTK4 界面:采用 Libadwaita 风格的简洁、响应式图形界面
- 终端界面(TUI):提供相同监控能力的交互式终端界面
- 地址解析:简化常见地址(localhost、any、mDNS)
- 连接过滤:过滤掉 localhost 连接,以获得更清晰的输出
- GNOME 集成:提供正确的 WM class 支持,便于固定到 Dock 和桌面集成
- 双重安装:同时支持用户本地和系统级安装
- 健壮的错误处理:全面的错误恢复能力,并提供清晰的设置指引
- 性能优化:通过进程缓存和布局缓存提升响应速度
系统要求
- Rust 1.70+(2021 edition)
- GTK4 开发库
- Libadwaita 开发库
- 具有
/proc文件系统的 Linux 系统 - Linux 5.8+(用于 eBPF 细粒度能力)
- Nightly Rust 和
bpf-linker(用于 eBPF 编译)
在 Ubuntu/Debian 上安装:
sudo apt update
sudo apt install libgtk-4-dev libadwaita-1-dev
在 Fedora 上安装:
sudo dnf install gtk4-devel libadwaita-devel
安装
方法一:从源码安装并集成桌面
- 克隆仓库:
git clone <repository-url>
cd network-monitor
- 本地安装(无需 sudo):
./scripts/install.sh
- 或系统级安装(需要 sudo):
sudo ./scripts/install.sh
安装脚本将执行以下操作:
- 构建 GTK4 和 TUI 两种二进制文件(本地为 debug,系统级为 release)
- 将二进制文件安装到
~/.local/bin/(本地)或/usr/local/bin/(系统级) - 安装带有正确 WM class 的桌面文件,以支持 GNOME Dock 固定
- 将图标安装到相应的图标目录
- 更新图标缓存和桌面数据库
- 确保应用可以被固定到 GNOME Dock/仪表盘
方法二:直接构建并运行
- 克隆仓库:
git clone <repository-url>
cd network-monitor
- 构建并运行:
cargo run
或以 release 模式构建:
cargo build --release
./target/release/network-monitor
方法三:构建并运行 TUI 版本
- 克隆仓库:
git clone <repository-url>
cd network-monitor
- 构建并运行 TUI:
cargo build --bin nmt
./target/debug/nmt
或以 release 模式构建:
cargo build --release --bin nmt
./target/release/nmt
卸载
移除已安装版本
移除本地安装:
./scripts/uninstall.sh
系统级移除(需要 sudo):
sudo ./scripts/uninstall.sh
卸载脚本将从相应位置移除二进制文件、桌面文件和图标,并更新所有相关缓存。
使用方法
GTK4 图形界面
启动网络监控应用:
cargo run
应用将打开一个 GTK4 窗口,显示以下内容:
- 进程(ID):进程名称和 PID,具有准确的 socket 到进程映射
- 协议:TCP/UDP 协议
- 源地址:本地端点(已解析为可读格式)
- 目的地址:远程端点(已解析为可读格式)
- 状态:连接状态(ESTABLISHED、LISTEN 等)
- TX:根据进程 I/O 统计计算的上传速率
- RX:根据进程 I/O 统计计算的下载速率
- 路径:来自
/proc/[pid]/cmdline的完整命令路径和参数
终端界面(TUI)

启动终端界面:
cargo run --bin nmt
TUI 在交互式终端界面中提供相同的监控能力:
按键控制:
q- 退出应用r- 手动刷新连接a- 切换自动刷新(2 秒间隔)↑/↓- 在连接之间导航←/→- 水平滚动表格1-8- 按列排序(进程(ID)、协议、源地址、目的地址、状态、TX、RX、路径)
功能:
- 支持自动刷新的实时连接监控
- 可排序的列,带有视觉指示器
- 针对宽表格的水平滚动
- 智能列宽 - 最后一列获得全部剩余宽度
- 协议颜色标识(TCP/TCP6 为绿色,UDP/UDP6 为黄色)
- 活动连接高亮显示
- 进程和 PID 信息
- 实时 I/O 速率显示
- 与 GTK4 版本列顺序一致,以保持统一
地址解析
为便于阅读,常见地址会被简化:
0.0.0.0:*或*:*→ANY127.0.0.1:*或[::1]:*→LOCALHOST224.0.0.251:*→MDNS
工作原理
eBPF 后端(事件驱动)
该应用使用内核级 kprobes(tcp_v4_connect、tcp_v6_connect、tcp_close、
inet_csk_accept)而不是轮询 /proc/net。这提供了:
- 事件驱动:亚毫秒级事件投递,无轮询开销(约 1-3% CPU)
- 直接获取 PID:通过
bpf_get_current_pid_tgid()在探针点处捕获,无需扫描 inode - 短生命周期连接:不会在轮询间隔之间被遗漏
eBPF 模式
与默认的 /proc/net 轮询方式相比,eBPF 后端提供事件驱动的连接监控,开销更低且事件实时。
它可以捕获轮询可能遗漏的短生命周期连接。
前置条件:
rustup toolchain install nightly
cargo install bpf-linker
构建并运行:
cargo build
以普通用户身份运行(需要内核 5.8+):
为二进制文件一次性授予所需 Linux capabilities:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/network-monitor
./target/debug/network-monitor
或对于 TUI 版本:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/nmt
./target/debug/nmt
对于 release 构建,请相应调整路径:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/release/network-monitor
如果 eBPF 不可用(缺少 capabilities 或内核不受支持), 应用将退出并显示设置提示信息。
架构
- GTK4:现代跨平台 GUI 框架
- Libadwaita:GNOME 风格 UI 组件
- Tokio:用于并发操作的异步运行时
- Aya + eBPF:通过 kprobes 进行内核级连接追踪以获取实时事件
- 直接获取 PID:在探针点通过
bpf_get_current_pid_tgid()进行进程识别 - 系统调用:直接读取
/proc/[pid]/io获取 I/O 统计信息 - 错误处理:使用
thiserror提供全面的错误类型与优雅恢复 - 性能缓存:UI 布局缓存以实现最佳性能
Linux 软件包
捐赠
如果您觉得这个项目有用,请考虑提供捐赠以支持其开发。
- Monero:
88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv - Bitcoin:
bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025
许可证
本项目是开源的。有关详细信息,请参阅 LICENSE 文件。