はじめに
- Windows 210 October 2018 Updateというリリースで,ひっそりとWindows 10にパケットキャプチャソフトを導入している.
- 従来は,Microsoft Network MonitorやWiresharkをインストールする必要があったけれど,これが内蔵されているというのは,少々問題があるかもしれない.
- 今回用いるマシンは,Windows 10の2020 Mayアップデートを適用したもので,pktmonというLANアナライザおよびパケットドロップをレポートするプログラムになる.
- このpktmonについては,現時点(2020/05/24)では,Microsoftの公式サイト上でドキュメントはない.
無邪気に実行してみる
- コマンドプロンプトで,pktmonを実行してみる.
Microsoft Windows [Version 10.0.18363.836]
(c) 2019 Microsoft Corporation. All rights reserved.
C:\Users\ujpadmin>pktmon🆑
pktmon { filter | comp | reset | start | stop } [OPTIONS | help]
内部パケット伝達レポートとパケット ドロップ レポートを監視します。
コマンド
filter パケット フィルターを管理します。
comp 登録されたコンポーネントを管理します。
reset カウンターをゼロにリセットします。
start パケットの監視を開始します。
stop 監視を停止します。
format ログ ファイルをテキストに変換します。
unload PktMon ドライバーをアンロードします。
help
コマンドのヘルプ テキストを表示します。
C:\Users\ujpadmin
- ヘルプが表示された.
- まずは,現在設定を確認してみる.
C:\Users\ujpadmin> pktmon filter list🆑
PktMon ドライバー サービスを開始できませんでした: アクセスが拒否されました。🈁
C:\Users\ujpadmin>
- 一般ユーザ権限では,実行できないので,管理者権限でコマンドプロンプトを実行する.
現在設定を確認する
C:\Windows\system32>pktmon filter help🆑
pktmon filter { list | add | remove } [OPTIONS | help]
コマンド
list アクティブなパケット フィルターを表示します。
add 報告対象のパケットを制御するフィルターを追加します。
remove すべてのフィルターを削除します。
help
コマンドのヘルプ テキストを表示します。
C:\Windows\system32>
- listを使って,現在のパケットフィルタ状態を確認する.
Microsoft Windows [Version 10.0.18363.836]
(c) 2019 Microsoft Corporation. All rights reserved.
C:\Windows\system32>pktmon filter list🆑
パケット フィルターはありません。
C:\Windows\system32>
パケットフィルタ設定を追加する addオプション
- Webアクセスで用いる,HTTP(80番)とHTTPS(443番)ポートをパケットキャプチャする設定を追加する.
C:\Windows\system32>pktmon filter add help🆑
pktmon filter add <名前> [-m mac [mac2]] [-v vlan] [-d { IPv4 | IPv6 | number }]
[-t { TCP [flags...] | UDP | ICMP | ICMPv6 | number }]
[-i ip [ip2]] [-p port [port2]] [-e [port]]
報告対象のパケットを制御するフィルターを追加します。パケットを
報告対象にするには、パケットが少なくとも 1 つのフィルターの、指定されたすべての条件に一致する必要があります。
一度に最大 8 つのフィルターをアクティブにすることができます。
name
フィルターの名前または説明 (オプション)。
イーサネット フレーム
-m, --mac[-address]
ソースまたは宛先の MAC アドレスを一致条件とします。2 つの MAC が指定された場合、
ソースか宛先かに関係なく、フィルターはその両方を含む
パケットを検出します。
-v, --vlan
802.1Q ヘッダー内の VLAN ID (VID) を一致条件とします。
-d, --data-link[-protocol], --ethertype
データ リンク (レイヤー 2) プロトコルを一致条件とします。IPv4、IPv6、ARP、または
プロトコル番号とすることができます。
IP ヘッダー
-t, --transport[-protocol], --ip-protocol
トランスポート (レイヤー 4) プロトコルを一致条件とします。TCP、UDP、ICMP、ICMPv6、または
プロトコル番号とすることができます。
TCP パケットをさらにフィルター処理するために、一致条件とする TCP フラグの一覧を指定できます
(オプション)。サポートされているフラグは FIN、SYN、RST、PSH、ACK、URG、ECE、CWR です。
-i, --ip[-address]
ソースまたは宛先の IP アドレスを一致条件とします。2 つの IP が指定された場合、
ソースか宛先かに関係なく、フィルターはその両方を含む
パケットを検出します。
TCP/UDP ヘッダー
-p, --port
ソースまたは宛先のポート番号を一致条件とします。2 つのポートが指定された場合、
ソースか宛先かに関係なく、フィルターはその両方を含む
パケットを検出します。
カプセル化
-e, --encap
カプセル化したヘッダーをフィルター条件とします。
サポートされるカプセル化の種類: VXLAN、GRE、NVGRE、IP-in-IP。
カスタム VXLAN ポートはオプションです。既定値は 4789 です。
C:\Windows\system32>
C:\Windows\system32>pktmon filter add -p 80🆑
フィルターが追加されました。
C:\Windows\system32>
C:\Windows\system32>pktmon filter list🆑
# 名前 ポート
- -- ---
1 <empty> 80🈁
C:\Windows\system32>
C:\Windows\system32>pktmon filter add -p 443🆑
フィルターが追加されました。
C:\Windows\system32>pktmon filter list🈁
# 名前 ポート
- -- ---
1 <empty> 80
2 <empty> 443🈁
C:\Windows\system32>
C:\Windows\system32>pktmon filter remove help🆑
pktmon filter remove
すべてのパケット フィルターを削除します。
C:\Windows\system32>
C:\Windows\system32>pktmon filter remove🆑
すべてのフィルターが削除されました。🈁
C:\Windows\system32>pktmon filter list🆑
パケット フィルターはありません。🈁
C:\Windows\system32>
- そして再度,80番ポートだけ追加して,追加を確認する.
C:\Windows\system32>pktmon filter add -p 80🆑
フィルターが追加されました。🈁
C:\Windows\system32>pktmon filter list🆑
# 名前 ポート
- -- ---
1 <empty> 80🈁
C:\Windows\system32>
- 今回は,この80番ポートのみ,キャプチャ対象として実行する.
pktmon startでキャプチャを実行する
- pktmonはstartオプションを指定する事で実行できるが,パラメータを確認する.
C:\Windows\system32>pktmon start help🆑
pktmon start [-c { all | nics | [ids...] }] [-d] [--etw [-p size] [-k keywords]]
[-f] [-s] [-r] [-m]
パケットの監視を開始します。
-c, --components
監視対象のコンポーネントを選択します。すべてのコンポーネント、NIC のみ、または
コンポーネント ID の一覧を指定できます。既定値は all です。
-d, --drop-only
ドロップされたパケットのみを報告します。既定では、正常に処理されたパケット伝達
も報告します。
ETW ロギング
--etw
パケット キャプチャのロギング セッションを開始します。
-p, --packet-size
各パケットからログに記録するバイト数。常にパケット全体を
ログに記録するには、0 に設定します。既定値は 128 バイトです。
-k, --keywords
どのイベントがログに記録されるかを制御する 16 進数の
ビットマスク (以下のフラグを合わせたもの)。既定では、すべてのイベントがログに記録されます。
フラグ:
0x001 - 全般構成イベント。
0x002 - カウンターを含むコンポーネント関連情報。
0x004 - 事前に解析されたパケット。
0x008 - パケット メタデータ (NBL OOB)。
0x010 - 未処理のパケット ペイロード。
-f, --file-name
.etl ログ ファイル。既定値は PktMon.etl です。
-s, --file-size
ログ ファイルの最大サイズ (MB 単位)。既定値は 512 MB です。
ロギング モード
-r, --circular
最大ファイル サイズに達すると、新しいイベントによって
最も古いイベントが上書きされます。
-m, --multi-file
最大ファイル サイズに達すると、新しいログ ファイルが作成されます。
ログ ファイルには、PktMon1.etl、PktMon2.etl のように順番に番号が付けられます。
C:\Windows\system32>
- ETWとは,Event Tracing for Windowsの事.通信ログはこのETWに流れてくるそうで,これをログイングするために--etwオプションを設定する.またパケットサイズは全てを保存するので0を設定.
C:\Windows\system32>pktmon start --etw -p 0🆑
ログ ファイル名: C:\Windows\system32\PktMon.etl🈁
ログ モード: 循環
最大ファイル サイズ: 512 MB
アクティブな測定を開始しました。
C:\Windows\system32>
C:\Windows\system32>pktmon stop🆑
ログ ファイル: C:\Windows\system32\PktMon.etl (イベントは失われていません)
Intel(R) Dual Band Wireless-AC 7265
ID 名前 カウンター 方向 パケット バイト | 方向 パケット バイト
-- -- ----- -- ---- --- | -- ---- ---
34 Native WiFi Filter Dr... Upper Rx 828 1,148,635 | Tx 189 25,038
33 VirtualBox NDIS Light... Upper Rx 828 1,148,635 | Tx 189 25,038
32 QoS Packet Scheduler Upper Rx 0 0 | Tx 189 25,038
95 TCPIP (NDIS) Lower Rx 828 1,148,635 | Tx 189 25,038
77 LLTDIO Lower Rx 828 1,148,635 | Tx 0 0
73 NDISUIO Lower Rx 828 1,148,635 | Tx 0 0
C:\Windows\system32>
ログファイルを可読化する pkmon format
C:\Windows\system32>dir C:\Windows\system32\PktMon.etl🆑
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は F464-9747 です
C:\Windows\system32 のディレクトリ
2020/05/24 20:10 83,886,080 PktMon.etl🈁
1 個のファイル 83,886,080 バイト
0 個のディレクトリ 373,325,750,272 バイトの空き領域
C:\Windows\system32>
- 83MBのファイルができていた.(キャプチャした内容に依存する)
- ETW形式でバイナリなので人間が読めるように変換をし,返還後のファイルサイズを確認.
C:\Windows\system32>pktmon format PktMon.etl -o pktmon.txt🆑
処理しています...
書式設定されたイベント: 15406
書式設定されたファイル: pktmon.txt
C:\Windows\system32>dir pktmon.txt🆑
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は F464-9747 です
C:\Windows\system32 のディレクトリ
2020/05/24 20:13 7,778,150 pktmon.txt
1 個のファイル 7,778,150 バイト
0 個のディレクトリ 373,320,957,952 バイトの空き領域
C:\Windows\system32>
変換したログをメモ帳で開く
- 記録されたファイルは,可読性のあるテキストという事で,開いてみる.
- IPアドレス,MACアドレスなどが記録されていることはわかる.また,日本語に変換されていて,区切り文字が「、」だったりするし,このままの生ログだと実質人間は読めない...
- このログファイルは,Microsoft Network Monitorを利用することで,読みやすくできる模様.