Snitch – das benutzerfreundlichere `ss`/`netstat`-Tool
(github.com/karol-broda)- Snitch ist ein besser lesbares Werkzeug zur Inspektion von Netzwerkverbindungen als
ssodernetstatund unterstützt eine Terminal-UI (TUI) sowie formatierte Tabellen - Es zeigt Verbindungszustände entweder in einer interaktiven Echtzeitansicht oder als einmalig ausgegebene Tabelle an und bietet verschiedene Filter wie TCP/UDP, Listening und Established
- Enthalten sind JSON- und CSV-Ausgabe, Auflösung von DNS- und Dienstnamen, Prozessüberwachung und -beendigung sowie automatische Updates
- Unterstützt werden mehrere Installationsmethoden wie Homebrew, Go, Nix, Arch Linux, Shell-Script und Binarys, einschließlich der automatischen Entfernung von Gatekeeper-Warnungen unter macOS
- Ein nützliches Tool für Entwickler und Systemadministratoren, um Netzwerkverbindungen intuitiv zu überwachen und in Skript-Automatisierung einzubinden
Überblick
- Snitch ist ein Tool zum visuellen Erkunden von Netzwerkverbindungen, entwickelt als Alternative zu
ssodernetstat - Es zeigt den Verbindungsstatus über eine TUI-Oberfläche oder eine formatierte Tabellenausgabe an
- Es läuft unter Linux und macOS; dabei können Root-Rechte oder die Berechtigung CAP_NET_ADMIN erforderlich sein
Installation
- Homebrew: Installation mit dem Befehl
brew install snitch - Go:
go install github.com/karol-broda/snitch@latest - Nix/NixOS:
nix-env -iA nixpkgs.snitchoder über einen Flake-Input hinzufügen - Arch Linux (AUR):
yay -S snitch-binoderparu -S snitch-bin - Shell-Script: Installation mit
curl -sSL ... | sh, Standardpfad ist~/.local/binoder/usr/local/bin- Unter macOS entfernt das Installationsskript automatisch das Quarantine-Attribut
- Binary-Download: Auf GitHub Releases sind Versionen für Linux (.tar.gz, .deb, .rpm, .apk) und macOS (.tar.gz) verfügbar
Schnellstart
- Beim Ausführen von
snitchstartet die interaktive TUI snitch -lzeigt nur Listening-Sockets,snitch lsgibt eine Tabelle aus und beendet sich dannsnitch ls -t -ezeigt nur aufgebaute TCP-Sitzungen,snitch ls -perzeugt eine einfach parsebare Ausgabe
Wichtige Befehle
snitch/snitch top: Zeigt eine in Echtzeit aktualisierte Verbindungsliste- Optionen:
-l(Listening),-t(TCP),-e(Established),-i(Aktualisierungsintervall) - Tastenkürzel:
j/kbewegen,t/uTCP·UDP umschalten,KProzess beenden,/suchen,qbeenden usw.
- Optionen:
snitch ls: Gibt eine Tabelle auf einmal aus; bei Überschreitung der Terminalhöhe wird automatisch ein Pager verwendet- Ausgabeformate: Standardtabelle,
-o json,-o csv,-p(einfach),--no-headers(ohne Header)
- Ausgabeformate: Standardtabelle,
snitch json: Gibt JSON aus und eignet sich für Skriptesnitch watch: Streamt JSON-Frames in festgelegten Intervallensnitch upgrade: Prüft die Version und führt ein automatisches Update durch
Filter- und Auflösungsoptionen
- Gemeinsame Flags:
-t(TCP),-u(UDP),-l(Listening),-e(Established),-4(IPv4),-6(IPv6) - DNS- und Dienstnamenauflösung:
- Unterstützt die Optionen
--resolve-addrs,--resolve-ports,--no-cache - Führt parallele DNS-Abfragen mit Caching aus; mit
--no-cachelässt sich der Cache deaktivieren
- Unterstützt die Optionen
- Detaillierte Filterung: Prozessname, Port, Status usw. können im Format
key=valueangegeben werden- Beispiele:
snitch ls proto=tcp state=listen,snitch ls proc=nginx
- Beispiele:
Ausgabeformate
- Standard-Tabellenausgabe: Zeigt Prozessname, PID, Protokoll, Status sowie lokale Adresse und Port
- Einfache Ausgabe (-p): Parsebares Textformat
- JSON/CSV-Ausgabe: Für Skript-Automatisierung und Log-Analyse geeignet
Konfiguration und Umgebungsvariablen
- Konfigurationsdatei:
~/.config/snitch/snitch.toml- Einstellbar sind
numeric,dns_cache,theme(auto/dark/light/mono)
- Einstellbar sind
- Umgebungsvariablen:
- Unterstützt werden unter anderem
SNITCH_THEME,SNITCH_RESOLVE,SNITCH_DNS_CACHE,SNITCH_NO_COLOR,SNITCH_CONFIG
- Unterstützt werden unter anderem
Systemanforderungen
- Erfordert Linux oder macOS
- Linux: Liest Daten aus
/proc/net/*; für vollständige Prozessinformationen sind Root-Rechte oderCAP_NET_ADMINerforderlich - macOS: Verwendet System-APIs; für vollständige Prozessinformationen ist
sudoerforderlich
1 Kommentare
Hacker-News-Kommentare
ss zeigt in der Standardausgabe selten benötigte Informationen wie die Größe der Sende-/Empfangs-Queues an, aber nicht, zu welcher Anwendung ein Socket gehört
Außerdem werden standardmäßig Listening-Sockets ausgelassen, obwohl genau das einer der Hauptanwendungsfälle solcher Tools ist
Ich weiß, dass es schwer ist, gute Defaults zu wählen, aber das hier ist fast ein Beispiel dafür, bei dem fast alles falsch gewählt wurde
Mit der Zeit ändern sich Nutzer und Anwendungsfälle, also müssten sich auch die Defaults ändern, aber bei Unix-Tools ist das Ausgabeformat zugleich die API, daher entstehen beim Ändern Abwärtskompatibilitätsprobleme
Zum Beispiel werden bei
ps auxlange Prozessnamen aus genau diesem Grund auf etwa 7 Zeichen abgeschnittenPassender Artikel: sh and the separation of data and representation
Ich denke, intuitive Bedienbarkeit ist viel wichtiger als Geschwindigkeit oder Features
netstat -utanundss -utanscheinen fast dieselben Informationen zu zeigenDa sich die Namen überschneiden, wäre ein anderer Name vielleicht besser
Little-Snitch-Website
Snitch ist einfach ein Tool, das ss/netstat-Daten im Terminal besser lesbar darstellt
Im selben IT-Bereich gibt es bereits ein Tool mit sehr ähnlichem Namen, daher verstehe ich nicht, warum man den unbedingt nochmal verwenden muss
Link zur Demo
GUI-Bibliotheken haben verschiedene Funktionen für Nutzer wie Sehbehinderte, bei TUI könnte es da Defizite geben
Dadurch wird die Anzeige viel zu breit, sodass sie bei vertikaler Teilung auf einem Laptop fast nicht mehr passt
Ich werde Snitch nicht installieren. ss ist auf allen Servern ohnehin standardmäßig installiert, und ich brauche kein TUI
Für Privatgebrauch oder Workstations mag Snitch okay sein, aber auf Servern ist ss der Standard
Snitch eignet sich eher für Workstations oder zum Debuggen im Homelab
Die Sende-/Empfangs-Queues werden derzeit noch nicht angezeigt, sollen aber später per Kompaktmodus oder Toggle ergänzt werden
Gibt es vielleicht eine Funktion, die ich im Demo-Video übersehen habe?
Traffic-Monitoring ist geplant, aber noch nicht implementiert
Ich finde es erstaunlich, dass Go
module barenamezulässt. Bei privaten Projekten landet man am Ende ohnehin bei einer URL, und ich halte das für ein kein gutes MusterCommit-Link
@latestsollte der Build jetzt funktionierenWenn Malware zum Beispiel eine Weile wartet oder nur dann mit ihrem C&C kommuniziert, wenn der Nutzer ohnehin Netzwerkaktivität hat, scheint eine Erkennung schwierig
LD_PRELOAD-Rootkits können die Ausgabe von libc-Funktionen manipulieren, um ihre Aktivitäten zu verbergen
ss ist insofern etwas vertrauenswürdiger, und Snitch ist in Go geschrieben und nutzt kein libc, daher ist es möglicherweise robuster gegen LD_PRELOAD-Rootkits
Allerdings sind solche Tools nicht für die Erkennung bösartigen Traffics gedacht, sondern für lokales Debugging
Weiterführendes Material: decloaker, arXiv-Paper, ACM-Paper, Erklärung der /proc-Struktur
Ein erfahrener Angreifer kann sich ohnehin in normalen Traffic einmischen
Auch Netzwerktools zur Abwehr echter Angreifer sind nicht perfekt (Suchbegriff: bro vantage point problem)
Ich nutze derzeit jnettop, aber die UI gefällt mir nicht