22 个版本 (重大更改)
新 0.23.0 | 2024 年 8 月 17 日 |
---|---|
0.22.2 | 2024 年 1 月 27 日 |
0.21.1 | 2023 年 10 月 16 日 |
0.20.0 | 2020 年 10 月 15 日 |
0.6.0 | 2019 年 12 月 30 日 |
#728 在 网络编程
每月 437 次下载
120KB
2.5K SLoC
bandwhich
这是一个 CLI 工具,用于显示当前按进程、连接和远程 IP/主机名显示的网络利用率
目录
项目状态
该项目处于被动维护状态。将解决关键问题,但不再开发新功能。然而,这更多的是由于资金和/或人力不足,因此欢迎拉取请求。此外,如果您能够并愿意长期为该项目做出贡献,我们欢迎您申请共同维护者。
有关更多详细信息,请参阅 Bandwhich 的未来 #275。
它是如何工作的?
bandwhich
检测指定的网络接口并记录 IP 数据包大小,与 Linux 的 /proc
文件系统、macOS 的 lsof
或 Windows 的 WinApi 进行交叉引用。它响应终端窗口大小,如果没有空间,则显示较少的信息。它还会尝试在后台使用反向 DNS 尽力将 IP 解析为其主机名。
安装
下游打包状态
有关每个平台的详细说明,请参阅 INSTALL.md。
下载预构建的二进制文件
我们在 发布 中提供了针对各种操作系统的一些通用二进制文件。
操作系统 | 架构 | 支持 | 用法 |
---|---|---|---|
Android | aarch64 | 尽力而为 |
所有现代Android设备。 注意,这是一个纯二进制文件,不是适用于通用使用的APK。 |
Linux | aarch64 | 完整 | 64位ARMv8+(服务器、一些现代路由器、RPi-4+)。 |
armv7hf | 尽力而为 | 32位ARMv7(较老的路由器、RPi-4之前)。 | |
x64 | 完整 | 大多数Linux桌面和服务器。 | |
MacOS | aarch64 | 完整 | 苹果硅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支持为其他目标交叉编译。以下是大致步骤:
- 检查目标架构。如果在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中称为“能力”)。 - 如果您想给所有未授权用户完全访问bandwhich的监控能力。
- 这是为单个用户机器或所有用户都受信任的情况下推荐设置。
- 如果您想确保用户不能看到他人的流量,则不建议这样做。
# assign capabilities
sudo setcap cap_sys_ptrace,cap_dac_read_search,cap_net_raw,cap_net_admin+ep $(command -v bandwhich)
# run as unprivileged user
bandwhich
能力说明
cap_sys_ptrace,cap_dac_read_search
:允许访问/proc/<pid>/fd/
,以便bandwhich
可以确定哪个打开的端口属于哪个进程。cap_net_raw,cap_net_admin
:允许在您的系统上捕获数据包。
2. sudo
(或替代方案)
- 每次都需要提升权限。
- 如果您是多用户环境的管理员,请这样做。
sudo bandwhich
请注意,如果您的安装方法将bandwhich
安装到您的家目录中(您可以使用bandwhich -v
来检查),您可能会遇到command not found
错误。这是因为许多发行版默认情况下出于安全考虑,不会保留您的$PATH
环境变量。
为了克服这个问题,您可以执行以下任何一项操作:
- 使
sudo
保留您的$PATH
环境变量; - 在运行
bandwhich
时显式设置$PATH
:sudo env "PATH=$PATH" bandwhich
; - 传递到
sudo
的完整路径:sudo $ command -v bandwhich
。
安装后(Windows)
您可能首先需要在Windows上安装npcap以捕获数据包。
用法
Usage: bandwhich [OPTIONS]
Options:
-i, --interface <INTERFACE> The network interface to listen on, eg. eth0
-r, --raw Machine friendlier output
-n, --no-resolve Do not attempt to resolve IPs to their hostnames
-s, --show-dns Show DNS queries
-d, --dns-server <DNS_SERVER> A dns server ip to use instead of the system default
--log-to <LOG_TO> Enable debug logging to a file
-v, --verbose... Increase logging verbosity
-q, --quiet... Decrease logging verbosity
-p, --processes Show processes table only
-c, --connections Show connections table only
-a, --addresses Show remote addresses table only
-u, --unit-family <UNIT_FAMILY> Choose a specific family of units [default: bin-bytes] [possible values: bin-bytes, bin-bits, si-bytes, si-bits]
-t, --total-utilization Show total (cumulative) usages
-h, --help Print help (see more with '--help')
-V, --version Print version
贡献
欢迎任何形式的贡献。如果您想添加新功能(或发现了一个错误),请提交一个issue或PR。
设置您的开发环境
- 克隆项目
cargo run
,或者如果您更喜欢cargo run -- -i <网络接口名称>
(您通常可以使用ifconfig
或iwconfig
找到名称)。运行此应用程序可能需要root权限,因此请确保使用(例如)sudo。
要运行测试:cargo test
请注意,目前测试没有测试os层(os
文件夹中的任何内容)。
如果您遇到困难,不确定如何处理问题或需要一些指导,欢迎联系:[email protected]
许可证
MIT
依赖项
~20-35MB
~556K SLoC