bandwhich
这是一个CLI工具,用于显示按进程、连接和远程IP/主机名的当前网络使用情况
目录
项目状态
本项目处于被动维护状态。关键问题将得到解决,但不会开发新功能。然而,这主要是由于缺乏资金和/或人力,因此欢迎提交拉取请求。此外,如果您有能力并愿意长期为这个项目做出贡献,我们诚邀您申请成为共同维护者。
更多详情,请参阅 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(较旧的路由器、pre-RPi-4)。 | |
x64 | 完全 | 大多数Linux桌面和服务器。 | |
MacOS | aarch64 | 完全 | Apple silicon Macs(2021+)。 |
x64 | Intel Macs(2021之前)。 | ||
Windows | x64 | 完全 | 大多数Windows桌面和服务器。 |
从源代码构建
git clone https://github.com/imsnif/bandwhich.git
cd bandwhich
cargo build --release
有关最新支持的最低Rust版本,请参阅Cargo.toml中的rust-version
字段。
交叉编译
通过cross支持交叉编译到其他目标。以下是大致步骤:
- 检查目标架构。如果在Linux上,可以使用
uname -m
。 - 查找rustc平台支持以获取相应的目标三元组。
- 安装
cross
。 - 运行
cross build --release --target <TARGET_TRIPLE>
。
Android
在cross-rs/cross#1222解决之前,请使用最新的HEAD:
cargo install --git https://github.com/cross-rs/cross.git cross
cross build --release --target aarch64-linux-android
安装后(Linux)
由于bandwhich
需要嗅探网络数据包,因此需要提升权限。
在Linux上,主要有两种方法可以实现这一点:
1. setcap
- 永久授予
bandwhich
二进制文件所需的权限(在Linux中称为"capabilities")。 - 如果您希望给予所有非特权用户完全访问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
:允许在系统上捕获数据包。
2. 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以在Windows上捕获数据包。
使用方法
用法: bandwhich [选项]
选项:
-i, --interface <接口> 要监听的网络接口,例如 eth0
-r, --raw 机器友好的输出
-n, --no-resolve 不尝试将IP解析为主机名
-s, --show-dns 显示DNS查询
-d, --dns-server <DNS服务器> 使用指定的DNS服务器IP而不是系统默认
--log-to <日志文件> 启用调试日志记录到文件
-v, --verbose... 增加日志详细程度
-q, --quiet... 降低日志详细程度
-p, --processes 仅显示进程表
-c, --connections 仅显示连接表
-a, --addresses 仅显示远程地址表
-u, --unit-family <单位族> 选择特定的单位族 [默认: bin-bytes] [可能的值: bin-bytes, bin-bits, si-bytes, si-bits]
-t, --total-utilization 显示总(累计)使用量
-h, --help 打印帮助信息(使用'--help'查看更多)
-V, --version 打印版本信息
贡献
我们非常欢迎任何形式的贡献。如果您想要新功能(或发现了错误),请开启一个issue或PR。
设置开发环境:
- 克隆项目
cargo run
,或者如果您更喜欢cargo run -- -i <网络接口名称>
(您通常可以用ifconfig
或iwconfig
找到接口名称)。您可能需要root权限来运行此应用程序,所以请确保使用(例如)sudo。
运行测试:cargo test
请注意,目前测试不包括对操作系统层(os
文件夹中的任何内容)的测试。
如果您遇到困难、不确定如何处理某个问题或需要一些指导,欢迎联系:aram@poor.dev
许可证
MIT