
более красивый способ просмотра сетевых подключений
дружелюбная ss / netstat для людей. просматривайте сетевые соединения с помощью чистого TUI или стилизованных таблиц.

brew install snitch
спасибо @bevanjkay за добавление snitch в homebrew-core
go install github.com/karol-broda/snitch@latest
nix-env -iA nixpkgs.snitch
спасибо @DieracDelta за добавление snitch в nixpkgs
# попробовать
nix run github:karol-broda/snitch
# установить в профиль
nix profile install github:karol-broda/snitch
# или добавить в inputs flake
{
inputs.snitch.url = "github:karol-broda/snitch";
}
# затем использовать: inputs.snitch.packages.${system}.default
добавьте snitch в ваши inputs flake и импортируйте модуль home-manager:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager.url = "github:nix-community/home-manager";
snitch.url = "github:karol-broda/snitch";
};
outputs = { nixpkgs, home-manager, snitch, ... }: {
homeConfigurations."user" = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
modules = [
snitch.homeManagerModules.default
{
programs.snitch = {
enable = true;
# опционально: использовать пакет из flake вместо nixpkgs
# package = snitch.packages.x86_64-linux.default;
settings = {
defaults = {
theme = "catppuccin-mocha";
interval = "2s";
resolve = true;
};
};
};
}
];
};
};
}
доступные темы: ansi, catppuccin-mocha, catppuccin-macchiato, catppuccin-frappe, catppuccin-latte, gruvbox-dark, gruvbox-light, dracula, nord, tokyo-night, tokyo-night-storm, tokyo-night-light, solarized-dark, solarized-light, one-dark,
# с yay
yay -S snitch-bin
# с paru
paru -S snitch-bin
curl -sSL https://raw.githubusercontent.com/karol-broda/snitch/master/install.sh | sh
устанавливается в ~/.local/bin (если доступно) или /usr/local/bin. можно переопределить:
curl -sSL https://raw.githubusercontent.com/karol-broda/snitch/master/install.sh | INSTALL_DIR=~/bin sh
macOS: скрипт установки автоматически удаляет атрибут карантина (
com.apple.quarantine) из бинарника, чтобы позволить ему запускаться без предупреждений Gatekeeper. чтобы отключить это, установитеKEEP_QUARANTINE=1.
готовые OCI-образы доступны в реестре контейнеров GitHub:
# извлечь из ghcr.io
docker pull ghcr.io/karol-broda/snitch:latest # alpine (по умолчанию)
docker pull ghcr.io/karol-broda/snitch:latest-alpine # alpine (~17MB)
docker pull ghcr.io/karol-broda/snitch:latest-scratch # минимальный, только бинарник (~9MB)
docker pull ghcr.io/karol-broda/snitch:latest-debian # debian trixie
docker pull ghcr.io/karol-broda/snitch:latest-ubuntu # ubuntu 24.04
# или используйте конкретную версию
docker pull ghcr.io/karol-broda/snitch:0.2.0-alpine
альтернативно, соберите локально через nix flake:
nix build github:karol-broda/snitch#snitch-alpine
docker load < result
запуск контейнера:
# базовое использование — видит сокеты хоста, но не имена процессов
docker run --rm --net=host snitch:latest ls
# полная информация — включает PID, имя процесса, пользователя
docker run --rm --net=host --pid=host --cap-add=SYS_PTRACE snitch:latest ls
| флаг | назначение |
|---|---|
--net=host | разделить сетевое пространство имён хоста (требуется для просмотра соединений хоста) |
--pid=host | разделить пространство имён PID хоста (нужно для информации о процессах) |
--cap-add=SYS_PTRACE | читать детали процесса из /proc/<pid> |
примечание:
CAP_NET_ADMINиCAP_NET_RAWне требуются. snitch читает из/proc/net/*, для чего не нужны специальные сетевые возможности.
скачайте с релизов:
snitch_<version>_linux_<arch>.tar.gz или .deb/.rpm/.apksnitch_<version>_darwin_<arch>.tar.gztar xzf snitch_*.tar.gz
sudo mv snitch /usr/local/bin/
macOS: если заблокирован с сообщением «невозможно открыть, так как разработчик не может быть проверен», выполните:
xattr -d com.apple.quarantine /usr/local/bin/snitch
snitch # запустить интерактивный TUI
snitch -l # TUI, показывающий только слушающие сокеты
snitch ls # вывести стилизованную таблицу и выйти
snitch ls -l # только слушающие сокеты
snitch ls -t -e # tcp установленные соединения
snitch ls -p # обычный вывод (парсируемый)
snitch / snitch topинтерактивный TUI с обновляемым в реальном времени списком соединений.
snitch # все соединения
snitch -l # только слушающие
snitch -t # только tcp
snitch -e # только установленные
snitch -i 2s # интервал обновления 2 секунды
горячие клавиши:
j/k, ↑/↓ навигация
g/G вверх/вниз
t/u переключить tcp/udp
l/e/o переключить listen/established/other
s/S циклически переключать сортировку / обратный порядок
w наблюдать/мониторить процесс (выделить)
W очистить все наблюдаемые
K убить процесс (с подтверждением)
/ поиск
enter детали соединения
? справка
q выход
snitch lsоднократный вывод таблицы. автоматически использует пейджер, если вывод превышает высоту терминала.
snitch ls # стилизованная таблица (по умолчанию)
snitch ls -l # только слушающие
snitch ls -t -l # tcp слушающие
snitch ls -e # только установленные
snitch ls -p # обычный/парсируемый вывод
snitch ls -o json # вывод в json
snitch ls -o csv # вывод в csv
snitch ls -n # числовой (без разрешения DNS)
snitch ls --no-headers # без заголовков
snitch jsonвывод JSON для скриптов.
snitch json
snitch json -l
snitch watchпотоковая передача JSON-фреймов с заданным интервалом.
snitch watch -i 1s | jq '.count'
snitch watch -l -i 500ms
snitch upgradeпроверить наличие обновлений и обновиться на месте.
snitch upgrade # проверить обновления
snitch upgrade --yes # обновиться автоматически
snitch upgrade -v 0.1.7 # установить конкретную версию
флаги-сокращения работают во всех командах:
-t, --tcp только tcp
-u, --udp только udp
-l, --listen слушающие сокеты
-e, --established установленные соединения
-4, --ipv4 только ipv4
-6, --ipv6 только ipv6
опции разрешения DNS и имён служб:
--resolve-addrs разрешать IP-адреса в имена хостов (по умолчанию: true)
--resolve-ports разрешать номера портов в имена служб
--no-cache отключить кэширование DNS (принудительно выполнять новые запросы)
DNS-запросы выполняются параллельно и кэшируются для производительности. используйте --no-cache, чтобы обойти кэш для отладки или когда адреса часто меняются.
Для более точной фильтрации используйте синтаксис key=value с ls:
snitch ls proto=tcp state=listen
snitch ls pid=1234
snitch ls proc=nginx
snitch ls lport=443
snitch ls contains=google
стилизованная таблица (по умолчанию):
╭─────────────────┬───────┬───────┬─────────────┬─────────────────┬────────╮
│ PROCESS │ PID │ PROTO │ STATE │ LADDR │ LPORT │
├─────────────────┼───────┼───────┼─────────────┼─────────────────┼────────┤
│ nginx │ 1234 │ tcp │ LISTEN │ * │ 80 │
│ postgres │ 5678 │ tcp │ LISTEN │ 127.0.0.1 │ 5432 │
╰─────────────────┴───────┴───────┴─────────────┴─────────────────┴────────╯
2 connections
обычный вывод (-p):
PROCESS PID PROTO STATE LADDR LPORT
nginx 1234 tcp LISTEN * 80
postgres 5678 tcp LISTEN 127.0.0.1 5432
опциональный файл конфигурации ~/.config/snitch/snitch.toml:
[defaults]
numeric = false # отключить разрешение имён
dns_cache = true # кэшировать DNS-запросы (false — отключить)
theme = "auto" # цветовая тема: auto, dark, light, mono
[tui]
remember_state = false # запоминать параметры просмотра между сессиями
когда remember_state = true, TUI будет сохранять и восстанавливать:
состояние сохраняется в $XDG_STATE_HOME/snitch/tui.json (по умолчанию ~/.local/state/snitch/tui.json).
флаги командной строки всегда имеют приоритет над сохранённым состоянием.
SNITCH_THEME=dark # установить тему по умолчанию
SNITCH_RESOLVE=0 # отключить разрешение DNS
SNITCH_DNS_CACHE=0 # отключить кэширование DNS
SNITCH_NO_COLOR=1 # отключить цветной вывод
SNITCH_CONFIG=/path/to # путь к файлу конфигурации
/proc/net/*, нужны root или CAP_NET_ADMIN для полной информации о процессахmono