iftop показывает, кто прямо сейчас загружает интерфейс: таблицу пар адресов, три окна усреднения и всплески. В отличие от nethogs и bandwhich, он не ищет процесс, зато видит внешние адреса и направления даже на шлюзе. Разберём, как читать экран, ставить фильтры и снимать отчёт без ncurses.
Что именно показывает iftop
Утилита слушает трафик через libpcap и агрегирует его по парам «источник — получатель». В строке два направления: => — отправлено, <= — получено. Три числовые колонки — средняя скорость за 2, 10 и 40 секунд; по умолчанию сортировка идёт по десятисекундной.
192.0.2.15:443 => 10.0.0.24:51234 12.4Mb 9.8Mb 7.1Mb
<= 640Kb 512Kb 480Kb
Внизу — суммарные значения: текущая скорость, пик за 40 секунд и общий объём с момента запуска. Пик отправки и пик приёма могли случиться в разные моменты, поэтому их сумма не обязана совпадать с пиком total. Это не ошибка.
Установка и права
Пакет есть во всех основных дистрибутивах. Запуск требует прав на захват пакетов: либо sudo, либо файловые capabilities. Второй вариант удобнее для регулярной диагностики, но даёт бинарнику широкие полномочия — обновляйте пакет осознанно.
sudo apt install iftop
sudo setcap cap_net_raw,cap_net_admin+eip /usr/sbin/iftop
getcap /usr/sbin/iftop
iftop -h
Если getcap ничего не выводит, capabilities не применились. После обновления пакета их стоит проверить снова. На сервере, где менять права бинарника не хочется, запускайте утилиту через sudo с явно указанным интерфейсом.
Чтение экрана
Первый запуск лучше делать с явным интерфейсом и без DNS: обратные запросы на загруженном канале искажают картину и добавляют трафик. Ключи -n и -N отключают имена хостов и сервисов, -P показывает порты.
ip -br addr
sudo iftop -i enp3s0 -n -N -P
Если имя интерфейса неизвестно, ip -br addr покажет список. Для беспроводного адаптера имя обычно начинается с wlan или wl. На мосту смотрите интерфейс моста, а не отдельный порт: иначе часть трафика не попадёт в учёт.
На шлюзе включите -p, чтобы видеть трафик между другими хостами, но помните: на коммутируемой сети чужие пакеты до вас не дойдут, а на Wi-Fi режим promiscuous часто ограничен драйвером. Для честного анализа проброса используйте зеркалирование порта на коммутаторе, а не надейтесь на один флаг.
Фильтры BPF
Фильтр задаётся синтаксисом BPF, как у tcpdump, и применяется на этапе захвата. Это важное отличие от экранного фильтра: отфильтрованные пакеты не учитываются и в итогах. Опция -F задаёт границу сети, относительно которой определяется направление.
sudo iftop -i enp3s0 -f "tcp port 443"
sudo iftop -i enp3s0 -f "not port 22 and not port 53"
sudo iftop -i br0 -F 192.168.1.0/24
Для IPv6 есть -G 2001:db8::/32. Несколько условий объединяются через and, or и not; сложные выражения берите в кавычки. Если фильтр меняется на ходу клавишей f, подождите до 40 секунд: старые пары остаются в окне усреднения.
Горячие клавиши
Клавиши помогают быстро сузить картину, не перезапуская утилиту.
tпереключает режим строки: два направления или одно;1,2,3сортируют по 2, 10 и 40 секундам;sиdагрегируют по источнику и получателю;SиDпоказывают порты,pвключает их полностью;lфильтрует по имени хоста на экране, не влияя на захват;bубирает графики,Bпереключает биты и байты;Pставит экран на паузу,jиkлистают список.
Клавиша o замораживает порядок строк: новые пары перестают появляться, но в итогах учитываются. Это удобно, когда нужно прочитать конкретную строку на шумном канале.
Текстовый режим и журнал
Для отчёта нужен текстовый режим. Он печатает один снимок в stdout и завершается, поэтому его можно направить в файл или в journal. Опция -s задаёт длительность, -L — число строк.
sudo iftop -t -s 30 -n -N -L 20 -i enp3s0 \
> /var/tmp/iftop-$(date +%F-%H%M).txt
sudo iftop -t -s 10 -n -o 40s -L 0 -i enp3s0
Значение -L 0 в некоторых сборках означает «без ограничения», но поведение зависит от версии. Проверьте вывод на тестовом запуске, прежде чем полагаться на него в автоматизации. Для постоянного мониторинга iftop не предназначен: у него нет базы и алертов, только текущее окно. Если снимки нужны регулярно, складывайте их в отдельный каталог и настройте ротацию, иначе файлы быстро займут диск.
Файл настроек
Постоянные параметры хранятся в ~/.iftoprc. Командная строка перекрывает файл, поэтому временные эксперименты не ломают настройки.
interface: enp3s0
dns-resolution: no
port-resolution: no
port-display: on
sort: 10s
show-totals: yes
max-bandwidth: 100M
max-bandwidth фиксирует верхнюю границу шкалы и делает графики сопоставимыми между запусками. Значение всегда указывается в битах, даже если включён режим байтов. Директива screen-filter задаёт регулярное выражение для экрана.
Диагностика
Типичная ошибка — искать в iftop процесс. Утилита знает только адреса и порты. Чтобы найти владельца соединения, сопоставьте порт с сокетом через ss, а для трафика по процессам используйте nethogs или bandwhich.
sudo ss -tunp | grep 51234
sudo ss -tunp state established '( sport = :443 )'
sudo conntrack -L 2>/dev/null | head
- пустой экран: не тот интерфейс или слишком узкий фильтр;
- одна и та же пара в двух строках: разные порты, включите
p; - суммы не сходятся: активен экранный фильтр или заморожен порядок;
- на Wi-Fi чужие пакеты не видны: коммутатор и драйвер не отдают их без promiscuous-режима;
- учёт расходится с провайдером: считаются заголовки, повторы и служебный трафик.
Если канал занят, сначала снимите тридцатисекундный снимок, затем сузьте фильтр по порту или подсети и только после этого ищите процесс. Такой порядок экономит время и не требует останавливать сервис.
Итог
iftop остаётся быстрым способом увидеть, кто именно занимает канал: пары адресов, направления и три окна усреднения. Запускайте его с -n -N, используйте BPF-фильтры и текстовый режим для отчётов, а для поиска процесса добавляйте ss или nethogs. Помните, что это инструмент разовой диагностики, а не система учёта трафика.