
netwatch v0.27.0
Диагностика сети в реальном времени в вашем терминале. Одна команда, нулевая настройка, мгновенная видимость.
NetWatch
Узнайте, что на самом деле делает ваша сеть — в реальном времени, прямо в терминале.
Сетевой монитор, который читает зашифрованный трафик, определяет процесс, стоящий за каждым соединением, и ловит вредоносное ПО, связывающееся со своим центром управления. Один бинарник. Ноль настроек.
Всё сразу, с нулём строк интерфейса — ни верхней панели, ни меню, ни строки состояния. Загрузка растёт вверх от общей оси времени, отдача — вниз от неё, так что симметрию трафика вы узнаёте по форме, ещё не прочитав ни одной цифры. Цвет кодирует величину, а не серию.
…и стандартный вид с десятью вкладками под ним, в одной клавише V от вас и с теми же тёплыми коллекторами — панель мониторинга, программа за каждым сокетом, глубокий анализ пакетов, карта сети и то, с чем общается каждая программа.
Большинство сетевых инструментов отвечают на один вопрос — «что использует мою пропускную способность?» — и останавливаются. NetWatch идёт дальше. Он декодирует протоколы в трафике, сообщает вам, какая программа открыла каждое соединение, и отслеживает паттерны, означающие проблемы — сканирование портов, beaconing вредоносного ПО на командный сервер, утечку данных через DNS. Когда что-то выглядит подозрительно, одно нажатие клавиши замораживает переносимый пакет улик, который можно приложить к отчёту об ошибке.
Воспринимайте его как один бинарник без конфигурации, который выполняет работу измерителя пропускной способности, триажного представления Wireshark и лёгкого детектора вторжений — не покидая терминал.
Он масштабируется под ваш вопрос — в обе стороны: --view dense заполняет большой терминал четырьмя окнами без лишнего интерфейса, а netwatch --lite — это один экран 80×24 для вопроса «что сейчас использует мою сеть?»; полный вид с десятью вкладками доступен, когда ответ — «то, что нужно расследовать» — в одном нажатии клавиши, с тем же живым захватом.
Создан для специалистов синих команд, реагирующих на инциденты, SRE и владельцев домашних серверов, которым нужно видеть, что происходит прямо сейчас — а не разбирать файл захвата часом позже.
650+ тестов · песочница Landlock (Linux) · безопасно разбирает враждебный трафик
И то, чего не делает ни один другой терминальный инструмент: NetWatch изучает, с чем общается каждая программа на машине, превращает это наблюдаемое поведение в политику одним нажатием клавиши и сообщает вам в тот момент, когда программа начинает общаться с чем-то новым.
Наблюдение → продвижение → предупреждение. Базовое поведение становится политикой одним нажатием клавиши; следующий новый адрес назначения появляется как отклонение.
Зачем нужен NetWatch
- 🔓 Читайте зашифрованный трафик, которым управляете — укажите браузеру или приложению
SSLKEYLOGFILEна NetWatch и наблюдайте, как открытый текст его сессий TLS 1.3 декодируется в реальном времени, так же, как это делает Wireshark. Без прокси, без сертификатов, ничего посередине. - 🛰️ Узнайте, с чем общается каждая программа, и получайте уведомления при изменениях — NetWatch отслеживает, каких адресов назначения достигает каждый процесс (имя хоста из ClientHello, автономная система, порт), и одно нажатие клавиши превращает это наблюдаемое поведение в политику исходящего трафика. С этого момента он предупреждает, когда программа начинает общаться с чем-то новым. Это то, что не может выразить ни одно правило файрвола:
curlраньше обращался только кapi.github.com, а сегодня обратился к чему-то ещё. Только наблюдение — он никогда не блокирует. - 🧬 Определяйте программное обеспечение за соединением по отпечатку — JA4 превращает каждое рукопожатие TLS/QUIC в стабильный отпечаток, позволяя распознать конкретного клиента — или конкретное вредоносное ПО — даже несмотря на зашифрованный трафик, так же, как вы узнаёте браузер по его user-agent. Переходите по отпечатку, чтобы найти все остальные потоки от того же программного обеспечения.
- 🚨 Ловите вредоносное ПО, связывающееся со своим центром управления — встроенное обнаружение C2 beaconing (регулярные проверки с низким джиттером), сканирования портов и DNS-туннелирования работает в фоне без какой-либо настройки. Критическое предупреждение автоматически замораживает запись, так что улики уже сохранены, когда вы посмотрите.
- ⚙️ Определяйте процесс за каждым соединением — сопоставляет каждый сокет с программой, которая его открыла, через
ss/lsof, с опциональным kprobe на уровне ядра через eBPF (Linux, функцияebpf), который также ловит короткоживущие потоки, которые опрос может пропустить. Работает везде; kprobe — это улучшение, а не требование. - 📡 Декодируйте протоколы, а не только порты — настоящий разбор L7 для TLS, QUIC, HTTP и DNS (плюс определение баннера/версии SSH) и ещё десятка протоколов, с отслеживанием потоков и таймингами рукопожатий — так вы видите
api.github.comи отпечаток JA4, а не просто «порт 443». - 🎥 Замораживайте улики — включите циклическую запись и заморозьте любой инцидент в переносимый пакет: пакеты плюс соединения, DNS, состояние здоровья и предупреждения, которые их объясняют. Создан для отчётов об ошибках и разборов инцидентов.
- 🛡️ Безопасен по дизайну — после настройки NetWatch сбрасывает свои привилегии и запирает себя в список разрешённых файловых путей Landlock (Linux). Инструмент, разбирающий враждебный трафик, не может прочитать ваши ключи SSH, профили браузера или
/etc/shadow. - 🪟 Масштабируется до одного экрана —
--liteотвечает на вопрос «что использует мою сеть, и в порядке ли моё соединение?» на одном экране 80×24 с шестью клавишами, так что он помещается в SSH-сессию к Pi или в tmux-сплит. Одно нажатие клавиши переводит в полный вид для криминалистики с уже тёплыми коллекторами.
Никаких конфигурационных файлов. Никакой настройки. Никаких обязательных флагов.
Установка```bash
brew install netwatch # macOS / Linux nix-shell -p netwatch # NixOS / Nix paru -S netwatch-tui-bin # Arch (prebuilt; netwatch-tui builds from source) scoop install netwatch # Windows cargo install netwatch-tui # anywhere with Rust
Или возьмите готовый бинарник из [Releases](https://github.com/matthart1983/netwatch/releases/latest).
**Для Windows требуется установленный [Npcap](https://npcap.com/#download)** — настроек установщика по умолчанию достаточно, и без него NetWatch завершает работу при запуске с соответствующим сообщением. **Сборка из исходников** (`cargo install`, `paru -S netwatch-tui`) требует заголовочные файлы разработки libpcap: `libpcap-dev` на Debian/Ubuntu и Alpine, `libpcap-devel` на Fedora/RHEL, `libpcap` на Arch. При их отсутствии на этапе линковки появляется ошибка `cannot find -lpcap`. В macOS libpcap встроена; статические бинарники `-static` для Linux ниже включают её и не требуют ничего устанавливать.
Пакеты Nix, Arch и Scoop поддерживаются сообществом — спасибо им. Проблемы с упаковкой сообщайте им; баги NetWatch — сюда. Если пакет отстаёт от релиза, это видно на [странице Repology](https://repology.org/project/netwatch-tui/versions).
<details>
<summary><strong>Все платформы и сборка из исходников</strong></summary>
| Платформа | Скачать |
|----------|----------|
| Linux (x86_64, Debian/Ubuntu) | [`netwatch-linux-x86_64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| Linux (aarch64, Debian/Ubuntu) | [`netwatch-linux-aarch64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| Linux (x86_64, статический — Arch/Fedora/Alpine/любой дистрибутив) | [`netwatch-linux-x86_64-static.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| Linux (aarch64, статический — Arch/Fedora/Alpine/любой дистрибутив) | [`netwatch-linux-aarch64-static.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| macOS (Intel) | [`netwatch-macos-x86_64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| macOS (Apple Silicon) | [`netwatch-macos-aarch64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| Windows (x86_64) | [`netwatch-windows-x86_64.exe.zip`](https://github.com/matthart1983/netwatch/releases/latest) |
Статические сборки `-static` для Linux включают libpcap и не имеют зависимостей времени выполнения — используйте их на Arch, Fedora, Alpine или любом дистрибутиве, где сборки по умолчанию сообщают `libpcap.so.0.8: cannot open shared object file`.
Сборка для Windows требует [Npcap](https://npcap.com/#download) — установите его перед первым запуском. Настроек установщика по умолчанию достаточно: NetWatch ищет в `System32\Npcap`, куда Npcap на самом деле помещает `wpcap.dll`, поэтому *Install Npcap in WinPcap API-compatible Mode* не требуется. Если Npcap вообще нет, вы получите сообщение NetWatch с указанием, чего не хватает, а не окно ошибки Windows. (В версии v0.29.1 и ранее этот флажок был нужен — см. [#47](https://github.com/matthart1983/netwatch/issues/47).)
**Из исходников:**```bash
git clone https://github.com/matthart1983/netwatch.git && cd netwatch
cargo build --release
Предварительные требования: Rust 1.70+ и заголовочные файлы для разработки libpcap. То же самое относится и к cargo install netwatch-tui.
| Платформа | Установка |
|---|---|
| Debian / Ubuntu | sudo apt install libpcap-dev |
| Fedora / RHEL | sudo dnf install libpcap-devel |
| Arch | sudo pacman -S libpcap |
| Alpine | sudo apk add libpcap-dev |
| macOS | включено в систему |
| Windows | Npcap — сборка автоматически загружает Npcap SDK, или укажите NPCAP_SDK на распакованную копию |
Без них сборка завершится ошибкой на этапе компоновки с сообщением /usr/bin/ld: cannot find -lpcap. Если вы хотите только запускать NetWatch, а не собирать его, статическим бинарным файлам -static для Linux, указанным выше, ничего из этого не требуется.
Быстрый старт```bash
netwatch # interface stats, connections, config — no privileges needed sudo netwatch # full mode — adds live packet capture + health probes
Вот и всё. Переключайтесь между вкладками с помощью `1`–`9`, нажмите `?` для справки, `q` для выхода. Панель мониторинга полезна уже через пять секунд; всё остальное ниже — на тот случай, когда нужно копнуть глубже.
> **Linux без `sudo`:** выдайте права на захват один раз и запускайте от обычного пользователя —
> `sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' "$(which netwatch)"`. Повторяйте после каждого обновления ([подробности](https://github.com/matthart1983/netwatch/blob/main/docs/REFERENCE.md#running-without-sudo-linux)).
### Посмотрите, как он расшифровывает TLS за 60 секунд
Самый быстрый способ понять, что такое NetWatch, — увидеть, как он читает открытый текст TLS-сеанса 1.3, которым *вы* управляете:```bash
sudo netwatch # 1. launch, then open the Packets tab (4)
SSLKEYLOGFILE=/tmp/sslkeylog.txt curl https://example.com # 2. any client that exports its keys
# 3. filter the Packets tab with: decrypted:true
Расшифрованные данные приложения отображаются прямо в потоке. Промах при перехвате клавиш никогда не прерывает захват — такая запись просто остаётся непрозрачной. (SSLKEYLOGFILE — тот же механизм, что использует Wireshark; он работает только с трафиком, которым вы управляете, и никогда — со сторонним трафиком или трафиком вредоносного ПО.)
Чтение открытого текста из активной сессии TLS 1.3 — расшифровка прямо в терминале. Без прокси, без man-in-the-middle.
Посмотрите, как он ловит утечку исходящего трафика за 60 секунд
Цикл из демо выше, в трёх командах:```bash sudo netwatch # 1. launch and open the Egress tab (0). Leave it a minute # while it learns; each process grows a list of destinations # with hostnames, autonomous systems and ports # 2. put the cursor on a process and press Enter — its observed # baseline becomes a rule in egress-policy.toml curl https://example.org # 3. same program, somewhere it has never been
Новый пункт назначения завершается вердиктом `✗ drift` и предупреждением. Ничего не блокируется — суть в том, что вас *уведомили*.
Вердикты намеренно не бинарные:
| | |
|---|---|
| `✓ sni` / `✓ ip` | Совпадение с объявленным именем хоста или адресом — точное |
| `~ asn` | Совпадение только по автономной системе — это допускает *всё, что эксплуатирует эта AS*, что для гиперскейлера практически безгранично |
| `? ech` | Encrypted ClientHello: имя скрыто по замыслу, поэтому это «невозможно судить», а не «плохо» |
| `✗ drift` | Вне белого списка |
| `— no rule` | Эта программа никогда не была объявлена — ничего не проверялось |
| `✗ undeclared` | Нет правила, при `strict = true` — политика заявляет полноту, поэтому *отсутствие* и есть находка |
Правила принимают точные имена хостов, `*.wildcards`, автономные системы, блоки CIDR (`10.0.0.0/8`) и порты. `strict = true` — это то, что превращает линтер из «сообщи мне, когда моё объявленное ПО ведёт себя неправильно» в «сообщи мне, когда что-то, что я никогда не объявлял, начинает общаться» — а именно так выглядит реальная компрометация.
## Что вы получаете
Десять вкладок, переключение клавишами `1`–`9` и `0`:
| # | Вкладка | Что показывает |
|---|---------|----------------|
| 1 | **Dashboard** | Интерфейсы, график пропускной способности, топ соединений, состояние шлюза/DNS, тепловая карта задержек. Полезно за 5 секунд. |
| 2 | **Connections** | Каждый сокет с его процессом + PID, протоколом, состоянием, GeoIP и спарклайнами задержек. |
| 3 | **Interfaces** | Поинтерфейсные IPv4/IPv6, MAC, MTU, RX/TX, ошибки, потери. |
| 4 | **Packets** | Живой захват с реальной декодировкой L7, расшифровкой TLS 1.3, JA4, отслеживанием потоков, фильтрами, экспортом PCAP. |
| 5 | **Stats** | Разбивка протоколов по байтам + гистограмма времени установления TCP-соединений. |
| 6 | **Topology** | ASCII-карта машина → шлюз → DNS → топ хостов, с traceroute. |
| 7 | **Timeline** | Хронология соединений с цветовой кодировкой по состоянию TCP; сюда попадают предупреждения безопасности. |
| 8 | **Processes** | Рейтинг пропускной способности по процессам с живыми RX/TX и количеством соединений. |
| 9 | **Insights** | *(по желанию)* отправляет снимок локальной/облачной LLM для анализа на простом языке. |
| 0 | **Egress** | Изучает, с чем общается каждый процесс (имя хоста/AS/порт), продвигает этот базовый уровень в политику одним нажатием клавиши, затем предупреждает об отклонениях. Только наблюдение, никогда не блокирует. |
Вкладка Packets — это место, где живёт криминалистика — глубокая декодировка протоколов, живая расшифровка TLS 1.3, охота за угрозами по JA4, фильтры отображения в стиле Wireshark и захват инцидентов. **[См. полную справку по функциям →](https://github.com/matthart1983/netwatch/blob/main/docs/REFERENCE.md)**
### Облегчённый вид
Десять вкладок — это инструмент оператора. Когда вопрос лишь *«что использует мою сеть, и в порядке ли моё соединение?»* — одна машина, SSH-сессия к Pi, tmux-сплит — есть `--lite`:```bash
netwatch --lite # one screen, fits 80×24
Один экран, шесть клавиш. Пропускная способность, доступность и кто общается — разверните любую строку на месте, фильтруйте по мере ввода.
Всё на одном экране: графики пропускной способности в реальном времени, доступность шлюза/DNS/интернета и основные источники трафика по процессам и хостам. Шесть клавиш — q выход, p пауза, / фильтр, ↵ развернуть источник трафика, L возврат к полному виду, ? справка.
Нажмите L в любом из видов для переключения. Оба используют одни и те же сборщики данных, поэтому переход от «что-то выглядит подозрительно» к полному виду криминалистики с десятью вкладками стоит одного нажатия клавиши — без перезапуска, без потери истории, запись продолжается.
Плотный вид
Другое направление: когда у вас большой терминал и нужно всё сразу, --view dense заполняет его четырьмя блоками без лишних элементов — без строки заголовка, без строки меню, без строки состояния. Идентичность, состояние сортировки, диапазон страниц и все сочетания клавиш находятся внутри границ блоков, поэтому каждая строка несёт данные. Минимальный размер — 130×44, и вид расширяется под любой доступный размер: шире — больше истории на графиках и место для полных имён хостов, выше — больше интерфейсов и соединений.```bash
netwatch --view dense # four boxes, needs 130×44
Вот экран в верхней части этого README. Ключевой элемент — **зеркальный двойной график**: загрузка растёт вверх от центральной оси времени, выгрузка — вниз от той же оси. Симметрия трафика становится формой, которую вы узнаёте, не читая цифр: всплеск загрузки — это обрыв над линией, задача резервного копирования — обрыв под ней. Обе половины — брайль с двумя сэмплами на ячейку символа, и каждая ячейка окрашена по **высоте в графике**, а не по принадлежности к серии, поэтому серьёзность всплеска видна до того, как вы измерите его относительно оси.
Разгоны пропускной способности окрашены от холодного к яркому, потому что высокая полоса — это *занятость*, а не *проблема*: насыщенный канал во время резервного копирования работает. Только ограниченные значения, где высокое действительно плохо — насыщение канала, бюджет задержки на хоп — получают обработку зелёный→янтарный→красный, и их индикаторы окрашиваются по позиции вдоль шкалы, так что красная зона видна до того, как вы её достигнете.
Под графиком: поканальные скорости с мини-графиками за 60 секунд, бюджеты задержки на четыре хопа (шлюз, DNS, интернет и самый медленный пир, с которым вы реально общаетесь), а также таблица соединений с деталями выбранной строки, поднятыми в верхнюю часть того же окна — без нового экрана и кнопки «назад». Строка деталей несёт состояние TCP ядра — `cwnd`, `ssthresh`, `mss`, `rwnd` — прочитанное напрямую из ядра: `inet_diag` через netlink в Linux, sysctl `net.inet.tcp.pcblist64` в macOS. Два ядра расходятся в единицах измерения (Linux считает сегменты, BSD — байты), поэтому значения macOS нормализуются относительно MSS, и колонка означает одно и то же на обеих системах. Windows показывает `--`, пока не будет подключён `GetPerTcpConnectionEStats`.
`V` циклически переключает `full → lite → dense`, или задайте один раз в **Settings → View**. Ниже 130×44 он откатывается к той же сетке 80×24, на которую нацелен Lite — которая тоже заполняет свою область — и никогда не прокручивается по горизонтали.
## Подробные руководства
| Руководство | Что внутри |
|-------|--------------|
| **[Справочник функций](https://github.com/matthart1983/netwatch/blob/main/docs/REFERENCE.md)** | Все горячие клавиши, язык фильтров отображения, список декодеров протоколов, темы и параметры конфигурации. |
| **[Расшифровка TLS 1.3](https://github.com/matthart1983/netwatch/blob/main/docs/REFERENCE.md#tls-13-decryption)** | Как работает расшифровка через `SSLKEYLOGFILE`, поддерживаемые наборы шифров и что она может и не может прочитать. |
| **[Охота за угрозами с JA4](https://github.com/matthart1983/netwatch/blob/main/docs/REFERENCE.md#threat-hunting-with-ja4)** | Снятие отпечатков клиентов и переход между потоками. |
| **[Безопасность и песочница Landlock](https://github.com/matthart1983/netwatch/blob/main/docs/REFERENCE.md#security--forensics)** | Модель угроз, сброс привилегий и список разрешённых файловых систем. |
| **[Линтинг политики исходящего трафика](https://github.com/matthart1983/netwatch/blob/main/docs/egress-linter-plan.md)** | Модель observe → promote → warn, язык правил, режим `strict` и схема экспорта NDJSON. |
| **[Бортовой самописец](https://github.com/matthart1983/netwatch/blob/main/docs/REFERENCE.md#flight-recorder)** | Взведение, заморозка и содержимое пакета инцидента. |
| **[AI Insights](https://github.com/matthart1983/netwatch/blob/main/docs/INSIGHTS.md)** | Необязательный локальный/облачный анализ LLM (выключен по умолчанию). |
## Как это работает```
Raw bytes → Ethernet → IPv4/IPv6/ARP → TCP/UDP/ICMP → L7 decoders
↓
Per-flow stream tracking · Handshake timing
TLS 1.3 decryption · JA4 · Threat detection
| Collector | macOS | Linux |
|---|---|---|
| Соединения | lsof + PKTAP | /proc/net/tcp + eBPF kprobe |
| Пакеты | libpcap (BPF) | libpcap |
| Атрибуция процессов | PKTAP | опрос lsof/ss, с опциональным наложением eBPF kprobe |
Всё деградирует корректно: функции, требующие повышенных привилегий, показывают понятное сообщение и откатываются, но никогда не падают. Полные заметки по архитектуре — в WIKI.md.
Связанные проекты
Родственные: SysWatch (система) и DiskWatch (диск) — тот же интерфейс, другая поверхность. ESSH — SSH-клиент на чистом Rust с той же TUI-эстетикой; подключается там, где NetWatch наблюдает.
NetWatch Cloud — хостинговый мониторинг парка серверов, на которых вы запускаете NetWatch. Крошечный Rust-агент на каждом Linux-хосте, панель мониторинга в реальном времени и email + Slack-оповещения о задержках, потере пакетов или выходе хостов из строя. Бесплатно, пока мы растём. Агент, SDK и панель распространяются под MIT; хостинговый бэкенд — проприетарный.
Благодарности
Пакетерам. NetWatch есть в homebrew-core, nixpkgs, AUR и основном бакете Scoop — и ни один из них не упаковал я. Каждый из них сделал кто-то, кому инструмент показался полезным, кто выполнил работу без просьбы и поддерживает её актуальной с тех пор. Запись в Scoop обычно отслеживала релиз в течение нескольких часов после тега.
| Dominiquini | netwatch-tui в AUR, с марта 2026 |
| kemelzaidan | netwatch-tui-bin в AUR |
| tomasrivera | netwatch в nixpkgs |
| scillidan | netwatch в основном бакете Scoop, с v0.15.3 |
| Мейнтейнеры Homebrew | за принятие формулы в core и за бота, отслеживающего каждый релиз с тех пор |
Пакетирование — неблагодарная работа, которую замечают только когда что-то ломается. Если вы устанавливаете NetWatch через один из этих каналов, благодарить за это стоит их, а не меня.
Контрибьюторам. @lamchau, @fdncred и @PeteE присылали патчи. Спасибо — pull request от незнакомца — лучшее, что случается с таким проектом.
И всем, кто открыл issue с реальным воспроизведением, спорил с дизайнерским решением или сообщал, что вывод на их терминале неверен: именно на этой петле обратной связи всё и строится.
Участие
Вопросы, идеи и сообщения об ошибках приветствуются в GitHub Discussions и Issues. Соглашения по коду — в CONTRIBUTING.md, руководство по архитектуре — в WIKI.md.
Лицензия
MIT