RustNet: пользовательский интерфейс для мониторинга сети в реальном времени, созданный на Rust

Как сетевой администратор, вы должны знать, что происходит в вашей сети прямо сейчас. Мониторинг сети в режиме реального времени помогает выявлять всплески активности, аномалии, некорректные процессы или нежелательные подключения по мере их возникновения. Существует множество инструментов для мониторинга сети в режиме реального времени. Недавно я наткнулся на многообещающий инструмент под названием RustNet.
RustNet — это инструмент для мониторинга на основе терминала, созданный на языке Rust. Он позволяет в режиме реального времени отслеживать сетевые подключения: какой процесс их инициировал, в каком они состоянии и какой объём данных они передают.
В этой статье мы узнаем, что такое RustNet, как его установить в Linux и как контролировать свою сеть с помощью RustNet.
Что такое RustNet?
RustNet — это кроссплатформенный инструмент с пользовательским интерфейсом для мониторинга сети, созданный на языке Rust. Основная цель RustNet — обеспечить мониторинг сетевых подключений в режиме реального времени с подробной информацией о состоянии.
RustNet запускается в окне терминала, что делает его подходящим для сред, в которых использование графических инструментов, таких как Wireshark, нецелесообразно, особенно на серверах.
Он поддерживает различные платформы, включая Linux, macOS и Windows. На компьютере с Linux его можно установить с помощью менеджера пакетов Rust Cargo или Docker. Для пользователей Fedora он доступен через репозиторий COPR.
Это проект с открытым исходным кодом, доступный на GitHub. Проект распространяется по лицензии Apache версии 2.0.
Ключевые особенности RustNet
1. Мониторинг в реальном времени и отслеживание подключений
RustNet отслеживает активные соединения по протоколам TCP, UDP, ICMP и ARP. Он отображает конкретные статусы соединений, в том числе подробные состояния для различных протоколов:
- Состояния TCP:
ESTABLISHED
,SYN_SENT
,TIME_WAIT
,CLOSED
и другие. - Состояния QUIC:
QUIC_INITIAL
,QUIC_HANDSHAKE
,QUIC_CONNECTED
, иQUIC_DRAINING
. - Состояния DNS:
DNS_QUERY
, иDNS_RESPONSE
. - Состояния SSH:
BANNER
,KEYEXCHANGE
,AUTHENTICATION
, иESTABLISHED
(для протокола SSH).
2. Глубокая проверка пакетов (DPI)
Инструмент определяет протоколы приложений, анализируя содержимое пакетов:
- Он определяет HTTP-соединения, включая информацию о хосте.
- Он обнаруживает соединения HTTPS/TLS и отображает индикацию имени сервера (Server Name Indication, SNI).
- Он отслеживает DNS-запросы и ответы.
- Он обеспечивает отслеживание SSH-подключений, включая определение версии и состояния подключения.
- Он отслеживает протокол QUIC, в частности обнаруживает
CONNECTION_CLOSE
-фрейм и проверяет соответствие RFC 9000. DPI можно отключить с помощью--no-dpi
-параметра командной строки, чтобы снизить нагрузку.
3. Идентификация процесса
Важной особенностью RustNet является возможность связывать сетевые подключения с запущенными процессами в системе.
- В Linux он предлагает экспериментальную поддержку eBPF для повышения производительности и снижения накладных расходов при идентификации процессов.
- Если eBPF недоступен или не работает, RustNet возвращается к стандартным методам, зависящим от платформы (например, к чтению файлов
/proc
в Linux или использованиюlsof
или PKTAP в macOS). - TUI показывает, какой метод обнаружения процессов активен в данный момент.
4. Пользовательский интерфейс терминала (TUI) и интерактивность
RustNet использует фреймворк ratatui
для создания продвинутого интерфейса терминала:
- Расширенная фильтрация: пользователи могут фильтровать подключения в режиме реального времени с помощью нечеткого поиска в стиле vim/fzf по всем полям, включая данные о разрешении экрана. Поддерживаются фильтры по ключевым словам (например,
port:44
,process:firefox
,sni:github.com
,state:established
). - Сортировка: подключения можно сортировать по различным столбцам, включая протокол, удалённый адрес, состояние, процесс и пропускную способность (для загрузки или выгрузки).
- Визуальные индикаторы: цвет соединений меняется в зависимости от приближающегося времени ожидания: жёлтый означает, что время ожидания достигнуто на 75–90 % (устаревшее соединение), а красный — что оно превышено на 90 % (критическое состояние, соединение будет разорвано).
5. Архитектура и требования
RustNet использует многопоточную архитектуру с такими ключевыми компонентами, как поток захвата пакетов (с использованием libpcap
), обработчики пакетов, обогащение процессов и поток очистки.
Из-за необходимости перехвата пакетов RustNet требует повышенных привилегий (например, sudo
) в большинстве систем.
В Linux двоичному файлу можно предоставить определённые сетевые возможности (CAP_NET_RAW
и CAP_NET_ADMIN
), чтобы он мог работать без полного доступа root.
Установите RustNet в Linux
Убедитесь, что у вас есть всё необходимое:
- RustNet — это кроссплатформенный инструмент, поэтому вам понадобится система под управлением Linux, macOS или Windows.
- Рабочая цепочка инструментов Rust (т. е.
rustc
иcargo
) - Разрешения на захват/проверку сетевого трафика (часто требуются права суперпользователя/администратора или аналогичные)
Установка Rust
Если вы ещё не установили Rust, запустите:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Следуйте инструкциям. После установки запустите:
rustc --version cargo --version
Вам следует ознакомиться с печатными версиями.
Установка RustNet
После настройки Rust установите RustNet с помощью cargo:
cargo install rustnet
Если команда не выполняется, возможно, вам нужно обновить набор инструментов.
rustup update
Если вы используете RHEL или Fedora, вы можете установить Rustnet через репозиторий COPR:
sudo dnf copr enable domcyrus/rustnet sudo dnf install rustnet
Если вы используете системы на базе Arch, он доступен в AUR. Вы можете установить его с помощью любых вспомогательных инструментов AUR, таких как Paru или Yay:
paru -S rustnet
Кроме того, вы можете скачать готовые двоичные файлы RustNet с страницы релизов (https://github.com/domcyrus/rustnet/releases) и установить их с помощью менеджера пакетов вашего дистрибутива:
Debian / Ubuntu:
sudo dpkg -i Rustnet_LinuxDEB_amd64.deb sudo apt-get install -f # Запустите с помощью sudo sudo rustnet # Необязательно: предоставьте возможность запуска без sudo sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/rustnet rustnet
RHEL / Fedora:
sudo dnf установить Rustnet_LinuxRPM_x86_64.rpm # Запустите с помощью sudo sudo rustnet # Необязательно: предоставьте возможность запуска без sudo sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/rustnet rustnet
Мониторинг сетевого трафика в режиме реального времени с помощью RustNet
Для мониторинга сетевого трафика в реальном времени часто требуются повышенные привилегии.
- В Linux запустите RustNet с
sudo
или убедитесь, что ваш пользователь входит в группу с доступом к/dev/net/tun
или устройствам для захвата пакетов. - В macOS вам может потребоваться разрешить «полный доступ к диску» или предоставить права на захват пакетов в настройках системы.
- В Windows запустите от имени администратора.
Предупреждение: Запуск средств захвата с повышенными привилегиями может представлять угрозу безопасности. Используйте только проверенные источники.
В демонстрационных целях я буду запускать RustNet на виртуальной машине Arch Linux.
Запустите RustNet с помощью команды:
sudo rustnet
Если вы хотите запустить его без sudo, выполните команду:
sudo setcap cap_net_raw,cap_net_admin=eip $(which rustnet)
Теперь запустите инструмент RustNet без sudo:
rustnet
Так выглядит интерфейс RustNet по умолчанию.
По умолчанию вы увидите представление Обзор (см. скриншот ниже). Это экран по умолчанию, на котором отображаются активные подключения.

Мониторинг сети в режиме реального времени с помощью RustNet — обзор
Обзорный раздел
Экран «Обзор» условно разделён на следующие части:
- Список активных подключений: каждая строка представляет собой активное подключение
- Столбцы: локальный адрес, удалённый адрес, состояние, служба, приложение/хост, количество входящих/исходящих (в байтах), процесс
- Правые панели / боковые панели: сводная статистика и обзор трафика
- Статус / подсказки по клавишам: внизу отображаются такие инструкции, как «Нажмите ‘h’ для получения справки | ‘/’ для фильтрации и навигации | ‘c’ для копирования адреса | Подключений: 3»
Несколько заметок:
- Выделенная строка (в
>
) — это выбранное в данный момент подключение. - Справа отображается статистика интерфейса, обработанные пакеты и общий трафик (входящий/исходящий), а также время «последнего обновления».
- Изначально столбцы «Сервис» и «Приложение/хост» могут быть пустыми (
-
), если RustNet не может определить их для данного подключения.
Вот что означает каждый столбец / показатель:
- Локальный адрес / порт: локальная конечная точка (ваш компьютер).
- Удаленный адрес / порт: удаленный узел.
- Состояние: состояния TCP, такие как ESTABLISHED, LISTEN, CLOSE_WAIT и т. д.
- Входящие/исходящие байты: объём отправленных/полученных данных.
- Процесс / PID: какой процесс владеет соединением (если доступно).
Понимающие состояния:
- LISTEN: служба, ожидающая входящих подключений
- УСТАНОВЛЕНО: активное, открытое соединение
- CLOSE_WAIT, FIN_WAIT и т. д.: соединения на этапах завершения
Просмотр Сведений о подключении
Если вы нажмете Enter при подключении, откроется это подробное представление. Оно включает в себя:
- Протокол, локальный адрес, удалённый адрес
- Состояние (например, УСТАНОВЛЕНО)
- Имя процесса, PID (при наличии)
- Название службы, приложение (если обнаружено)
- Статистика трафика: общее количество отправленных/полученных байтов, отправленных/полученных пакетов, текущая скорость
Это позволяет увеличить масштаб одного соединения, чтобы понять, как оно работает. Используйте Esc (или соответствующую клавишу), чтобы вернуться к обзору.

Просмотр сведений о сетевом подключении в RustNet TUI
Справка / Просмотр условных обозначений ключей
Нажатие h
(или tab
) переключает экран справки.

Раздел Справки RustNet
На скриншоте выше вы можете увидеть:
q
увольняется (с подтверждением)Ctrl+C
немедленно увольняетсяTab
переключается между вкладками (Обзор, Подробности, Справка)- Клавиши навигации:
j
,k
(или клавиши со стрелками) для перемещения вверх/вниз p
переключается между отображением имён служб и номеров портовs
циклы сортировки столбцов (по пропускной способности, процессу и т. д.)S
переключает направление сортировкиc
копирует удаленный адрес в буфер обмена/
переходит в режим фильтрации
В разделе справки приведено несколько примеров синтаксиса фильтров. Вы можете использовать их в качестве краткого справочника.
/port:44
/src:192.168
/dst:github.com
/process:firefox
Примеры использования RustNet
С помощью инструмента сетевого мониторинга RustNet вы можете выявлять проблемы в режиме реального времени. Вот несколько примеров того, как использовать RustNet для выявления проблем.
1. Обнаружение всплесков трафика
Если вы заметили внезапное значительное увеличение количества байтов, передаваемых по одному соединению:
- Определите процесс
- Проверить удаленный адрес
- Проверьте, является ли это ожидаемым действием (например, резервное копирование, загрузка файла) или чем-то подозрительным
2. Подозрительные подключения / неизвестные хосты
Если подключение осуществляется к IP-адресу/домену, который вам неизвестен:
- Отфильтруйте это соединение
- Посмотрите на процесс и на время
- При необходимости разрешите DNS-запросы или проверьте репутацию IP-адреса
3. Мониторинг обслуживания
Если вы управляете веб-сервером:
- Фильтр для порта 80 или 443
- Следите за тем, какие клиенты подключаются
- Смотрите размер ответа / сроки
Заключение
В этой статье мы рассказали, что такое RustNet, как установить и использовать RustNet для мониторинга вашей сети в режиме реального времени.
Мониторинг сети в режиме реального времени — важная задача системного или сетевого администратора. Он позволяет увидеть, что происходит «под капотом», выявить аномалии и понять, как ведёт себя сеть в процессе работы. RustNet TUI — это простой, но эффективный инструмент для начала работы.
Лучший способ узнать больше об этом инструменте — использовать его ежедневно. Попробуйте запустить RustNet на тестовой системе, сгенерируйте трафик (например, откройте несколько вкладок в браузере, передайте файлы), изучите фильтры и поэкспериментируйте.
Когда вы освоитесь, вы сможете расширить эту настройку, добавив скрипты, оповещения или информационные панели.
Ресурс:
Редактор: AndreyEx
Важно: Данная статья носит информационный характер. Автор не несёт ответственности за возможные сбои или ошибки, возникшие при использовании описанного программного обеспечения.