Windows標準ツール pktmon でキャプチャして Wireshark で確認する
Windows に標準で実装されたパケットキャプチャツール pktmon を使ってネットワークインターフェイス上を通過するネットワークパケットをキャプチャし Wireshark で扱ってみます。
Wireshark などのサードパーティアプリをインストール出来ない環境では、 Microsoft が用意している Microsoft Network Monitor を使ってパケットを解析することができます。
pktmon の使い方
管理者権限でコマンドプロンプトを起動します。
※ pktmon は、バージョンによって引数が大きく異なっているので 「 pktmon help 」で確認したほうがよさそうです。
ここでの引数を確認すると、次のように表示されました。
>pktmon help
pktmon <command> [オプション | ヘルプ]
高度なパケット キャプチャとイベント収集。
コマンド
filter パケット フィルターを管理します。
list パケット処理コンポーネントを一覧表示します。
start パケット キャプチャとイベント収集を開始します。
stop データ収集を停止します。
status 現在の状態を照会します。
unload PktMon ドライバーをアンロードします。
counters 現在のパケット カウンターを表示します。
reset パケット カウンターをゼロにリセットします。
etl2txt ログ ファイルをテキスト形式に変換します。
etl2pcap ログ ファイルを pcapng 形式に変換します。
hex2pkt 16 進数形式のパケットをデコードします。
help 特定のコマンドのヘルプ テキストを表示します。
例: pktmon start help
各コマンドの使い方を確認したい場合は、「 pktmon list help 」といった形で「コマンド + help」 とすることで確認することができます。
まずは、ポート 443 番だけパケットキャプチャしたいとします。この場合、監視したい通信だけを抽出したいので、次のコマンドを実行してフィルターを追加します。
>pktmon filter add -p 443
フィルターが追加されました。
パケットのキャプチャを開始するには、 start コマンドを実行します。
>pktmon start --capture --pkt-size 0
ロガー パラメーター:
ロガー名: PktMon
ログ モード: 循環
ログ ファイル: C:\WINDOWS\system32\PktMon.etl
最大ファイル サイズ: 512 MB
使用されているメモリ: 192 MB
収集されたデータ:
パケット カウンター、パケット キャプチャ
キャプチャの種類:
すべてのパケット
監視対象コンポーネント:
すべて
パケット フィルター:
# 名前 ポート
- -- ---
1 <empty> 443
パケットキャプチャが開始され「C:\WINDOWS\system32\PktMon.etl」にキャプチャされた情報が生成されます。
この間に確認したい通信を発生させておきます。必要な通信が終了したら 「 stop 」コマンドを実行しキャプチャを停止します。
>pktmon stop
ログをフラッシュしています...
メタデータを結合しています...
ログ ファイル: C:\WINDOWS\system32\PktMon.etl (イベントは失われていません)
今回は、取得した情報を Wireshark で確認したいので 「 etl2pcap 」コマンドを使用して pcapng 形式に変換します。
>pktmon etl2pcap PktMon.etl
処理しています...
パケットの合計: 316
パケットのドロップ カウント: 0
書式設定されたパケット: 316
書式設定されたファイル: PktMon.pcapng
以上で pktmon でキャプチャしたパケットが Wireshark で確認できるようになりました。
追加したフィルターは、次のコマンドで削除できます。
>pktmon filter remove
インターフェイスを指定する
上記の手順の場合、すべてのインターフェイスのパケットが取得されてしまいます。目的によっては、情報量が多すぎるため見づらくなることもあります。
そんな時は、指定したインターフェイスの通信のみキャプチャするようにします。
まず、指定したいインタフェースの ID を調べます。
>pktmon list
ネットワーク アダプター:
ID MAC アドレス 名前
-- -------- --
9 80-FA-5B-A5-D1-25 Realtek PCIe GbE Family Controller
13 0A-00-27-00-00-0F VirtualBox Host-Only Ethernet Adapter
10 DC-1B-A1-A0-B8-7B Bluetooth Device (Personal Area Network)
有線 LAN を指定したい場合、 ID が 9 になっていますので 「 –comp 」という引数に ID : 9 を指定します。
>pktmon start --capture --comp 9 --pkt-size 0
ロガー パラメーター:
ロガー名: PktMon
ログ モード: 循環
ログ ファイル: C:\WINDOWS\system32\PktMon.etl
最大ファイル サイズ: 512 MB
使用されているメモリ: 192 MB
収集されたデータ:
パケット カウンター、パケット キャプチャ
キャプチャの種類:
すべてのパケット
監視対象コンポーネント:
ID ドライバー 名前
-- ----- --
9 rt640x64.sys Realtek PCIe GbE Family Controller
パケット フィルター:
# 名前 ポート
- -- ---
1 <empty> 443
こんな感じで、指定したインターフェイスの通信のみキャプチャできるようになりました。
pktmon は、 filter と組み合わせることでより通信内容を絞ってキャプチャできるようになります。