Ubuntu Weekly Recipe

第784回Sniffnetやbandwhichでネットワークの流量と宛先を簡単に確認する

本連載を読むような人なら、インターネットはある種の生命線になっていることでしょう。普段から様々なネットワーク通信ソフトウェアにお世話になっているはずです。ある日突然、通信が遅くなった、何かが負荷をかけているかもしれない、今回はそんな状況を気軽に調べられるRust製のGUIアプリケーション「Sniffnet」とCLIツール「bandwhich」について紹介します。

Rust製の高速なネットワークモニタリングツールであるSniffnet

ネットワークに接続されたコンピューター上のソフトウェアは、日々何らかのマシンと通信を行っていることが一般的です。特にデスクトップマシンなら、ソフトウェアのアップデートやDHCPによるアドレスの確保、arp/neighに対する応答などなど、ユーザーが「何もしていなくても⁠⁠、なにがしかの通信は行われています。

これはコンピューターでの作業中も同じで、何気なくブラウジングしている時にもあるページを開いた途端、バックグラウンドでばばばばーっと通信が始まります。ただコンテンツを表示するだけでなく、広告を表示したり、その広告が動画だったりと想像以上に通信を行っていますし、さらにそのアクセス先は国外にも及んでいます。

SniffnetはRust製のネットワークモニタリングツールです。GUIアプリケーションであるため、デスクトップからも気軽に閲覧できます。何かネットワークが重いなあと思ったタイミングで起動し、トラフィックの様子を眺めてみるというのが、主な使い方です。

具体的には、次の機能を主に備えています。これはバージョン1.2.2時点での情報です。

  • トラフィック量のリアルタイムなグラフ表示
  • 通信先ホストの通信量によるランキング
  • 通信プロトコルの通信量によるランキング
  • 宛先ホストのポート番号やプロトコルさらには国情報の表示
  • 特定の宛先ホストを「お気に入り」に追加してフィルタリング
  • プロトコルや国などでのフィルタリング
  • 通信ログのファイルへの保存
  • 通信パケット数・バイト数がしきい値を超えたら通知する機能
  • 「お気に入り」のホストとの通信を開始したら通知する機能
  • テーマの切り替え
  • 多言語対応(日本語は未対応)

あくまで簡易的なモニタリングにとどめており、そこまで柔軟にカスタマイズできるわけではありませんが、それ故にUIは初心者にも使いやすくなっています。とりあえず「なんかたくさん通信しているっぽい」という状況を確認するためには十分でしょう。ちなみに日本語については先月対応されたばかりであり、1.3.0以降で反映される見込みです。

さっそくインストールしてみましょう。Sniffnetは残念ながらaptリポジトリにもsnapリポジトリにもパッケージは用意されていません。しかしながらプロジェクトのGitHubページでは、debパッケージを配布しているため、それをインストールすれば良いだけです。

SniffnetのリリースページからSniffnet_Linux_DEB_amd64.debをダウンロードしてください。Raspberry Piなどで動かすならSniffnet_Linux_DEB_arm64.debなどを使うと良いでしょう。ダウンロードが完了したら端末を開いてインストールします。

$ sudo apt install ./Sniffnet_Linux_DEB_amd64.deb
$ sniffnet -v
sniffnet 1.2.2
$ sniffnet -h
Application to comfortably monitor your Internet traffic
Usage: sniffnet [OPTIONS]
Options:
        -h, --help      Print help
        -v, --version   Print version info
(Run without options to start the app)

これだけでインストールは完了です。ちなみに現在のSniffnetはCLIが存在せず、せいぜいバージョンとヘルプを表示できるくらいです。よってSuperキーでDashから「sniffnet」を検索して起動しましょう。

図1 Sniffnetの起動画面。監視したいインターフェースとプロトコル等を選択した上で「ロケット」ボタンを押すとモニタリング開始
図1

モニタリングを開始してから数秒の間、最低限の情報収集のためのパケットのキャプチャ期間が存在します。少し待つと次のようなトラフィック情報が表示されます。

図2 Sniffnetのメイン画面であるOverviewタブ
図2

左上がキャプチャ情報、右上がトラフィックの流量グラフ、左下が対向のネットワークホストごとの通信量ランキング、右下がプロトコルごとの通信量ランキングです。ネットワークホストのランキングは対向ホストのアドレスと流量だけでなく、MaxMind DBを利用したホストの推定場所の国旗を表示しています。左端の星マークをクリックすることで特定のホストを「お気に入り」に追加できます。

Inspectタブでは、送受信パケットを宛先ごとにリアルタイムで表示しています。グラフと同じく青色が外向きのパケットで、茶色が内向きのパケットです。

図3 Inspectタブではパケットのやりとりを文字列として表示する
図3

表示するパケットはいくつかの値でフィルタリング可能です。たとえばOverviewタブでお気に入りにしたホストのみを表示することができます。ちなみに右端のダウンロードボタンを押すことで、表示中のログをファイルに落とすことが可能です。これはpcapフォーマットではなく、テキストベースのログとなります。将来的にpcapフォーマットのダウンロードも予定しているようです。

Notificationsタブは通知領域です。ただし初期状態だと何も設定されていません。

図4 Notificationsタブでは事前に設定した条件を満たした時の通知が表示される
図4

通知の条件を設定してみましょう。Notificationsタブか画面右上の設定アイコンを押すと、設定画面が表示されます。設定画面のNotificationsでは、3種類の通知条件を設定できます。

図5 通知条件の設定
図5

一番上から、次の内容になっています。

  • 1秒あたりパケット数が指定した数を超えたら通知
  • 1秒あたりのバイト数が指定した値を超えたら通知
  • 「お気に入り」のホストと新しいデータのやり取りを開始したら通知

通知の条件については、これら設定項目の「チェックマーク」を入れて有効化することで初めて設定できます。また設定値は即座に反映されます。たとえばThresholdを書き換えようととりあえず0にすると、新しい値を入力するまでは1秒に1回、バックグラウンドで通知が届き続けます。ちなみに3種類の通知ごとに異なるサウンドを変更できたりもします。

図6 テーマの変更
図6

Sniffnetのテーマは少し渋い色合いですが、もっとファンキーな色合いにも変更可能です。なぜかグラディエーションにも対応しています。このあたりはv1.2.2のリリースノートに添付された動画を参照するとイメージが掴めるはずです。

図7 Languageで表示言語を変更できる。まだ日本語はないが将来は追加されるはず
図7

説明内容の短さからもわかるように、非常にシンプルな作りになっています。それ故にちょっと確認したい程度であれば何も悩むことなく利用できるため、カスタマイズ性が高いものの複雑な設定を持ったツールを使いこなすことがしんどくなってきた年齢層にとっては、大変ありがたいことでしょう。

CLI向けなら多士済済

ちなみにCLI向けは、昔からたくさん存在します。たとえばifstatiftopbmoniptraf-ngなど様々です。第697回のAMD Ryzen 7 5800Xでまなぶ、Ubuntuにおけるシステムの動作確認でも紹介した、glancesもネットワークモニタリング機能を備えています。もちろんWiresharkのTUI版のtsharkもより原始的で強力なモニタリングツールと言えるでしょう[1]

今回はせっかくなので、Sniffnetと同じRust製のCLIツールであるbandwhichを紹介しましょう。bandwhichは残念ながらaptからはインストールできませんが、snapからなら比較的新しいバージョンをインストール可能です。

$ sudo snap install bandwhich
$ bandwhich -h
Usage: bandwhich [OPTIONS]

Options:
  -i, --interface <INTERFACE>    The network interface to listen on, eg. eth0
  -r, --raw                      Machine friendlier output
  -n, --no-resolve               Do not attempt to resolve IPs to their hostnames
  -p, --processes                Show processes table only
  -c, --connections              Show connections table only
  -a, --addresses                Show remote addresses table only
  -t, --total-utilization        Show total (cumulative) usages
  -s, --show-dns                 Show DNS queries
  -d, --dns-server <DNS_SERVER>  A dns server ip to use instead of the system default
  -h, --help                     Print help

bandwhichは起動したら表示するものを切り替えるかTABキー⁠⁠、表示の更新を一回止めるSPACEキー)だけでほぼ何も操作できません。その代わり、コマンドラインオプションでいくつかコントロールは可能です。

実際にbandwhichを起動してみましょう。bandwhichの場合は、パケットキャプチャのために管理者権限が必要になります。-i INTERFACEで特定のインターフェースを、そうでない場合は全部のインターフェースを見に行きます。

$ sudo bandwhich
図8 左側にプロセスごとの帯域、右側に相手先ごとの帯域が表示されるはずだが、プロセス側は<UNKNOWN>となってしまっている
図8

プロセス名が上手く取れていないようです。これはsnap版の制約です。一応依存関係がないため、/snap/bandwhich/current/bin/bandwhichと実行して、隔離環境の外から実行することも可能です。これによりプロセス名も取得できます。

図9sudo /snap/bandwhich/current/bin/bandwhich」で実行した様子。プロセス名も表示されている
図9
図10 TABキーで表示するものを切り替えられる。3種類のペインを順番に入れ替えているだけ
図10

Sniffnetに比べるとフィルタリングやアラートもなく、さらにシンプルなUIとなっています。ちなみにプロジェクトとしては、積極的な貢献者を募集中というステータスのようです。

おすすめ記事

記事・ニュース一覧