Когда канал внезапно забит, а 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, чтобы отличить разовый всплеск от устойчивой проблемы.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте