
一款使用 Rust 和 GTK4 构建的实时网络连接监控工具,可在现代图形界面中显示活动连接及其实时 I/O 统计信息。
/proc 文件系统的 Linux 系统bpf-linker(用于 eBPF 编译)sudo apt update
sudo apt install libgtk-4-dev libadwaita-1-dev
sudo dnf install gtk4-devel libadwaita-devel
git clone <repository-url>
cd network-monitor
./scripts/install.sh
sudo ./scripts/install.sh
安装脚本将执行以下操作:
~/.local/bin/(本地)或 /usr/local/bin/(系统级)git clone <repository-url>
cd network-monitor
cargo run
或以 release 模式构建:
cargo build --release
./target/release/network-monitor
git clone <repository-url>
cd network-monitor
cargo build --bin nmt
./target/debug/nmt
或以 release 模式构建:
cargo build --release --bin nmt
./target/release/nmt
移除本地安装:
./scripts/uninstall.sh
系统级移除(需要 sudo):
sudo ./scripts/uninstall.sh
卸载脚本将从相应位置移除二进制文件、桌面文件和图标,并更新所有相关缓存。
启动网络监控应用:
cargo run
应用将打开一个 GTK4 窗口,显示以下内容:
/proc/[pid]/cmdline 的完整命令路径和参数
启动终端界面:
cargo run --bin nmt
TUI 在交互式终端界面中提供相同的监控能力:
按键控制:
q - 退出应用r - 手动刷新连接a - 切换自动刷新(2 秒间隔)↑/↓ - 在连接之间导航←/→ - 水平滚动表格1-8 - 按列排序(进程(ID)、协议、源地址、目的地址、状态、TX、RX、路径)功能:
为便于阅读,常见地址会被简化:
0.0.0.0:* 或 *:* → ANY127.0.0.1:* 或 [::1]:* → LOCALHOST224.0.0.251:* → MDNS该应用使用内核级 kprobes(tcp_v4_connect、tcp_v6_connect、tcp_close、
inet_csk_accept)而不是轮询 /proc/net。这提供了:
bpf_get_current_pid_tgid() 在探针点处捕获,无需扫描 inode与默认的 /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 或内核不受支持), 应用将退出并显示设置提示信息。
bpf_get_current_pid_tgid() 进行进程识别/proc/[pid]/io 获取 I/O 统计信息thiserror 提供全面的错误类型与优雅恢复如果您觉得这个项目有用,请考虑提供捐赠以支持其开发。
88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSvbc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025本项目是开源的。有关详细信息,请参阅 LICENSE 文件。