
Инструмент для мониторинга использования пропускной способности в терминале

Это CLI-утилита для отображения текущего использования сети по процессам, соединениям и удалённым IP/именам хостов.
Этот проект находится в режиме пассивного обслуживания. Критические проблемы будут решаться, но новые функции не разрабатываются. Однако это связано скорее с нехваткой финансирования и/или ресурсов, чем с чем-то ещё, поэтому pull request'ы более чем приветствуются. Кроме того, если у вас есть возможность и желание участвовать в проекте на долгосрочной основе, мы приглашаем вас подать заявку на роль совладельца.
Подробнее см. The Future of Bandwhich #275.
bandwhich сниффает заданный сетевой интерфейс и записывает размер IP-пакетов, сверяя их с файловой системой /proc в Linux, lsof в macOS или используя WinApi в Windows. Он реагирует на размер окна терминала, отображая меньше информации, если для неё нет места. Он также пытается разрешить IP-адреса в имена хостов в фоновом режиме, используя обратный DNS по мере возможности.
Подробные инструкции для каждой платформы см. в INSTALL.md.
Мы предлагаем несколько универсальных бинарников в релизах для различных ОС.
| ОС | Архитектура | Поддержка | Использование |
|---|---|---|---|
| Android | aarch64 | По возможности |
Все современные устройства Android. Обратите внимание, что это чистый бинарный файл, а не APK, пригодный для обычного использования. |
| Linux | aarch64 | Полная | 64-битные ARMv8+ (серверы, некоторые современные роутеры, RPi-4+). |
| armv7hf | По возможности | 32-битные ARMv7 (старые роутеры, pre-RPi-4). | |
| x64 | Полная | Большинство настольных ПК и серверов на Linux. | |
| MacOS | aarch64 | Полная | Mac на Apple Silicon (2021+). |
| x64 | Mac на Intel (до 2021). | ||
| Windows | x64 | Полная | Большинство настольных ПК и серверов на Windows. |
git clone https://github.com/imsnif/bandwhich.git
cd bandwhich
cargo build --release
Актуальную минимальную поддерживаемую версию Rust см. в поле rust-version файла Cargo.toml.
Кросс-компиляция для других целевых платформ поддерживается с помощью cross. Примерная процедура:
uname -m.cross.cross build --release --target <TARGET_TRIPLE>.Пока не решена проблема 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 — "capabilities").# назначить capabilities
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;$PATH при запуске bandwhich: sudo env "PATH=$PATH" bandwhich;sudo: sudo $(command -v bandwhich).Возможно, потребуется сначала установить npcap для захвата пакетов в Windows.
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