Network Monitor

Инструмент мониторинга сетевых соединений в реальном времени, созданный на Rust и GTK4, отображающий активные соединения с живой статистикой ввода-вывода в современном графическом интерфейсе.

Возможности
- Мониторинг в реальном времени: Непрерывно отслеживает активные сетевые соединения
- Статистика ввода-вывода: Показывает живые скорости загрузки/отдачи для каждого соединения
- Идентификация процессов: Отображает программу и PID, связанные с каждым соединением
- Действия с процессами: Правый клик по строке для копирования её значения/команды или завершения процесса,
владеющего соединением (Terminate или Force Kill, с подтверждением)
- Сохранение выделения: Выделенная строка сохраняет подсветку между обновлениями и отображается в
строке состояния
- Современный интерфейс GTK4: Чистый, отзывчивый графический интерфейс в стиле Libadwaita
- Терминальный интерфейс (TUI): Интерактивный терминальный интерфейс с теми же возможностями мониторинга
- Разрешение адресов: Упрощает распространённые адреса (localhost, any, mDNS)
- Фильтрация соединений: Отфильтровывает соединения localhost для более чистого вывода
- Интеграция с GNOME: Правильная поддержка WM class для закрепления в доке и интеграции с рабочим столом
- Двойная установка: Поддерживает как локальную для пользователя, так и общесистемную установку
- Надёжная обработка ошибок: Комплексное восстановление после ошибок с понятными инструкциями по настройке
- Оптимизация производительности: Кэширование процессов и компоновки для улучшенной отзывчивости
Требования
- Rust 1.70+ (редакция 2021)
- Библиотеки разработки GTK4
- Библиотеки разработки Libadwaita
- Система Linux с файловой системой
/proc
- Linux 5.8+ (для гранулярных возможностей eBPF)
- Nightly Rust и
bpf-linker (для компиляции eBPF)
Установка на Ubuntu/Debian:
sudo apt update
sudo apt install libgtk-4-dev libadwaita-1-dev
Установка на Fedora:
sudo dnf install gtk4-devel libadwaita-devel
Установка
Способ 1: Установка из исходников с интеграцией в рабочий стол
- Клонируйте репозиторий:
git clone <repository-url>
cd network-monitor
- Установите локально (без sudo):
./scripts/install.sh
- Или установите общесистемно (требуется sudo):
sudo ./scripts/install.sh
Скрипт установки выполнит:
- Сборку бинарников GTK4 и TUI (debug для локальной, release для общесистемной установки)
- Установку бинарников в
~/.local/bin/ (локально) или /usr/local/bin/ (общесистемно)
- Установку desktop-файла с правильным WM class для закрепления в доке GNOME
- Установку иконок в соответствующие каталоги иконок
- Обновление кэша иконок и базы данных рабочего стола
- Обеспечение возможности закрепления приложения в доке/панели GNOME
Способ 2: Сборка и запуск напрямую
- Клонируйте репозиторий:
git clone <repository-url>
cd network-monitor
- Соберите и запустите:
cargo run
Или соберите в режиме release:
cargo build --release
./target/release/network-monitor
Способ 3: Сборка и запуск версии TUI
- Клонируйте репозиторий:
git clone <repository-url>
cd network-monitor
- Соберите и запустите TUI:
cargo build --bin nmt
./target/debug/nmt
Или соберите в режиме release:
cargo build --release --bin nmt
./target/release/nmt
Удаление
Удаление установленной версии
Удаление локальной установки:
./scripts/uninstall.sh
Общесистемное удаление (требуется sudo):
sudo ./scripts/uninstall.sh
Скрипт удаления удалит бинарник, desktop-файл и иконки из соответствующих мест и обновит все необходимые кэши.
Использование
Графический интерфейс GTK4
Запустите приложение мониторинга сети:
cargo run
Приложение откроет окно GTK4, отображающее:
- Process(ID): Имя процесса и PID с точным сопоставлением сокета процессу
- Protocol: Протокол TCP/UDP
- Source: Локальная конечная точка (в читаемом формате)
- Destination: Удалённая конечная точка (в читаемом формате)
- Status: Состояние соединения (ESTABLISHED, LISTEN и т.д.)
- TX: Скорость отдачи, рассчитанная по статистике ввода-вывода процесса
- RX: Скорость загрузки, рассчитанная по статистике ввода-вывода процесса
- Path: Полный путь команды и аргументы из
/proc/[pid]/cmdline
Действия со строками
- Левый клик: выбрать строку (также отображается в нижней строке состояния)
- Правый клик: открыть контекстное меню с Copy Value, Copy Command и
Kill "process" (PID), которое спрашивает, выполнить Terminate (SIGTERM) или Force Kill (SIGKILL)
- Delete: завершить текущую выделенную строку (тот же диалог подтверждения)
- Ctrl+C: скопировать содержимое ячейки
- Кнопка Refresh в заголовке окна: обновить немедленно (список также обновляется каждые 3 с)
Терминальный интерфейс (TUI)

Запустите терминальный интерфейс:
cargo run --bin nmt
TUI предоставляет те же возможности мониторинга в интерактивном терминальном интерфейсе:
Управление с клавиатуры:
q - Выйти из приложения
r - Переключить разрешение имён хостов
R - Обновить соединения вручную
a - Переключить автообновление (интервал 2 секунды)
↑/↓ - Навигация по соединениям
←/→ - Горизонтальная прокрутка таблицы
k / правый клик - Открыть меню завершения для строки (Terminate / Force Kill / Cancel)
1-8 - Сортировка по столбцам (Process(ID), Protocol, Source, Destination, Status, TX, RX, Path)
Мышь: левый клик выбирает строку, правый клик выбирает её и открывает меню завершения.
Возможности:
- Мониторинг соединений в реальном времени с автообновлением
- Сортируемые столбцы с визуальными индикаторами
- Горизонтальная прокрутка для широких таблиц
- Умный подбор ширины столбцов - последний столбец занимает всю оставшуюся ширину
- Цветовая кодировка протоколов (TCP/TCP6 зелёным, UDP/UDP6 жёлтым)
- Подсветка активного соединения
- Информация о процессе и PID
- Отображение скорости ввода-вывода в реальном времени
- Тот же порядок столбцов, что и в версии GTK4, для единообразия
Разрешение адресов
Распространённые адреса упрощаются для читаемости:
0.0.0.0:* или *:* → ANY
127.0.0.1:* или [::1]:* → LOCALHOST
224.0.0.251:* → MDNS
Как это работает
Бэкенд eBPF (событийно-ориентированный)
Приложение использует kprobes уровня ядра (tcp_v4_connect, tcp_v6_connect, tcp_close,
inet_csk_accept) вместо опроса /proc/net. Это обеспечивает:
- Событийно-ориентированность: Доставка событий менее чем за миллисекунду, без накладных расходов на опрос (~1-3% CPU)
- Прямой PID: Захватывается в точке пробы через
bpf_get_current_pid_tgid(), без сканирования inode
- Короткоживущие соединения: Никогда не пропускаются между интервалами опроса
Режим eBPF
Бэкенд eBPF обеспечивает событийно-ориентированный мониторинг соединений с меньшими накладными
расходами и событиями в реальном времени по сравнению с подходом опроса /proc/net по умолчанию. Он может
захватывать короткоживущие соединения, которые опрос может пропустить.
Предварительные требования:
rustup toolchain install nightly
cargo install bpf-linker
Сборка и запуск:
cargo build