- Snitch は、既存の
ss や netstat よりも 人が見やすいネットワーク接続検査ツール で、ターミナル UI(TUI)とスタイル付きテーブル形式をサポート
- リアルタイムのインタラクティブ画面 または 一度だけ出力されるテーブル形式 で接続状態を表示し、TCP/UDP、リスニング、接続済み状態 など多様なフィルターを提供
- JSON・CSV 出力、DNS/サービス名の解決、プロセス監視と終了、自動アップデート 機能を含む
- Homebrew、Go、Nix、Arch Linux、Shell Script、Binary など複数のインストール方法をサポートし、macOS の Gatekeeper 警告の自動解除 機能を含む
- 開発者やシステム管理者が ネットワーク接続を直感的に監視 し、スクリプト自動化に活用できる有用なツール
概要
- Snitch は ネットワーク接続を視覚的に探索 できるツールで、
ss や netstat の代替として設計
- TUI インターフェース または スタイル付きテーブル出力 を通じて接続状態を表示
- Linux と macOS で動作し、root 権限 または CAP_NET_ADMIN 権限が必要になる場合がある
インストール方法
- Homebrew:
brew install snitch コマンドでインストール可能
- Go:
go install github.com/karol-broda/snitch@latest
- Nix/NixOS:
nix-env -iA nixpkgs.snitch または flake 入力として追加可能
- Arch Linux (AUR) :
yay -S snitch-bin または paru -S snitch-bin
- Shell Script:
curl -sSL ... | sh コマンドでインストール、デフォルトのパスは ~/.local/bin または /usr/local/bin
- macOS ではインストールスクリプトが自動的に quarantine 属性を削除
- Binary ダウンロード: GitHub Releases で Linux(.tar.gz, .deb, .rpm, .apk)および macOS(.tar.gz)版を提供
クイックスタート
snitch を実行すると インタラクティブ TUI を起動
snitch -l は リスニングソケットのみ表示、snitch ls は テーブル形式で出力して終了
snitch ls -t -e は TCP の接続済みセッションのみ表示、snitch ls -p は パースしやすいシンプル出力
主なコマンド
snitch / snitch top : リアルタイム更新される接続一覧を表示
- オプション:
-l(リスニング)、-t(TCP)、-e(接続済み)、-i(更新間隔)
- キーバインド:
j/k 移動、t/u TCP・UDP 切り替え、K プロセス終了、/ 検索、q 終了 など
snitch ls : 一度だけテーブル出力し、ターミナルの高さを超えると自動で pager を使用
- 出力形式: デフォルトのテーブル、
-o json, -o csv, -p(シンプル)、--no-headers(ヘッダー削除)
snitch json : JSON 形式で出力し、スクリプトで活用可能
snitch watch : 一定間隔で JSON フレームをストリーミング
snitch upgrade : バージョン確認と自動アップデート
フィルターと解決オプション
- 共通フラグ:
-t(TCP)、-u(UDP)、-l(リスニング)、-e(接続済み)、-4(IPv4)、-6(IPv6)
- DNS およびサービス名の解決:
--resolve-addrs, --resolve-ports, --no-cache オプションをサポート
- 並列 DNS 参照とキャッシュを実行し、
--no-cache でキャッシュを無効化可能
- 詳細フィルタリング:
key=value 形式でプロセス名、ポート、状態などを指定可能
- 例:
snitch ls proto=tcp state=listen, snitch ls proc=nginx
出力形式
- デフォルトのテーブル出力: プロセス名、PID、プロトコル、状態、ローカルアドレス・ポートを表示
- シンプル出力(-p) : パース可能なテキスト形式
- JSON/CSV 出力: スクリプト自動化やログ分析に活用可能
設定と環境変数
- 設定ファイル:
~/.config/snitch/snitch.toml
numeric, dns_cache, theme(auto/dark/light/mono)を設定可能
- 環境変数:
SNITCH_THEME, SNITCH_RESOLVE, SNITCH_DNS_CACHE, SNITCH_NO_COLOR, SNITCH_CONFIG などをサポート
システム要件
- Linux または macOS 環境が必要
- Linux:
/proc/net/* からデータを読み取り、全プロセス情報には root または CAP_NET_ADMIN 権限が必要
- macOS: システム API を使用し、全プロセス情報には
sudo が必要
1件のコメント
Hacker Newsの反応
ssは標準出力で送受信キューサイズのような滅多に必要ない情報は表示するのに、肝心のそのソケットがどのアプリケーションに属しているかは表示しない
しかもデフォルトでリスニングソケットを省略するが、こういうツールの主な用途はまさにそれを見ることだ
デフォルト値をうまく選ぶのが難しいのはわかるが、これはほとんどすべてを間違って選んだ例だ
時間が経つにつれてユーザーやユースケースが変わるのでデフォルトも変えるべきだが、Unixツールでは出力形式がそのままAPIなので、変えると後方互換性の問題が生じる
たとえば
ps auxが長いプロセス名を7文字程度で切り詰めてしまうのもそのためだ関連記事: sh and the separation of data and representation
速度や機能よりも直感的な使いやすさのほうがはるかに重要だと思う
netstat -utanとss -utanはほぼ同じ情報を表示しているように見える名前が重なっているので別の名前を使ったほうがいいかもしれない
Little Snitch公式サイト
Snitchは単にss/netstatのデータをターミナルで見やすく表示するツールだ
同じIT分野にすでに似た名前のツールがあるのに、なぜわざわざまたそれを使うのか理解できない
デモリンク
GUIライブラリには視覚障害者などのためのさまざまな機能があるが、TUIはその点が弱いかもしれない
画面幅を取りすぎて、ノートPCで縦分割するとほとんど収まらない
Snitchをインストールするつもりはない。ssはすでにすべてのサーバーに標準で入っているし、TUIも必要ない
Snitchは個人用途やワークステーション用途には良さそうだが、サーバーではssが定番だ
Snitchはワークステーションやhomelabのデバッグ用途により適している
送受信キューはまだ表示していないが、今後compactモードやトグルで追加する予定だ
もしかしてデモ動画で自分が見落とした機能があるのだろうか?
トラフィック監視機能は計画中だが、まだ実装されていない
Goが
module barenameを許しているのは不思議だ。個人プロジェクトでも結局URLを書くことになるので、良くないパターンだと思うコミットリンク
@latestでビルドすれば問題なく動くはずだたとえば、マルウェアが一定時間待機したり、ユーザーがネットワーク活動中のときだけC&Cと通信するよう設計されていれば、検知は難しそうだ
LD_PRELOADルートキットはlibc関数の出力を改ざんして活動を隠すからだ
ssのほうがまだ少し信頼でき、SnitchはGoで書かれていてlibcを使わないので、LD_PRELOADルートキットにも強い可能性がある
ただし、こうしたツールは悪性トラフィックの検知用ではなくローカルデバッグ用だ
参考資料: decloaker, arxiv論文, ACM論文, proc構造の説明
熟練した攻撃者なら、どうせ正規トラフィックに紛れて動作できてしまう
実際の攻撃者対応用ネットワークツールも完璧ではない(検索語: bro vantage point problem)
今はjnettopを使っているが、UIが気に入らない