
network-monitor v0.7.5
RustとGTK4で構築されたリアルタイムネットワーク接続監視ツール。モダンなグラフィカルインターフェースで、アクティブな接続とライブI/O統計を表示します。
Network Monitor

RustとGTK4で構築されたリアルタイムのネットワーク接続監視ツール。現代的でグラフィカルなインターフェースで、アクティブな接続とライブのI/O統計を表示します。
機能
- リアルタイム監視: アクティブなネットワーク接続を継続的に監視
- I/O統計: 各接続のリアルタイムのアップロード/ダウンロード速度を表示
- プロセス特定: 各接続に関連付けられたプログラムとPIDを表示
- モダンなGTK4 UI: Libadwaitaスタイルのクリーンでレスポンシブなグラフィカルインターフェース
- ターミナルUI (TUI): 同じ監視機能を備えた対話型ターミナルインターフェース
- アドレス解決: 一般的なアドレスを簡略化(localhost、any、mDNS)
- 接続フィルタリング: localhost接続をフィルタリングして出力をクリーンに保つ
- GNOME統合: ドックのピン留めとデスクトップ統合に適したWMクラスをサポート
- デュアルインストール: ユーザーローカルとシステム全体の両方のインストールをサポート
- 堅牢なエラー処理: 明確なセットアップガイダンスを備えた包括的なエラーリカバリ
- パフォーマンス最適化: プロセスキャッシュとレイアウトキャッシュによるレスポンシブ性向上
要件
- Rust 1.70+ (2021 edition)
- GTK4開発ライブラリ
- Libadwaita開発ライブラリ
/procファイルシステムを備えたLinuxシステム- Linux 5.8+(eBPFの詳細なケイパビリティ用)
- Nightly Rustと
bpf-linker(eBPFコンパイル用)
Ubuntu/Debianへのインストール:
sudo apt update
sudo apt install libgtk-4-dev libadwaita-1-dev
Fedoraへのインストール:
sudo dnf install gtk4-devel libadwaita-devel
インストール
方法1: デスクトップ統合付きでソースからインストール
- リポジトリをクローン:
git clone <repository-url>
cd network-monitor
- ローカルにインストール(sudo不要):
./scripts/install.sh
- またはシステム全体にインストール(sudoが必要):
sudo ./scripts/install.sh
インストールスクリプトは以下を行います:
- GTK4とTUIの両方のバイナリをビルド(ローカルはデバッグ、システム全体はリリース)
- バイナリを
~/.local/bin/(ローカル)または/usr/local/bin/(システム全体)にインストール - GNOMEドックのピン留めに適したWMクラスを持つデスクトップファイルをインストール
- アイコンを適切なアイコンディレクトリにインストール
- アイコンキャッシュとデスクトップデータベースを更新
- アプリケーションがGNOMEドック/ダッシュボードにピン留めできることを保証
方法2: 直接ビルドして実行
- リポジトリをクローン:
git clone <repository-url>
cd network-monitor
- ビルドして実行:
cargo run
またはリリースモードでビルド:
cargo build --release
./target/release/network-monitor
方法3: TUI版をビルドして実行
- リポジトリをクローン:
git clone <repository-url>
cd network-monitor
- TUIをビルドして実行:
cargo build --bin nmt
./target/debug/nmt
またはリリースモードでビルド:
cargo build --release --bin nmt
./target/release/nmt
アンインストール
インストール済みバージョンの削除
ローカルインストールの削除:
./scripts/uninstall.sh
システム全体の削除(sudoが必要):
sudo ./scripts/uninstall.sh
アンインストールスクリプトは、バイナリ、デスクトップファイル、アイコンを適切な場所から削除し、関連するすべてのキャッシュを更新します。
使用方法
GTK4グラフィカルインターフェース
Network Monitorアプリケーションを起動:
cargo run
アプリケーションはGTK4ウィンドウを開き、以下を表示します:
- プロセス(ID): 正確なソケットからプロセスへのマッピングによるプロセス名とPID
- プロトコル: TCP/UDPプロトコル
- 送信元: ローカルエンドポイント(読み取り可能な形式に解決)
- 宛先: リモートエンドポイント(読み取り可能な形式に解決)
- ステータス: 接続状態(ESTABLISHED、LISTENなど)
- TX: プロセスのI/O統計から計算されたアップロード速度
- RX: プロセスのI/O統計から計算されたダウンロード速度
- パス:
/proc/[pid]/cmdlineからの完全なコマンドパスと引数
ターミナルインターフェース (TUI)

ターミナルインターフェースを起動:
cargo run --bin nmt
TUIは、対話型ターミナルインターフェースで同じ監視機能を提供します:
キー操作:
q- アプリケーションを終了r- 接続を手動で更新a- 自動更新を切り替え(2秒間隔)↑/↓- 接続間を移動←/→- テーブルを水平スクロール1-8- 列で並べ替え(プロセス(ID)、プロトコル、送信元、宛先、ステータス、TX、RX、パス)
機能:
- 自動更新によるリアルタイムの接続監視
- 視覚的なインジケーター付きのソート可能な列
- 広いテーブルのための水平スクロール
- スマートな列幅調整 - 最後の列が残りの幅をすべて使用
- 色分けされたプロトコル(TCP/TCP6は緑、UDP/UDP6は黄)
- アクティブな接続のハイライト
- プロセスとPID情報
- ライブのI/O速度表示
- GTK4版と同じ列順で一貫性を維持
アドレス解決
一般的なアドレスは読みやすさのために簡略化されます:
0.0.0.0:*または*:*→ANY127.0.0.1:*または[::1]:*→LOCALHOST224.0.0.251:*→MDNS
仕組み
eBPFバックエンド(イベント駆動)
このアプリは、/proc/netのポーリングではなく、カーネルレベルのkprobe(tcp_v4_connect、tcp_v6_connect、tcp_close、
inet_csk_accept)を使用します。これにより以下が提供されます:
- イベント駆動: サブミリ秒のイベント配信、ポーリングオーバーヘッドなし(CPU使用率約1〜3%)
- 直接PID: プローブポイントで
bpf_get_current_pid_tgid()により取得。inodeスキャン不要 - 短命な接続: ポーリング間隔で見逃すことがない
eBPFモード
eBPFバックエンドは、デフォルトの/proc/netポーリング方式と比較して、イベント駆動の接続監視を低オーバーヘッドかつリアルタイム
で提供します。ポーリングでは見逃す可能性のある短命な接続
も捕捉できます。
前提条件:
rustup toolchain install nightly
cargo install bpf-linker
ビルドして実行:
cargo build
通常ユーザーとして実行(カーネル5.8+が必要):
必要なLinuxケイパビリティをバイナリに一度付与します:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/network-monitor
./target/debug/network-monitor
またはTUI版の場合:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/debug/nmt
./target/debug/nmt
リリースビルドの場合は、パスを適宜調整してください:
sudo setcap cap_bpf,cap_net_admin,cap_perfmon+ep target/release/network-monitor
eBPFが利用できない場合(ケイパビリティ不足または サポートされていないカーネル)、アプリはセットアップメッセージを表示して終了します。
アーキテクチャ
- GTK4: モダンなクロスプラットフォームGUIフレームワーク
- Libadwaita: GNOMEスタイルのUIコンポーネント
- Tokio: 並行処理のための非同期ランタイム
- Aya + eBPF: リアルタイムイベントのためのkprobeを使用したカーネルレベルの接続トレース
- 直接PID: プローブポイントでの
bpf_get_current_pid_tgid()によるプロセス特定 - システムコール: I/O統計のための
/proc/[pid]/ioの直接読み取り - エラー処理:
thiserrorによる優雅なリカバリを備えた包括的なエラータイプ - パフォーマンスキャッシュ: 最適なパフォーマンスのためのUIレイアウトキャッシュ
Linuxパッケージ
寄付
このプロジェクトが役に立つと思われたなら、開発を支援するための寄付をご検討ください。
- Monero:
88LyqYXn4LdCVDtPWKuton9hJwbo8ZduNEGuARHGdeSJ79BBYWGpMQR8VGWxGDKtTLLM6E9MJm8RvW9VMUgCcSXu19L9FSv - Bitcoin:
bc1q6mh77hfv8x8pa0clzskw6ndysujmr78j6se025
ライセンス
このプロジェクトはオープンソースです。詳細はLICENSEファイルを参照してください。