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

Инструмент мониторинга сетевых подключений в реальном времени, написанный на Rust и GTK4, отображающий активные подключения с живой статистикой ввода/вывода в современном графическом интерфейсе.
Возможности
- Мониторинг в реальном времени: непрерывно отслеживает активные сетевые подключения
- Статистика ввода/вывода: показывает текущие скорости загрузки и выгрузки для каждого подключения
- Идентификация процессов: отображает программу и PID, связанные с каждым подключением
- Современный интерфейс GTK4: чистый, отзывчивый графический интерфейс в стиле Libadwaita
- Терминальный интерфейс (TUI): интерактивный терминальный интерфейс с теми же возможностями мониторинга
- Разрешение адресов: упрощает распространённые адреса (localhost, any, mDNS)
- Фильтрация подключений: отфильтровывает подключения localhost для более чистой выдачи
- Интеграция с GNOME: корректная поддержка класса WM для закрепления в доке и интеграции с рабочим столом
- Двойная установка: поддерживает установку как для текущего пользователя, так и для всей системы
- Надёжная обработка ошибок: всестороннее восстановление после ошибок с понятными инструкциями по настройке
- Оптимизация производительности: кэширование процессов и макета для повышения отзывчивости
Требования
- 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 для закрепления в доке GNOME
- Устанавливает иконки в соответствующие каталоги иконок
- Обновляет кэш иконок и базу данных desktop
- Обеспечивает возможность закрепления приложения в доке/панели 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, отображающее:
- Процесс(ID): имя процесса и PID с точным сопоставлением сокет-процесс
- Протокол: протокол TCP/UDP
- Источник: локальная конечная точка (преобразованная в читаемый формат)
- Назначение: удалённая конечная точка (преобразованная в читаемый формат)
- Статус: состояние подключения (ESTABLISHED, LISTEN и т. д.)
- TX: скорость выгрузки, рассчитанная на основе статистики ввода/вывода процесса
- RX: скорость загрузки, рассчитанная на основе статистики ввода/вывода процесса
- Путь: полный путь к команде и аргументы из
/proc/[pid]/cmdline
Терминальный интерфейс (TUI)

Запустите терминальный интерфейс:
cargo run --bin nmt
TUI предоставляет те же возможности мониторинга в интерактивном терминальном интерфейсе:
Основные управляющие клавиши:
q— выйти из приложенияr— вручную обновить подключенияa— переключить автообновление (интервал 2 секунды)↑/↓— перемещаться по подключениям←/→— прокручивать таблицу по горизонтали1-8— сортировать по столбцам (Процесс(ID), Протокол, Источник, Назначение, Статус, TX, RX, Путь)
Возможности:
- Мониторинг подключений в реальном времени с автообновлением
- Сортируемые столбцы с визуальными индикаторами
- Горизонтальная прокрутка для широких таблиц
- Умная ширина столбцов — последний столбец занимает всю оставшуюся ширину
- Цветовое кодирование протоколов (TCP/TCP6 зелёным, UDP/UDP6 жёлтым)
- Подсветка активных подключений
- Информация о процессе и PID
- Отображение текущих скоростей ввода/вывода
- Тот же порядок столбцов, что и в GTK4-версии, для согласованности
Разрешение адресов
Распространённые адреса упрощаются для удобства чтения:
0.0.0.0:*или*:*→ANY127.0.0.1:*или[::1]:*→LOCALHOST224.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
Запуск от обычного пользователя (требуется ядро 5.8+):
Выдайте бинарному файлу необходимые capabilities Linux один раз:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/network-monitor
./target/debug/network-monitor
Или для TUI-версии:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/nmt
./target/debug/nmt
Для release-сборок скорректируйте путь соответствующим образом:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/release/network-monitor
Приложение завершится с сообщением о настройке, если eBPF недоступен (отсутствуют необходимые capabilities или ядро не поддерживается).
Архитектура
- GTK4: современный кроссплатформенный GUI-фреймворк
- Libadwaita: компоненты интерфейса в стиле GNOME
- Tokio: асинхронная среда выполнения для параллельных операций
- Aya + eBPF: трассировка подключений на уровне ядра с помощью kprobes для событий в реальном времени
- Прямой PID: идентификация процесса через
bpf_get_current_pid_tgid()в точке срабатывания - Системные вызовы: прямое чтение
/proc/[pid]/ioдля статистики ввода/вывода - Обработка ошибок: всеобъемлющие типы ошибок с корректным восстановлением с помощью
thiserror - Кэширование производительности: кэширование макета интерфейса для оптимальной производительности
Пакеты Linux
Пожертвования
Если вы считаете этот проект полезным, пожалуйста, рассмотрите возможность пожертвования для поддержки его разработки.
- Monero:
88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv - Bitcoin:
bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025
Лицензия
Этот проект является открытым исходным кодом. Подробности см. в файле LICENSE.