
这是一个 CLI 工具,用于按进程、连接和远程 IP/主机名显示当前网络利用率。
本项目目前处于被动维护状态。关键问题会得到处理,但没有新功能在开发中。然而,这主要是由于缺乏资金和/或人力,因此欢迎提交拉取请求。此外,如果您有能力并愿意长期为该项目做出贡献,我们希望邀请您申请共同维护者身份。
更多细节,请参见 The Future of Bandwhich #275。
bandwhich 监听指定网络接口,记录 IP 数据包大小,并在 Linux 上通过 /proc 文件系统、macOS 上通过 lsof、Windows 上通过 WinApi 进行交叉引用。它会根据终端窗口大小做出响应,空间不足时显示较少信息。它还会尽力通过反向 DNS 在后台将 IP 解析为主机名。
有关每个平台的详细说明,请参见 INSTALL.md。
我们在 releases 页面为多种操作系统提供了通用二进制文件。
| 操作系统 | 架构 | 支持程度 | 适用场景 |
|---|---|---|---|
| Android | aarch64 | 尽力而为 |
所有现代 Android 设备。 注意:此为纯二进制文件,并非适合一般使用的 APK。 |
| Linux | aarch64 | 完全支持 | 64 位 ARMv8+(服务器、部分现代路由器、RPi-4+)。 |
| armv7hf | 尽力而为 | 32 位 ARMv7(较旧路由器、RPi-4 前)。 | |
| x64 | 完全支持 | 大多数 Linux 桌面和服务器。 | |
| MacOS | aarch64 | 完全支持 | Apple Silicon Mac(2021 年后)。 |
| x64 | Intel Mac(2021 年前)。 | ||
| Windows | x64 | 完全支持 | 大多数 Windows 桌面和服务器。 |
git clone https://github.com/imsnif/bandwhich.git
cd bandwhich
cargo build --release
关于最新的最低支持 Rust 版本,请参考 Cargo.toml 中的 rust-version 字段。
通过 cross 支持交叉编译到其他目标平台。大致步骤如下:
uname -m。cross。cross build --release --target <目标三元组>。在 cross-rs/cross#1222 解决之前,请使用最新 HEAD:
cargo install --git https://github.com/cross-rs/cross.git cross
cross build --release --target aarch64-linux-android
由于 bandwhich 会嗅探网络数据包,因此需要提升权限。
在 Linux 上有两种主要方式实现:
setcapbandwhich 二进制文件所需的权限(在 Linux 中称为“能力”)。bandwhich 监控能力的权限,可以这样做。
# 分配能力
sudo setcap cap_sys_ptrace,cap_dac_read_search,cap_net_raw,cap_net_admin+ep $(command -v bandwhich)
# 以非特权用户身份运行
bandwhich
cap_sys_ptrace,cap_dac_read_search:允许访问 /proc/<pid>/fd/,以便 bandwhich 可以确定哪个开放端口属于哪个进程。cap_net_raw,cap_net_admin:允许捕获系统中的数据包。sudo (或替代方案)sudo bandwhich
请注意,如果您的安装方法将 bandwhich 安装到主目录中的某个位置(可以使用 command -v bandwhich 检查),可能会收到 command not found 错误。这是因为在许多发行版中,sudo 默认出于安全考虑不会保留用户的 $PATH。
要解决此问题,您可以执行以下任一操作:
sudo 保留您的 $PATH 环境变量;bandwhich 时显式设置 $PATH:sudo env "PATH=$PATH" bandwhich;sudo:sudo $(command -v bandwhich)。您可能需要在 Windows 上首先安装 npcap 以捕获数据包。
Usage: bandwhich [OPTIONS]
Options:
-i, --interface <INTERFACE> 要监听的网络接口,例如 eth0
-r, --raw 输出更友好的机器格式
-n, --no-resolve 不尝试将 IP 解析为主机名
-s, --show-dns 显示 DNS 查询
-d, --dns-server <DNS_SERVER> 使用的 DNS 服务器 IP,替代系统默认
--log-to <LOG_TO> 启用调试日志并写入文件
-v, --verbose... 增加日志详细程度
-q, --quiet... 减少日志详细程度
-p, --processes 仅显示进程表
-c, --connections 仅显示连接表
-a, --addresses 仅显示远程地址表
-u, --unit-family <UNIT_FAMILY> 选择特定单位系列 [默认: bin-bytes] [可能的值: bin-bytes, bin-bits, si-bytes, si-bits]
-t, --total-utilization 显示总(累积)用量
-h, --help 打印帮助(使用 '--help' 查看更多)
-V, --version 打印版本
请参见 CONTRIBUTING.md。
MIT