7 ポイント 投稿者 GN⁺ 2025-12-25 | 1件のコメント | WhatsAppで共有
  • Snitch は、既存の ssnetstat よりも 人が見やすいネットワーク接続検査ツール で、ターミナル UI(TUI)とスタイル付きテーブル形式をサポート
  • リアルタイムのインタラクティブ画面 または 一度だけ出力されるテーブル形式 で接続状態を表示し、TCP/UDP、リスニング、接続済み状態 など多様なフィルターを提供
  • JSON・CSV 出力DNS/サービス名の解決プロセス監視と終了自動アップデート 機能を含む
  • Homebrew、Go、Nix、Arch Linux、Shell Script、Binary など複数のインストール方法をサポートし、macOS の Gatekeeper 警告の自動解除 機能を含む
  • 開発者やシステム管理者が ネットワーク接続を直感的に監視 し、スクリプト自動化に活用できる有用なツール

概要

  • Snitch は ネットワーク接続を視覚的に探索 できるツールで、ssnetstat の代替として設計
  • 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 -eTCP の接続済みセッションのみ表示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件のコメント

 
GN⁺ 2025-12-25
Hacker Newsの反応
  • lsofやssのデフォルト設定があまりにも使いづらい
    ssは標準出力で送受信キューサイズのような滅多に必要ない情報は表示するのに、肝心のそのソケットがどのアプリケーションに属しているかは表示しない
    しかもデフォルトでリスニングソケットを省略するが、こういうツールの主な用途はまさにそれを見ることだ
    デフォルト値をうまく選ぶのが難しいのはわかるが、これはほとんどすべてを間違って選んだ例だ
    • 完全に同意する。Unixツールには長期的に合理的なデフォルトを維持しにくい構造的な限界がある
      時間が経つにつれてユーザーやユースケースが変わるのでデフォルトも変えるべきだが、Unixツールでは出力形式がそのままAPIなので、変えると後方互換性の問題が生じる
      たとえばps auxが長いプロセス名を7文字程度で切り詰めてしまうのもそのためだ
      関連記事: sh and the separation of data and representation
    • 今ではUXに対する理解はずっと深まっている。70年代の開発者がssやlsofを作ったときは、こうしたユーザビリティの問題をあまり理解していなかったのだと思う
    • 最近のfd、ag、rgのような新世代のCLIツールも似た問題を抱えている
      速度や機能よりも直感的な使いやすさのほうがはるかに重要だと思う
    • netstat -utanss -utanはほぼ同じ情報を表示しているように見える
  • タイトルを見て最初はMac向けネットワーク監視ツールのLittle Snitchの話かと思った
    名前が重なっているので別の名前を使ったほうがいいかもしれない
    Little Snitch公式サイト
    • Linux向けのOpenSnitchというクローンもある
    • 名前は悪くないと思う。既存のLittle Snitchがあるからといって必ず変える必要はない
    • 名前を変える必要まではなさそうだ。Little Snitchとは用途がまったく異なる
      Snitchは単にss/netstatのデータをターミナルで見やすく表示するツールだ
    • へえ、いいね。WindowsやLinux向けの代替ツールもあるのだろうか
    • 自分も最初はそう思った。名前がかなり気恥ずかしく感じる
      同じIT分野にすでに似た名前のツールがあるのに、なぜわざわざまたそれを使うのか理解できない
  • デモのrecording-as-code方式が興味深い
    デモリンク
    • ありがとう :) 他のプロジェクトではこういうアプローチをほとんど見たことがない
  • 最近TUIベースのツールが増えているのがとても嬉しい。このプロジェクトも良さそうなのでぜひ使ってみたい
    • ただ、TUIはGUIと同じくらいアクセシビリティが高いのだろうかと気になる
      GUIライブラリには視覚障害者などのためのさまざまな機能があるが、TUIはその点が弱いかもしれない
  • ssには慣れていて普通に使っている。ただ送受信キューの数字は見たくない
    画面幅を取りすぎて、ノートPCで縦分割するとほとんど収まらない
    Snitchをインストールするつもりはない。ssはすでにすべてのサーバーに標準で入っているし、TUIも必要ない
    Snitchは個人用途やワークステーション用途には良さそうだが、サーバーではssが定番だ
    • その通り。サーバーではssが標準で入っているのでそのまま使えばいい
      Snitchはワークステーションやhomelabのデバッグ用途により適している
      送受信キューはまだ表示していないが、今後compactモードやトグルで追加する予定だ
  • 見た感じは悪くないが、自分は昔からiptraf-ngを使っていて、今でも少しそちらのほうが良いと感じる
    もしかしてデモ動画で自分が見落とした機能があるのだろうか?
    • ありがとう! Snitchはトラフィック監視というよりss/netstatの代替に近い
      トラフィック監視機能は計画中だが、まだ実装されていない
  • 名前は好きではないが、TUIで接続状態を監視するというのは本当に相性がいい
    • ありがとう。もしよければ、名前のどういう部分が気に入らないのか知りたい
  • Goでインストールしようとしたら次のエラーが出た
    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
    
    • モジュール宣言をURLなしの名前だけで書いていたのが原因だった。数時間前に修正された
      Goがmodule barenameを許しているのは不思議だ。個人プロジェクトでも結局URLを書くことになるので、良くないパターンだと思う
    • 修正はされたが、まだリリースには反映されていない
      コミットリンク
    • もう修正してリリースまで完了した。@latestでビルドすれば問題なく動くはずだ
  • こういうツールが熟練した攻撃者にどれほど有用なのか、いつも気になっていた
    たとえば、マルウェアが一定時間待機したり、ユーザーがネットワーク活動中のときだけC&Cと通信するよう設計されていれば、検知は難しそうだ
    • 少なくともこうしたツールは/procを直接パースしないほうがいい
      LD_PRELOADルートキットはlibc関数の出力を改ざんして活動を隠すからだ
      ssのほうがまだ少し信頼でき、SnitchはGoで書かれていてlibcを使わないので、LD_PRELOADルートキットにも強い可能性がある
      ただし、こうしたツールは悪性トラフィックの検知用ではなくローカルデバッグ用
      参考資料: decloaker, arxiv論文, ACM論文, proc構造の説明
    • その通り。Snitchはセキュリティ検知用ではなくローカルなデバッグ/点検用
      熟練した攻撃者なら、どうせ正規トラフィックに紛れて動作できてしまう
    • こうしたツールは敵対的な環境向けではない
      実際の攻撃者対応用ネットワークツールも完璧ではない(検索語: bro vantage point problem
  • 各ソケット/プロセスごとに現在および累積の転送速度を表示する機能があるといい
    今はjnettopを使っているが、UIが気に入らない
    • その機能は今後のバージョンで追加予定