Когда канал внезапно забит, а iftop показывает только адреса, хочется понять главное: какой именно процесс отправляет или принимает данные. bandwhich решает эту задачу — он сопоставляет сетевые потоки с процессами и обновляет картину в реальном времени. Разберём установку, запуск, чтение вывода и случаи, когда утилита не даёт полной картины.
Как работает bandwhich
Утилита написана на Rust и использует libpcap для перехвата пакетов. Она собирает сведения о соединениях, сопоставляет их с процессами через /proc и показывает локальные и удалённые адреса, а также скорость передачи. Для доступа к сетевым интерфейсам и процессам нужны права root либо возможности CAP_NET_RAW, CAP_NET_ADMIN, CAP_SYS_PTRACE и CAP_DAC_READ_SEARCH.
Важно понимать границу возможностей: bandwhich видит пакеты только на выбранном интерфейсе и только в своём сетевом пространстве имён. В контейнере или виртуальной машине он покажет трафик этого окружения, а не всего гипервизора.
Установка
sudo apt update
sudo apt install bandwhich
bandwhich --version
# альтернатива, если пакета нет
cargo install bandwhich
В Debian, Ubuntu и Linux Mint пакет может отсутствовать в старых релизах — тогда подойдёт установка из crates.io, для которой нужен Rust. В Arch Linux пакет есть в репозиториях, а в Fedora его придётся собирать из crates.io. После обновления дистрибутива проверьте версию: набор флагов между релизами меняется.
Запуск и базовые режимы
sudo bandwhich
sudo bandwhich -i wlan0
sudo bandwhich --no-resolve
sudo bandwhich --show-dns
Без аргументов утилита выбирает интерфейс по умолчанию. -i позволяет указать конкретный интерфейс, --no-resolve отключает обратное разрешение имён, а --show-dns добавляет отображение DNS-запросов. Выход из интерактивного режима — клавиша q.
Обратное разрешение имён создаёт дополнительный трафик и задержки, поэтому при высокой нагрузке на канал его лучше отключить. Тогда вы увидите IP-адреса, что для диагностики часто полезнее: имя cdn.example.net может скрывать десятки разных серверов.
Права без sudo
Постоянно запускать программу через sudo неудобно. Можно выдать бинарнику минимально необходимые возможности:
sudo setcap cap_sys_ptrace,cap_dac_read_search,cap_net_raw,cap_net_admin+ep "$(command -v bandwhich)"
getcap "$(command -v bandwhich)"
bandwhich -i eth0
Первые две возможности дают доступ к /proc/<pid>/fd и нужны, чтобы связать сокет с процессом; ещё две отвечают за перехват пакетов. После обновления пакета файл заменяется, и права сбрасываются — процедуру нужно повторить. Этот способ подходит для доверенной рабочей станции. На общем сервере безопаснее запускать утилиту от отдельного пользователя с нужными возможностями и только на время диагностики.
Как читать экран
Интерфейс делится на несколько областей. В верхней части видна суммарная скорость по интерфейсу, ниже — таблица процессов с объёмом и текущей скоростью отправки и приёма, ещё ниже — активные соединения с удалёнными адресами. Значения обновляются несколько раз в секунду, поэтому кратковременные всплески могут выглядеть как устойчивая нагрузка.
Смотрите не на абсолютные цифры, а на соотношение. Если один процесс стабильно занимает большую часть канала, это и есть виновник. Если трафик размазан по десяткам соединений, скорее всего работает браузер, система обновлений или синхронизация файлов.
Сценарий: канал забит
Допустим, видео начинает буферизоваться, а загрузка файлов идёт медленно. Порядок действий:
- Запустите
sudo bandwhich -i wlan0 --no-resolveи оставьте на минуту. - Запишите процессы, которые держат устойчивый поток.
- Проверьте, не идёт ли обновление пакетов или индексация файлов.
- Сопоставьте удалённые адреса с помощью
ssи журналов приложений. - Остановите или ограничьте лишний процесс, а не весь сетевой стек.
Для точной проверки соединений удобно использовать ss: он показывает сокеты, порты и процессы, хотя и не считает скорость.
sudo ss -tunp state established
sudo ss -tunp dport = :443
sudo lsof -i -P -n
sudo ip -s link show wlan0
Команда ip -s link добавляет важный контекст: ошибки, потери и переполнение очередей. Если счётчики растут, проблема может быть не в приложении, а в драйвере, кабеле или перегрузке точки доступа.
Ограничения метода
HTTPS скрывает имена ресурсов: bandwhich покажет адрес и порт, но не конкретный URL. Один IP может обслуживать множество сервисов через CDN, поэтому вывод «процесс общается с таким-то адресом» не всегда объясняет причину. Короткоживущие соединения могут не попасть в кадр. На каналах 10 Гбит/с и выше перехват всех пакетов заметно нагружает процессор.
Утилита не показывает трафик других устройств в Wi-Fi-сети: для этого нужен режим мониторинга и отдельные инструменты, а не обычный запуск на ноутбуке. Также она не заменяет учёт трафика по интерфейсу за месяц — для истории используйте vnstat. Проект развивается в режиме пассивной поддержки: критические ошибки исправляются, но новых возможностей ждать не стоит. Для базовой диагностики это не мешает.
Запускайте перехват только на своих системах и предупреждайте коллег, если работаете на общем компьютере. Сетевой дамп содержит адреса и порты, а иногда и фрагменты незашифрованных протоколов; хранить такие логи дольше нескольких дней обычно нет смысла. Для разовой диагностики достаточно интерактивного экрана, для повторяющейся — ограниченного по времени лога.
Альтернативы и дополнения
sudo nethogs wlan0
sudo iftop -i wlan0 -n
vnstat -i wlan0 -m
sudo tc -s qdisc show dev wlan0
nethogs группирует трафик по процессам, iftop показывает пары адресов, vnstat хранит статистику по месяцам, а tc помогает увидеть очереди и отброшенные пакеты. Вместе они дают более полную картину, чем один инструмент.
Если нужно записать данные для последующего разбора, используйте машинно-читаемый режим. Формат вывода зависит от версии, поэтому сохраняйте сырой лог и разбирайте его тем парсером, который соответствует установленному релизу.
sudo bandwhich --raw | tee /var/tmp/bandwhich-$(date +%F).log
ls -lh /var/tmp/bandwhich-*.log
wc -l /var/tmp/bandwhich-$(date +%F).log
Чек-лист диагностики
- Убедитесь, что выбран правильный интерфейс:
ip -br link. - Запускайте с правами, достаточными для libpcap.
- Отключите обратное разрешение имён при высокой нагрузке.
- Сверьте процессы с
ssи журналами сервисов. - Проверьте ошибки и потери через
ip -s link. - Не делайте выводов по одному всплеску — наблюдайте несколько минут.
Итог
bandwhich — быстрый способ ответить на вопрос «кто ест трафик» без графической консоли и сложной настройки. Он хорошо работает как первый шаг диагностики, но требует прав и не видит содержимое зашифрованных соединений. Сочетайте его с ss, nethogs и vnstat, чтобы отличить разовый всплеск от устойчивой проблемы.