
新发布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,便于停靠栏固定和桌面集成
- 双重安装:同时支持用户本地和系统级安装
- 健壮的错误处理:全面的错误恢复机制,并提供清晰的设置指导
- 性能优化:进程缓存和布局缓存以提升响应速度
环境要求
- 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
安装
方法 1:从源码安装并集成到桌面
- 克隆仓库:
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 停靠栏
- 将图标安装到相应的图标目录
- 更新图标缓存和桌面数据库
- 确保应用程序可以固定到 GNOME 停靠栏/仪表板
方法 2:直接构建并运行
- 克隆仓库:
git clone <repository-url>
cd network-monitor
- 构建并运行:
cargo run
或以 release 模式构建:
cargo build --release
./target/release/network-monitor
方法 3:构建并运行 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 窗口,显示:
- Process(ID):进程名称和 PID,具有准确的 socket 到进程映射
- Protocol:TCP/UDP 协议
- Source:本地端点(解析为可读格式)
- Destination:远程端点(解析为可读格式)
- Status:连接状态(ESTABLISHED、LISTEN 等)
- TX:根据进程 I/O 统计计算的上传速率
- RX:根据进程 I/O 统计计算的下载速率
- Path:来自
/proc/[pid]/cmdline的完整命令路径和参数
行操作
- 左键单击:选择一行(同时显示在底部状态栏中)
- 右键单击:打开上下文菜单,包含 复制值、复制命令 和 终止 "进程" (PID),会询问是终止(SIGTERM)还是强制终止(SIGKILL)
- Delete:终止当前选中的行(相同的确认对话框)
- Ctrl+C:复制单元格内容
- 标题栏中的刷新按钮:立即更新(列表也会每 3 秒自动刷新)
终端界面(TUI)

启动终端界面:
cargo run --bin nmt
TUI 在交互式终端界面中提供相同的监控能力:
按键控制:
q- 退出应用程序r- 切换主机名解析R- 手动刷新连接a- 切换自动刷新(2 秒间隔)↑/↓- 在连接之间导航←/→- 水平滚动表格k/ 右键单击 - 打开某一行的终止菜单(终止 / 强制终止 / 取消)1-8- 按列排序(Process(ID)、Protocol、Source、Destination、Status、TX、RX、Path)
鼠标:左键单击选择一行,右键单击选择该行并打开终止菜单。
功能特性:
- 带自动刷新的实时连接监控
- 带视觉指示器的可排序列
- 宽表格的水平滚动
- 智能列宽调整 - 最后一列占据全部剩余宽度
- 颜色编码的协议(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 能力(只需一次):
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 不可用(缺少能力或内核不支持),应用将退出并显示设置提示信息。
架构
- 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 文件。