
rustnet v1.5.0
Мониторинг сети по каждому процессу для вашего терминала с глубоким анализом пакетов. Кроссплатформенный, изолированный.
RustNet
Мониторинг сети в разрезе процессов для вашего терминала: живые соединения TCP, UDP и QUIC с глубоким анализом пакетов, по умолчанию в песочнице.
Просмотр в реальном времени каждого соединения вашей машины: кому оно принадлежит и какой протокол используется. Без tcpdump, проброса X11 и root-каналов.
Возможности
- Привязка к процессу: каждое соединение TCP, UDP и QUIC сопоставляется с владеющим им процессом: через eBPF на Linux, PKTAP на macOS, ETW с автоматическим резервным вариантом IP Helper на Windows и нативные API на FreeBSD. Сведения включают PID, исполняемый файл, имена пользователя/группы, уверенность сопоставления и ограниченную цепочку родительских процессов на всех платформах. Wireshark и tcpdump на это не способны;
netstat/ssне показывают состояние в реальном времени. - Глубокий анализ пакетов: распознавание HTTP, HTTPS/TLS с SNI, DNS, SSH, FTP, QUIC, MQTT, BitTorrent, STUN, NTP, mDNS, LLMNR, DHCP, SNMP, SSDP и NetBIOS без внешних диссекторов.
- Аннотированный экспорт PCAPNG:
--pcapng-exportзаписывает захват, готовый к открытию в Wireshark: процесс, PID, направление, DPI/SNI и GeoIP встраиваются в виде комментариев к каждому пакету. Откройте его в Wireshark — каждый пакет уже будет содержать имя своего процесса, без постобработки. Также доступен классический--pcap-exportс боковым JSONL-файлом для офлайн-корреляции. - Изоляция в песочнице: Landlock (Linux 5.13+), Seatbelt (macOS), сброс привилегий через токен и блокировка дочерних процессов через job object (Windows). Привилегии сбрасываются сразу после инициализации libpcap. См. SECURITY.md.
- Сетевые метрики: время кругового обхода (RTT) в реальном времени для TCP, квитирования QUIC, DNS-ответов и ICMP echo, а также детектирование повторных передач TCP, пакетов вне порядка и быстрых повторных передач.
- Умный жизненный цикл соединений: тайм-ауты с учётом протокола и индикаторы устаревания «белый → жёлтый → красный». Клавиша
tоставляет исторические (закрытые) соединения видимыми для анализа инцидентов. - Фильтрация в стиле Vim/fzf:
port:,src:,dst:,sni:,process:,state:,proto:, а также регулярные выражения через/(?i)pattern/. - Обогащение GeoIP: определение страны по локальной базе MaxMind GeoLite2. Без сетевых запросов.
- Определение устройств в локальной сети: MAC-адрес и производитель (из встроенной базы IEEE OUI) для узлов в пределах канала и шлюза; определяется пассивно по ARP-трафику и отображается на панели сведений.
- Привязка Kubernetes (опциональная возможность
kubernetes): соединения сопоставляются с их подом, пространством имён и контейнером и отображаются на панели сведений, в экспорте JSON/PCAPNG и в фильтрахpod:,ns:,container:. Возможность включена в официальном Docker-образе; в кластере используйте плагин kubectl-rustnet, чтобы запустить инструмент как эфемерный отладочный под. См. USAGE.md. - Кроссплатформенность: Linux, macOS, Windows, FreeBSD.
Зачем RustNet?
RustNet закрывает разрыв между простыми инструментами просмотра соединений (netstat, ss) и анализаторами пакетов (Wireshark, tcpdump):
- Привязка к процессу: видно, какое приложение владеет каждым соединением. Wireshark не может этого дать, потому что видит только пакеты, а не сокеты.
- Ориентация на соединения: отслеживание состояний, пропускной способности и протоколов по каждому соединению в реальном времени
- Дружелюбность к SSH: TUI работает через SSH, поэтому можно быстро увидеть, что происходит на удалённом сервере, без проброса X11 и захвата трафика
RustNet дополняет инструменты захвата пакетов. Используйте RustNet, чтобы видеть, что устанавливает соединения. Для прямой проверки в Wireshark --pcapng-export записывает живые комментарии к пакетам (best-effort) с контекстом PID/процесса. Для корреляции после завершения используйте --pcap-export вместе с боковым JSONL-файлом и опциональным скриптом scripts/pcap_enrich.py. Подробнее см. Экспорт PCAP и Сравнение с похожими инструментами.
Создан на основе ratatui, libpcap, eBPF (libbpf-rs), DashMap, crossbeam, ring, MaxMind GeoLite2 и Landlock. Полный разбор зависимостей см. в ARCHITECTURE.md.
Расширенная идентификация процессов через eBPF (по умолчанию в Linux)
По умолчанию в Linux RustNet использует программы eBPF в ядре для более производительной идентификации процессов с меньшими накладными расходами.
Имена процессов:
- eBPF записывает TGID лидера группы процессов и имя
comm(поле ядра ограничено 16 символами), а не имя действующего потока, поэтому многопоточные приложения показывают имя основного процесса вместо имён потоков вроде «Socket Thread» - Затем RustNet заново определяет текущее имя через
/proc/<tgid>/comm, восстанавливает усечённые вcommимена по имени исполняемого файла (например, «chromium-browse» становится «chromium-browser») и определяет полный путь к исполняемому файлу, отображаемый в представлении Details - Недолговечные процессы, завершившиеся до запуска такого обогащения, сохраняют записанное eBPF 16-символьное имя
Резервное поведение:
- Если eBPF не удаётся загрузить или не хватает прав, RustNet автоматически переключается на стандартную идентификацию процессов на основе procfs
- Стандартный режим так же определяет имена через сканирование procfs, но с более высокой нагрузкой на CPU
- eBPF включён по умолчанию; специальные флаги сборки не нужны
Чтобы отключить eBPF и использовать режим только с procfs, соберите с:
cargo build --release --no-default-features
Техническую информацию см. в ARCHITECTURE.md.
Активность процессов и мониторинг интерфейсов
RustNet сочетает учёт трафика на уровне процессов со статистикой сетевых интерфейсов в реальном времени:
- Вкладка Overview: показывает активные интерфейсы с текущими скоростями, ошибками и потерями
- Вкладка Activity (клавиша
3): ранжирует процессы по исходящему (TX) или входящему (RX) трафику, включая накопленный и скользящий трафик, скорости, доли, соединения и адреса назначения - Сценарий безопасности: отсортируйте по исходящему трафику (Egress), выявите неожиданного отправителя, затем изучите его основной удалённый узел и накопленный трафик, даже если соединение уже закрыто
- Сведения об интерфейсе (клавиша
iна вкладке Activity): показывает исходные подробные метрики для каждого интерфейса - Кроссплатформенность: Linux (sysfs), macOS/FreeBSD (getifaddrs), Windows (GetIfTable2 API)
- Умная фильтрация: Windows автоматически исключает виртуальные и фильтрующие адаптеры
Документацию по интерпретации статистики интерфейсов и поведению на конкретных платформах см. в USAGE.md.
Доступные метрики:
- Всего байт и пакетов (RX/TX)
- Счётчики ошибок (приём и передача)
- Потери пакетов (переполнение очередей)
- Коллизии (устаревший показатель, редко используется в современных сетях)
Статистика собирается каждые 2 секунды в фоновом потоке с минимальным влиянием на производительность.
Скриншоты
| Обзор Таблица соединений с данными в реальном времени и спарклайнами ![]() | Сведения SNI, шифр, GeoIP, DPI по каждому соединению ![]() |
| График Диаграмма трафика, распределение приложений, топ процессов ![]() | Активность Исходящий/входящий трафик процессов, охват за 60 секунд, привязка и удалённые узлы ![]() |
Быстрый старт
Установка
Homebrew (macOS / Linux):
brew install rustnet
Ubuntu (22.04 LTS+) / Linux Mint 21+ / Pop!_OS 22.04+:
sudo add-apt-repository ppa:domcyrus/rustnet
# on Pop!_OS: sudo apt-manage add ppa:domcyrus/rustnet
sudo apt update && sudo apt install rustnet
Fedora (42+):
sudo dnf copr enable domcyrus/rustnet
sudo dnf install rustnet
openSUSE Tumbleweed:
sudo zypper addrepo https://download.opensuse.org/repositories/home:/domcyrus:/rustnet/openSUSE_Tumbleweed/home:domcyrus:rustnet.repo
sudo zypper refresh
sudo zypper install rustnet
Arch Linux:
sudo pacman -S rustnet
Nix / NixOS:
nix-shell -p rustnet
# Then inside the shell: sudo rustnet
From crates.io:
cargo install rustnet-monitor
Windows (Chocolatey):
# Run in Administrator PowerShell
# Requires Npcap (https://npcap.com) installed with "WinPcap API-compatible Mode" enabled
choco install rustnet
Другие платформы:
- FreeBSD: скачайте из релизов rustnet-bsd
- Docker, сборка из исходников, другие дистрибутивы Linux: подробные инструкции см. в INSTALL.md
Запуск RustNet
Захват пакетов требует повышенных привилегий:
# Quick start (all platforms)
sudo rustnet
# Linux: Grant capabilities to run without sudo (recommended)
sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' $(which rustnet)
rustnet
Часто используемые параметры:
rustnet -i eth0 # Specify network interface
rustnet --show-localhost # Show localhost connections
rustnet --no-resolve-dns # Disable reverse DNS lookups (enabled by default)
rustnet -r 500 # Set refresh interval (ms)
rustnet --theme tokyo-night # Theme: muted (default), vivid, catppuccin-mocha, tokyo-night, gruvbox, nord
rustnet --pcapng-export capture.pcapng # Annotated PCAPNG for Wireshark
Тему и переопределения отдельных цветов также можно задать в ~/.config/rustnet/config.toml; приоритет имеет --theme. Схему см. в USAGE.md.
Подробную настройку прав см. в INSTALL.md, полный список параметров — в USAGE.md.
Если вы задали capabilities, но TUI по-прежнему показывает
eBPF unavailable, см. eBPF недоступен, несмотря на заданные capabilities в разделе устранения неполадок.
Управление с клавиатуры
| Клавиша | Действие |
|---|---|
q | Выход (нажмите дважды для подтверждения) |
Ctrl+C | Немедленный выход |
x | Очистить все соединения (нажмите дважды для подтверждения) |
Tab или ] | Следующая вкладка |
Shift+Tab или [ | Предыдущая вкладка |
1–5 | Переход к Overview / Details / Activity / Graph / Help |
↑/k ↓/j | Навигация вверх/вниз |
g G | Перейти к первому/последнему соединению |
Enter | Просмотр сведений о соединении |
Esc | Назад или сброс фильтра |
c | Копировать удалённый адрес |
p | Переключить имена служб/порты |
d | Переключить hostnames/IP в Overview или Egress/Ingress в Activity |
s S | Перебор столбцов сортировки / переключение направления |
a | Переключить группировку процессов |
Space | Развернуть/свернуть группу процессов |
←/→ или h/l | Свернуть/развернуть группу |
PageUp/PageDown или Ctrl+B/F | Навигация по страницам |
t | Переключить исторические (закрытые) соединения |
i | Переключить сведения о системе в Overview или сведения об интерфейсе в Activity |
r | Сбросить представление (группировку, сортировку, фильтр) |
/ | Войти в режим фильтра |
h | Переключить справку |
Подробное описание клавиш и советы по навигации см. в USAGE.md.
Фильтрация и сортировка
Быстрые примеры фильтрации:
/google # Search for "google" anywhere
/port:443 # Filter by port
/process:firefox # Filter by process
/state:established # Filter by connection state
/dport:443 sni:github.com # Combine filters
Сортировка:
- Нажимайте
s, чтобы перебирать сортируемые столбцы (Process, Addresses, Service, Application, State, Bandwidth) - Нажимайте
S(Shift+s), чтобы изменить направление сортировки - Поиск пожирателей трафика: нажимайте
s, пока не появится «Bandwidth Total ↓» (сортировка по суммарной скорости приёма и передачи)
Полный синтаксис фильтрации и руководство по сортировке см. в USAGE.md.
Продвинутые примеры фильтрации
Фильтры по ключевым словам:
port:44- порты, содержащие «44» (443, 8080, 4433)sport:80- исходные порты, содержащие «80»dport:443- порты назначения, содержащие «443»src:192.168- исходные IP, содержащие «192.168»dst:github.com- адреса назначения, содержащие «github.com»process:ssh- имена процессов, содержащие «ssh»sni:api- SNI-имена хостов, содержащие «api»app:openssh- SSH-соединения, использующие OpenSSHstate:established- фильтр по состоянию протоколаproto:tcp- фильтр по типу протокола
Фильтрация по состоянию:
state:syn_recv- полуоткрытые соединения (обнаружение SYN-флуда)state:established- только установленные соединенияstate:quic_connected- активные QUIC-соединенияstate:dns_query- соединения DNS-запросов
Комбинированные примеры:
sport:80 process:nginx- соединения Nginx с порта 80dport:443 sni:google.com- HTTPS к Googleprocess:firefox state:quic_connected- QUIC-соединения Firefoxdport:22 app:openssh state:established- установленные соединения OpenSSH
Жизненный цикл соединений и визуальные индикаторы
RustNet использует «умные» тайм-ауты и визуальные предупреждения перед удалением соединений:
Визуальные индикаторы устаревания:
- Белый: активно (< 75% тайм-аута)
- Жёлтый: устарело (75-90% тайм-аута)
- Красный: критично (> 90% тайм-аута)
Тайм-ауты с учётом протокола:
- HTTP/HTTPS: 10 минут (поддерживает keep-alive)
- SSH: 30 минут (длительные сеансы)
- Обычный установленный TCP: 5 минут
- Подключённый QUIC: 3 минуты (или тайм-аут простоя из transport-param пира, если он присутствует);
Initial/Handshaking: 60 секунд - DNS: 30 секунд
- TCP CLOSED: 15-секундная архивная отсрочка
Пример: HTTP-соединение становится жёлтым через 7.5 мин, красным через 9 мин и удаляется через 10 мин.
Полные сведения о тайм-аутах см. в USAGE.md.
Документация
- INSTALL.md - подробные инструкции по установке для всех платформ, настройка прав и устранение неполадок
- USAGE.md - полное руководство по использованию, включая параметры командной строки, фильтрацию, сортировку и журналирование
- SECURITY.md - функции безопасности, включая песочницу Landlock и управление привилегиями
- ARCHITECTURE.md - техническая архитектура, реализации для платформ и детали производительности
- CONTRIBUTING.md - порядок внесения вклада, требования к качеству и правила проекта
- PROFILING.md - руководство по профилированию производительности с настройкой flamegraph и советами по оптимизации
- ROADMAP.md - запланированные функции и будущие улучшения
- RELEASE.md - процесс выпуска релизов для мейнтейнеров
Вклад в проект
Вклад приветствуется! Пожалуйста, ознакомьтесь с CONTRIBUTING.md — там описано, как внести свой вклад.
Список людей, внёсших вклад в проект, см. в CONTRIBUTORS.md.
Лицензия
Проект распространяется по лицензии Apache License, Version 2.0 — подробности см. в файле LICENSE.
Благодарности
- Терминальный интерфейс создан с помощью ratatui
- Захват пакетов на базе libpcap
- Вдохновлён такими инструментами, как
tshark/wireshark/tcpdump,sniffnet,netstat,ss,iftopи bandwhich - Часть кода написана «вайб-кодингом» (OMG) / да пребудут с вами LLM-боги
Перенос документации
Некоторые разделы перенесены в отдельные файлы для лучшей организации:
- Настройка прав: теперь в INSTALL.md - Настройка прав
- Инструкции по установке: теперь в INSTALL.md
- Подробное использование: теперь в USAGE.md
- Детали архитектуры: теперь в ARCHITECTURE.md



