7 Punkte von GN⁺ 2025-12-25 | 1 Kommentare | Auf WhatsApp teilen
  • Snitch ist ein besser lesbares Werkzeug zur Inspektion von Netzwerkverbindungen als ss oder netstat und 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 ss oder netstat
  • 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.snitch oder über einen Flake-Input hinzufügen
  • Arch Linux (AUR): yay -S snitch-bin oder paru -S snitch-bin
  • Shell-Script: Installation mit curl -sSL ... | sh, Standardpfad ist ~/.local/bin oder /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 snitch startet die interaktive TUI
  • snitch -l zeigt nur Listening-Sockets, snitch ls gibt eine Tabelle aus und beendet sich dann
  • snitch ls -t -e zeigt nur aufgebaute TCP-Sitzungen, snitch ls -p erzeugt 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/k bewegen, t/u TCP·UDP umschalten, K Prozess beenden, / suchen, q beenden usw.
  • 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)
  • snitch json: Gibt JSON aus und eignet sich für Skripte
  • snitch watch: Streamt JSON-Frames in festgelegten Intervallen
  • snitch 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-cache lässt sich der Cache deaktivieren
  • Detaillierte Filterung: Prozessname, Port, Status usw. können im Format key=value angegeben werden
    • Beispiele: snitch ls proto=tcp state=listen, snitch ls proc=nginx

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)
  • Umgebungsvariablen:
    • Unterstützt werden unter anderem SNITCH_THEME, SNITCH_RESOLVE, SNITCH_DNS_CACHE, SNITCH_NO_COLOR, SNITCH_CONFIG

Systemanforderungen

  • Erfordert Linux oder macOS
  • Linux: Liest Daten aus /proc/net/*; für vollständige Prozessinformationen sind Root-Rechte oder CAP_NET_ADMIN erforderlich
  • macOS: Verwendet System-APIs; für vollständige Prozessinformationen ist sudo erforderlich

1 Kommentare

 
GN⁺ 2025-12-25
Hacker-News-Kommentare
  • Die Standardeinstellungen von lsof und ss sind viel zu unpraktisch
    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
    • Stimme völlig zu. Unix-Tools haben langfristig eine strukturelle Grenze dabei, sinnvolle Defaults beizubehalten
      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 aux lange Prozessnamen aus genau diesem Grund auf etwa 7 Zeichen abgeschnitten
      Passender Artikel: sh and the separation of data and representation
    • Heute ist das Verständnis für UX viel ausgeprägter. Als Entwickler in den 70ern ss oder lsof gebaut haben, war ihnen diese Art von Usability-Problemen wohl nicht wirklich bewusst
    • Auch neue CLI-Tools wie fd, ag und rg kämpfen mit ähnlichen Problemen
      Ich denke, intuitive Bedienbarkeit ist viel wichtiger als Geschwindigkeit oder Features
    • netstat -utan und ss -utan scheinen fast dieselben Informationen zu zeigen
  • Beim Titel dachte ich zuerst, es gehe um das Mac-Netzwerk-Monitoring-Tool Little Snitch
    Da sich die Namen überschneiden, wäre ein anderer Name vielleicht besser
    Little-Snitch-Website
    • Es gibt auch einen Linux-Klon namens OpenSnitch
    • Ich finde den Namen okay. Nur weil es Little Snitch schon gibt, muss man ihn nicht unbedingt ändern
    • Ich glaube nicht, dass der Name geändert werden muss. Der Einsatzzweck ist komplett anders als bei Little Snitch
      Snitch ist einfach ein Tool, das ss/netstat-Daten im Terminal besser lesbar darstellt
    • Wow, cool. Ich frage mich, ob es auch Alternativen für Windows oder Linux gibt
    • Das war auch mein erster Gedanke. Der Name wirkt ziemlich peinlich
      Im selben IT-Bereich gibt es bereits ein Tool mit sehr ähnlichem Namen, daher verstehe ich nicht, warum man den unbedingt nochmal verwenden muss
  • Der recording-as-code-Ansatz der Demo ist interessant
    Link zur Demo
    • Danke :) So einen Ansatz habe ich in anderen Projekten fast nie gesehen
  • Ich finde es großartig, dass es in letzter Zeit mehr TUI-basierte Tools gibt. Dieses Projekt sieht auch klasse aus, ich werde es auf jeden Fall ausprobieren
    • Ich frage mich allerdings, ob TUI bei der Barrierefreiheit genauso gut ist wie GUI
      GUI-Bibliotheken haben verschiedene Funktionen für Nutzer wie Sehbehinderte, bei TUI könnte es da Defizite geben
  • Ich habe mich an ss gewöhnt und nutze es gut. Die Sende-/Empfangs-Queue-Zahlen will ich aber nicht sehen
    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
    • Genau. Auf Servern ist ss standardmäßig installiert, also kann man es einfach weiterverwenden
      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
  • Sieht ordentlich aus, aber ich nutze seit Langem iptraf-ng und finde es immer noch etwas besser
    Gibt es vielleicht eine Funktion, die ich im Demo-Video übersehen habe?
    • Danke! Snitch ist eher ein Ersatz für ss/netstat als ein Traffic-Monitoring-Tool
      Traffic-Monitoring ist geplant, aber noch nicht implementiert
  • Der Name gefällt mir nicht, aber Verbindungsstatus in einer TUI zu überwachen passt wirklich gut
    • Danke. Mich würde interessieren, welcher Teil des Namens dir nicht gefällt
  • Ich wollte es mit Go installieren, aber dabei trat folgender Fehler auf
    go install github.com/karol-broda/snitch@latest
    go: github.com/karol-broda/snitch@latest: version constraints conflict:
    module declares its path as: snitch
    but was required as: github.com/karol-broda/snitch
    
    • Das Problem entstand, weil das Modul ohne URL nur mit dem Namen deklariert war. Das wurde vor ein paar Stunden behoben
      Ich finde es erstaunlich, dass Go module barename zulässt. Bei privaten Projekten landet man am Ende ohnehin bei einer URL, und ich halte das für ein kein gutes Muster
    • Der Fix ist zwar drin, aber noch nicht in einem Release enthalten
      Commit-Link
    • Inzwischen habe ich den Fix eingespielt und auch ein Release gemacht. Mit @latest sollte der Build jetzt funktionieren
  • Ich habe mich immer gefragt, wie nützlich solche Tools für erfahrene Angreifer sind
    Wenn 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
    • Solche Tools sollten zumindest nicht direkt /proc parsen
      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
    • Genau. Snitch ist nicht für Security-Erkennung gedacht, sondern für lokales Debugging/Prüfen
      Ein erfahrener Angreifer kann sich ohnehin in normalen Traffic einmischen
    • Solche Tools sind nicht für feindliche Umgebungen gedacht
      Auch Netzwerktools zur Abwehr echter Angreifer sind nicht perfekt (Suchbegriff: bro vantage point problem)
  • Es wäre gut, wenn pro Socket/Prozess die aktuelle und kumulierte Übertragungsrate angezeigt würde
    Ich nutze derzeit jnettop, aber die UI gefällt mir nicht
    • Diese Funktion ist für eine zukünftige Version geplant