🎉

特定の通信先との通信量をWireSharkを使って測定する

2022/10/12に公開

はじめに

特定の通信先(IP、ポート)との通信データ量を測定したいとなったとき、意外とやり方が出てこなかったのでメモ。
具体的には、WireSharkを使ってパケットをダンプし対象の通信をフィルタすることで通信量を測定する。
パケットダンプするので長期間の測定には向いていない。あくまで短時間の測定(このAPは1回の操作でどれくらい通信してるの?レベル)向きの内容。

やりたいこと

IPとポートを指定した特定の通信先との通信データ量を測定したい。

環境

  • Windows 10 64-bit
  • WireShark 4.0.0

手順

準備

WireSharkのインストール

パケットダンプ等、今回の通信量測定に用いるWireSharkをインストールする。

まず、以下のURLからWireSharkのインストーラをダウンロードする。

Download Wireshark

筆者の環境はWindowsなので、「Windows Installer (64-bit)」を選択した。
この時点でのStable Releaseは4.0.0だったので、4.0.0を利用。

ダウンロードしたインストーラをダブルクリックして起動し、インストールを進めていく。
全てデフォルトで進めてOK。

途中、以下のように「Npcap」のインストール画面が表示されるので、
これも全てデフォルトで進めていく。

終了したら、「Next」→「Finish」ボタンをクリックする。
すると、WireSharkのインストールが再開する。

WireSharkのインストールも終了したら、「Next」→「Finish」でインストールを終了する。

WireSharkの起動

Windowsメニューから「WireShark」を探してクリックする。

起動すると、以下のようにインターフェースを選択する画面が表示される。
通信したいパケットが流れるであろうインターフェースをダブルクリックする。

すると早速、以下の画面のように指定したインターフェースを流れる全てのパケットがキャプチャされ始める。
今は準備段階なので、左上の停止ボタンをクリックしてキャプチャを停止しておく。

測定

測定の流れを先に示すと以下のようになる。

  1. WireSharkでキャプチャを開始
  2. 測定対象としたい通信を行う
  3. 通信が完了したら、WireSharkでキャプチャを停止
  4. キャプチャしたパケットから対象の通信を抽出(フィルタ)して、通信量を算出

WireSharkでキャプチャを開始

左上のサメの背びれのようなマークをクリックする。

すると、以下のようなダイアログが表示されるので、「保存せずに続ける」をクリックする。

測定対象としたい通信を行う

測定対象としたい通信を行う。
ここではサンプルとして、LAN内のNASに対して先ほどダウンロードしたWireSharkのインストーラをコピーする通信を行った。

通信が完了したら、WireSharkでキャプチャを停止

通信が完了したら、WireSharkでキャプチャを停止する。
左上の停止ボタンをクリックする。

キャプチャしたパケットから対象の通信を抽出(フィルタ)して、通信量を算出

ここまでくると、WireSharkの中にパケットがキャプチャされている状態となっている。
キャプチャされたパケットは選択したインターフェース(この例だとWi-Fi)を通る通信全てなので、
ここから測定対象としたい通信のみをフィルタしていく。

まず、上部の「統計」→「終端」をクリックする。

表示された画面のタブで「TCP」をクリックして、対象の通信先を絞り込む。
ここだと、
アドレス:192.168.100.253
ポート:445
が対象の通信先である。

対象の通信先の行を右クリック→「フィルタとして適用」→「選択済み」をクリックする。
そして、「閉じる」をクリックして元のキャプチャの画面に戻る。

すると、以下のフィルタ入力欄に通信先のIPなどを含むフィルタ式が入力された状態となっているはず。

確認したら、「統計」→「対話」をクリックする。

「TCP」タブを選択すると、IPアドレス、ポートごとに通信量が送信、受信ごとに表示される。

整理すると、以下のような結果となった。

通信種別 通信量
送受信(全体) 157.001MB
送信 78.091MB
受信 78.909MB

まとめ

以上の方法で、特定の通信先との通信量を簡単に測定することができた。
ただし、ファイルコピーしただけのつもりだったので送信の通信がほとんどと思いきや、受信でも同じだけの通信が発生していることがわかった。

キャプチャしたパケットを確認すると、確かに書き込み(Write Request)後に読み込み(Read Request)しているようだったので、なぜこのような挙動になるのか別途調査したい。

Discussion