
netwatch v0.28.1
リアルタイムネットワーク診断をターミナルで。ワンコマンド、設定不要、即座に可視化。
NetWatch
ネットワークで実際に起きていることを、ターミナルでライブ確認。
暗号化トラフィックを読み取り、すべての接続の背後にあるプロセスを特定し、マルウェアのホーム通信を検出するネットワークモニター。単一バイナリ。設定不要。
すべてを一度に表示し、クローム行ゼロ — ヘッダーバーもメニューバーもステータスバーもなし。ダウンロードは共有の時間軸から上へ、アップロードはそこから下へ伸びるため、トラフィックの対称性は数値を読む前に形で認識できます。色は系列ではなく大きさを表します。
…そしてその下にあるデフォルトの10タブの計器群。1回のVキーでアクセスでき、同じウォームコレクタを共有 — ダッシュボード、各ソケットの背後にあるプログラム、ディープパケットインスペクション、ネットワークマップ、各プログラムが通信する対象。
ほとんどのネットワークツールは「帯域を使っているのは何か」というひとつの質問に答え、そこで止まります。NetWatchはさらに先へ進みます。ワイヤ上のプロトコルをデコードし、各接続を開いたのがどのプログラムかを教え、問題を示すパターン — ポートスキャン、C2サーバーへのマルウェアのビーコン通信、DNS経由でのデータのこっそりとした送信 — を監視します。何かおかしいときは、1回のキー操作でバグ報告に添付できるポータブルな証拠バンドルを凍結保存します。
これは、帯域メーター、Wiresharkのトリアージビュー、軽量な侵入検知の役割をひとつの設定不要バイナリで実現するものだと考えてください — ターミナルから離れることなく。
質問に応じてスケールします — 双方向に: --view dense は大きなターミナルを4つのゼロクロームボックスで埋め尽くし、netwatch --lite は「今、ネットワークを何が使っているのか」に答える80×24の1画面。答えが「調査が必要な何か」のときは、完全な10タブビューが同じライブキャプチャを共有しながら、1回のキー操作で待っています。
対象ユーザー: ブルーチーム、インシデントレスポンダー、SRE、そして「今、何が起きているのか」を1時間後にキャプチャファイルを解析するのではなく今すぐ確認する必要があるホームラボ愛好家。
650+テスト · Landlockサンドボックス (Linux) · 敵対的トラフィックを安全に解析
そして、他のターミナルツールではまったく実現できない部分: NetWatchはマシン上の各プログラムが通信する対象を学習し、1回のキー操作で観測されたベースラインをポリシーに変換し、プログラムが新しい場所と通信し始めた瞬間に知らせます。
観測 → 昇格 → 警告。ベースラインは1回のキー操作でポリシーになり、次の新しい宛先はドリフトとして通知されます。
NetWatchの特長
- 🔓 制御下にある暗号化トラフィックを読む — ブラウザやアプリの
SSLKEYLOGFILEをNetWatchに向けると、TLS 1.3セッションの平文がWiresharkと同じようにライブでデコードされます。プロキシも証明書も、中間に介入するものも一切不要です。 - 🛰️ 各プログラムが通信する対象を学習し、変化を通知 — NetWatchは各プロセスが到達する宛先(ClientHelloからのホスト名、自律システム、ポート)を監視し、1回のキー操作で観測されたベースラインをエグレスポリシーに昇格させます。以降、プログラムが新しい場所と通信し始めると警告します。これはファイアウォールのルールセットでは表現できない文です:
curlは以前api.github.comにしか到達していなかったのに、今日は別の場所に到達した。 観測のみで、ブロックはしません。 - 🧬 接続の背後にあるソフトウェアを指紋認証 — JA4は各TLS/QUICハンドシェイクを安定したフィンガープリントに変換するため、特定のクライアント — あるいは特定のマルウェア — を、ブラウザをユーザーエージェントで識別するように、トラフィックが暗号化されていても認識できます。フィンガープリントを軸に、同じソフトウェアからの他のすべてのフローを見つけられます。
- 🚨 マルウェアのホーム通信を検知 — C2ビーコン通信(規則的で低ジッタのチェックイン)、ポートスキャン、DNSトンネリングの組み込み検出が、ゼロセットアップでバックグラウンド実行されます。重大なアラートはレコーダーを自動的にフリーズするため、確認したときには証拠がすでに保存されています。
- ⚙️ すべての接続の背後にあるプロセスを特定 — 各ソケットを
ss/lsofから開いたプログラムにマッピングし、ポーリングでは見逃される短命フローも捕捉するオプションのカーネルレベルeBPF kprobe(Linux、ebpfフィーチャー)も利用可能。すべての環境で動作し、kprobeは必須ではなく拡張です。 - 📡 ポートだけでなくプロトコルをデコード — TLS、QUIC、HTTP、DNS(およびSSHバナー/バージョンスニッフィング)などの本格的なL7解析を、フローごとのストリーム追跡とハンドシェイクタイミング付きで実行。単なる「ポート443」ではなく、
api.github.comとJA4フィンガープリントが見えます。 - 🎥 証拠をフリーズ — ローリングレコーダーを起動し、あらゆるインシデントをポータブルバンドルにフリーズ: それを説明するパケット に加えて 接続、DNS、ヘルス、アラート。バグ報告やポストモーテムに最適です。
- 🛡️ 設計上の安全 — セットアップ後、NetWatchは特権を落とし、Landlockファイルシステム許可リスト(Linux)に自身をロックします。敵対的トラフィックを解析するツールが、あなたのSSHキー、ブラウザプロファイル、
/etc/shadowを読むことはできません。 - 🪟 1画面にスケールダウン —
--liteは「ネットワークを何が使っていて、接続は大丈夫か」という質問に、6つのキーだけで1つの80×24画面で答えます。PiへのSSHセッションやtmuxスプリットにぴったり。1回のキー操作で、コレクタがすでにウォームな状態の本格的なフォレンジックビューに昇格します。
設定ファイルなし。セットアップ不要。必須フラグなし。
インストール```bash
brew install netwatch # macOS / Linux nix-shell -p netwatch # NixOS / Nix paru -S netwatch-tui-bin # Arch (prebuilt; netwatch-tui builds from source) scoop install netwatch # Windows cargo install netwatch-tui # anywhere with Rust
または[Releases](https://github.com/matthart1983/netwatch/releases/latest)からビルド済みバイナリを入手してください。
Nix、Arch、Scoopのパッケージはコミュニティのパッケージメンテナによって保守されています—ありがとうございます。パッケージングの問題はそちらへ報告してください。netwatchのバグはこちらへ報告してください。パッケージがリリースに遅れている場合は、[Repologyページ](https://repology.org/project/netwatch-tui/versions)に表示されます。
<details>
<summary><strong>全プラットフォーム & ソースからのビルド</strong></summary>
| プラットフォーム | ダウンロード |
|----------|----------|
| Linux (x86_64, Debian/Ubuntu) | [`netwatch-linux-x86_64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| Linux (aarch64, Debian/Ubuntu) | [`netwatch-linux-aarch64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| Linux (x86_64, 静的 — Arch/Fedora/Alpine/任意のディストリビューション) | [`netwatch-linux-x86_64-static.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| Linux (aarch64, 静的 — Arch/Fedora/Alpine/任意のディストリビューション) | [`netwatch-linux-aarch64-static.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| macOS (Intel) | [`netwatch-macos-x86_64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
| macOS (Apple Silicon) | [`netwatch-macos-aarch64.tar.gz`](https://github.com/matthart1983/netwatch/releases/latest) |
`-static` Linuxビルドはlibpcapをバンドルしており、ランタイム依存関係がありません—デフォルトのビルドで`libpcap.so.0.8: cannot open shared object file`と報告されるArch、Fedora、Alpine、または任意のディストリビューションではこれらを使用してください。
**ソースから:**```bash
git clone https://github.com/matthart1983/netwatch.git && cd netwatch
cargo build --release
前提条件: Rust 1.70+、libpcap(Linux では sudo apt install libpcap-dev、macOS には含まれています)。
クイックスタート```bash
netwatch # interface stats, connections, config — no privileges needed sudo netwatch # full mode — adds live packet capture + health probes
これだけです。タブの切り替えは `1`–`9`、ヘルプは `?`、終了は `q` です。ダッシュボードは5秒で役立ちます。以下は、さらに深く掘り下げたいときに参照してください。
> **Linux で `sudo` を使わない場合:** キャプチャ権限を一度付与して、通常のユーザーとして実行してください —
> `sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon+eip' "$(which netwatch)"`. アップグレードのたびに再実行してください ([詳細](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md#running-without-sudo-linux)).
### 60秒でTLSの復号を確認する
NetWatch を理解する最速の方法は、*あなたが*制御する TLS 1.3 セッションの平文を読み取る様子を見ることです:```bash
sudo netwatch # 1. launch, then open the Packets tab (4)
SSLKEYLOGFILE=/tmp/sslkeylog.txt curl https://example.com # 2. any client that exports its keys
# 3. filter the Packets tab with: decrypted:true
復号化されたアプリケーションデータはインラインで表示されます。キーログの取得漏れがあってもキャプチャは決して中断されません。そのレコードは単に不透明なままになります。(SSLKEYLOGFILE は Wireshark が使用するのと同じメカニズムです。これは あなたが 制御するトラフィックに対してのみ機能し、第三者やマルウェアのトラフィックには決して機能しません。)
ライブ TLS 1.3 セッションから平文を読み取る — ターミナル上で直接復号化されます。プロキシも中間者攻撃もありません。
60秒で外向きトラフィックの逸脱を検知する様子
上記デモのループを、3つのコマンドで:```bash sudo netwatch # 1. launch and open the Egress tab (0). Leave it a minute # while it learns; each process grows a list of destinations # with hostnames, autonomous systems and ports # 2. put the cursor on a process and press Enter — its observed # baseline becomes a rule in egress-policy.toml curl https://example.org # 3. same program, somewhere it has never been
新しい接続先は `✗ drift` の判定とアラートを伴って着地します。ブロックされたものはありません。重要なのは、あなたが *知らされた* ということです。
判定は意図的に二者択一ではありません:
| | |
|---|---|
| `✓ sni` / `✓ ip` | 宣言されたホスト名またはアドレスに一致 — 正確 |
| `~ asn` | AS(自律システム)のみで一致 — そのASが運用する*すべて*を許容するため、ハイパースケーラーでは事実上無制限 |
| `? ech` | 暗号化されたClientHello: 名前が設計上隠されているため、「判断不能」であり「悪い」ではありません |
| `✗ drift` | 許可リスト外 |
| `— no rule` | このプログラムは一度も宣言されていない — チェックは行われなかった |
| `✗ undeclared` | `strict = true` の下ではルールがない — ポリシーは完全であると主張しているため、*不在*自体が検出結果 |
ルールは完全一致のホスト名、`*.wildcards`、自律システム、CIDRブロック(`10.0.0.0/8`)、ポートを受け付けます。`strict = true` は、このリンターを「宣言したソフトウェアが不正な動作をしたら教えて」から「宣言していない何かが通信を始めたら教えて」へと変えるものです。これは実際の侵害が取る形です。
## 得られるもの
`1`〜`9` と `0` で切り替える10個のタブ:
| # | Tab | 説明 |
|---|-----|---------------|
| 1 | **Dashboard** | インターフェース、帯域幅グラフ、上位接続、ゲートウェイ/DNSヘルス、レイテンシーヒートマップ。5秒で役立ちます。 |
| 2 | **Connections** | すべてのソケットを、プロセス + PID、プロトコル、状態、GeoIP、レイテンシーのスパークラインとともに表示。 |
| 3 | **Interfaces** | インターフェースごとのIPv4/IPv6、MAC、MTU、RX/TX、エラー、ドロップ。 |
| 4 | **Packets** | 実際のL7デコード、TLS 1.3復号、JA4、フローごとのストリーム追跡、フィルター、PCAPエクスポートを備えたライブキャプチャ。 |
| 5 | **Stats** | プロトコル別バイト数 + TCPハンドシェイクタイミングのヒストグラム。 |
| 6 | **Topology** | マシン → ゲートウェイ → DNS → 上位ホストのASCIIマップ(traceroute付き)。 |
| 7 | **Timeline** | TCP状態で色分けされた接続タイムライン。セキュリティアラートはここに表示されます。 |
| 8 | **Processes** | プロセスごとの帯域幅ランキングを、ライブRX/TXと接続数とともに。 |
| 9 | **Insights** | *(オプトイン)* スナップショットをローカル/クラウドLLMに送り、平易な言葉での分析を行います。 |
| 0 | **Egress** | 各プロセスが通信する相手(ホスト名/AS/ポート)を学習し、そのベースラインをワンキーでポリシーに昇格させ、その後ドリフトを警告します。監視のみで、ブロックはしません。 |
Packetsタブはフォレンジックの中核です。深いプロトコルデコード、ライブTLS 1.3復号、JA4脅威ハンティング、Wiresharkスタイルの表示フィルター、インシデントキャプチャを備えています。**[完全な機能リファレンスはこちら →](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md)**
### ライトビュー
10個のタブは、オペレーター向けの計器です。「*ネットワークを使っているのは何か、そして接続は大丈夫か?*」という質問だけがしたい場合 — 1台のマシン、PiへのSSHセッション、tmuxの分割 — には `--lite` があります:```bash
netwatch --lite # one screen, fits 80×24
1つの画面、6つのキー。ライブなスループット、到達可能性、そして誰が通信しているか — 任意の行をその場で展開し、入力しながらフィルタリング。
すべてを1つの画面に表示: ライブスループットチャート、ゲートウェイ/DNS/インターネット到達可能性、プロセス/ホスト別のトップトーカー。6つのキー — q 終了、p 一時停止、/ フィルタ、↵ トーカーを展開、L フルビューに戻る、? ヘルプ。
どちらのビューからでも L を押すと切り替えられます。両者は同じコレクタを共有しているため、「何かおかしい」という状態から、10タブのフォレンジックビュー全体への移行はキー1回分の操作で済みます。再起動も不要、履歴も失われず、キャプチャも実行中のままです。
高密度ビュー
もう一つの方向性: 大きなターミナルがあり、すべてを同時に確認したい場合は、--view dense を使うと4つのボックスで画面が埋め尽くされ、装飾が一切なくなります — ヘッダーバーもメニューバーもステータスバーもありません。識別情報、ソート状態、ページ範囲、すべてのキーバインドがボックスの境界内に表示されるため、すべての行がデータを保持します。最低 130×44 が必要で、与えられたサイズに応じて拡大します: 横幅が広いとプロットに保持される履歴が増え、完全なホスト名を表示する余裕が生まれます。高さがあると、より多くのインターフェースと接続を表示できます。```bash
netwatch --view dense # four boxes, needs 130×44
これがこのREADMEの冒頭にある画面です。特徴的な要素は**ミラーリングされた二重グラフ**です。ダウンロードは中央の時間軸から上に伸び、アップロードは同じ軸から下に伸びます。トラフィックの対称性は、数値を読まなくても認識できる形になります。ダウンロードバーストは線の上の崖、バックアップジョブは線の下の崖です。両方の半分は1文字セルあたり2サンプルの点字で描画され、各セルはどの系列に属するかではなく、**グラフ内の高さ**によって色付けされるため、軸と照らし合わせる前にスパイクの深刻度がわかります。
スループットの色はクール→ブライトに変化します。高い帯域幅は*悪い*ことではなく*忙しい*ことだからです。バックアップ中の飽和リンクは正常に動作しています。高さが本当に悪いことを意味する境界値(リンク飽和、ホップごとのレイテンシ予算)だけが緑→黄→赤の処理を受け、そのメーターはバー上の位置に応じて色分けされるため、到達する前に赤いゾーンが見えます。
グラフの下には、60秒スパークライン付きのインターフェース別レート、4ホップのレイテンシ予算(ゲートウェイ、DNS、インターネット、そして実際に通信している最も遅いピア)、そして選択した行の詳細が同じボックスの上部に引き上げられて表示される接続テーブルがあります。新しい画面も戻るボタンもありません。詳細行にはカーネルTCP状態 — `cwnd`、`ssthresh`、`mss`、`rwnd` — が含まれ、カーネルから直接読み取られます。Linuxではnetlink上の`inet_diag`、macOSでは`net.inet.tcp.pcblist64` sysctlです。2つのカーネルは単位について見解が異なり(Linuxはセグメントを数え、BSDはバイトを数える)、macOSの値はMSSに対して正規化されるため、この列は両方で同じ意味になります。Windowsは`GetPerTcpConnectionEStats`が実装されるまで`--`を表示します。
`V`は`full → lite → dense`を循環します。または**Settings → View**で一度設定しておくこともできます。130×44未満では、Liteが対象とする同じ80×24グリッドにフォールバックします(これもその領域を埋めます)。横方向にスクロールすることはありません。
## 詳細ガイド
| ガイド | 内容 |
|-------|--------------|
| **[機能リファレンス](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md)** | すべてのキーバインディング、表示フィルタ言語、プロトコルデコーダ一覧、テーマ、設定オプション。 |
| **[TLS 1.3の復号](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md#tls-13-decryption)** | `SSLKEYLOGFILE`による復号の仕組み、対応する暗号スイート、読み取れるものと読み取れないもの。 |
| **[JA4による脅威ハンティング](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md#threat-hunting-with-ja4)** | クライアントのフィンガープリンティングとフロー間のピボット。 |
| **[セキュリティとLandlockサンドボックス](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md#security--forensics)** | 脅威モデル、ケーパビリティの破棄、ファイルシステムの許可リスト。 |
| **[エグレスポリシーのリンティング](https://github.com/matthart1983/netwatch/blob/HEAD/docs/egress-linter-plan.md)** | observe → promote → warnモデル、ルール言語、`strict`モード、NDJSONエクスポートスキーマ。 |
| **[フライトレコーダー](https://github.com/matthart1983/netwatch/blob/HEAD/docs/REFERENCE.md#flight-recorder)** | アーミング、フリーズ、インシデントバンドルの内容。 |
| **[AIインサイト](https://github.com/matthart1983/netwatch/blob/HEAD/docs/INSIGHTS.md)** | オプションのローカル/クラウドLLM分析(デフォルトではオフ)。 |
## 仕組み```
Raw bytes → Ethernet → IPv4/IPv6/ARP → TCP/UDP/ICMP → L7 decoders
↓
Per-flow stream tracking · Handshake timing
TLS 1.3 decryption · JA4 · Threat detection
| コレクタ | macOS | Linux |
|---|---|---|
| 接続 | lsof + PKTAP | /proc/net/tcp + eBPF kprobe |
| パケット | libpcap (BPF) | libpcap |
| プロセス帰属 | PKTAP | lsof/ss ポーリング、任意の eBPF kprobe オーバーレイ付き |
すべてがグレースフルに劣化します: 昇格した特権が必要な機能は明確なメッセージを表示してフォールバックし、クラッシュすることはありません。完全なアーキテクチャノートは WIKI.md にあります。
関連
兄弟プロジェクト: SysWatch (システム) と DiskWatch (ディスク) — 同じ UI、異なる監視対象。ESSH — 同じ TUI デザイン感覚を持つ純 Rust 製 SSH クライアント; NetWatch が監視する場所に接続します。
NetWatch Cloud — NetWatch を実行しているサーバー群向けのホスト型フリート監視。各 Linux ホスト上の小さな Rust エージェント、リアルタイムダッシュボード、そしてレイテンシ、パケットロス、ホストのオフラインに関するメール + Slack アラート。成長中は無料です。 agent、SDK、dashboard は MIT ライセンスです。ホスト型バックエンドはプロプライエタリです。
謝辞
パッケージ作成者。 NetWatch は homebrew-core、nixpkgs、AUR、そして Scoop メインバケットに収録されています — そして、私はそのどれもパッケージ化していません。これらはすべて、このツールが役立つと感じ、頼まれもしないのに作業を行い、その後も最新の状態に保ってきた人々によって行われたものです。Scoop のエントリは通常、タグが付けられてから数時間以内にリリースに追従してきました。
| Dominiquini | netwatch-tui AUR で、2026年3月から |
| kemelzaidan | netwatch-tui-bin AUR で |
| tomasrivera | netwatch nixpkgs 内 |
| scillidan | netwatch Scoop メインバケット内、v0.15.3 以降 |
| Homebrew maintainers | フォーミュラを core に取り込んでくれたこと、およびそれ以降すべてのリリースを追跡してきたボットに対して |
パッケージングは、壊れたときだけ注目される報われない仕事です。これらのいずれかを通じて NetWatch をインストールするなら、感謝すべきは私ではなく彼らです。
コントリビューター。 @lamchau、@fdncred、@PeteE がパッチを送ってくれました。ありがとうございます — 見知らぬ人からのプルリクエストは、このようなプロジェクトに起こる最高の出来事です。
そして、実際の再現手順付きで issue を開いてくれた人、設計上の決定に異議を唱えてくれた人、自分のターミナルで出力が間違っていると教えてくれた人、すべての人へ: このプロジェクトはそうしたフィードバックループの上に成り立っています。
コントリビューティング
質問、アイデア、バグ報告は GitHub Discussions と Issues で歓迎します。コーディング規約は CONTRIBUTING.md、アーキテクチャガイドは WIKI.md を参照してください。
ライセンス
MIT