Windowsの標準コマンドである、netshコマンドとtraceオプションにより、パケットキャプチャが可能です。
本資料は、netshコマンドを使ってパケットキャプチャする方法と採取したパケットを閲覧するにあたりMicrosoft Message Analyzerを紹介します。
Wiresharkでも採取したパケットを閲覧することは可能ですが、フリーソフトがインストールできない場合などにはMicrosoft Message Analyzerが使えます。
注意
Microsoft Message Analyzerは廃止になっています。
ダウンロードリンク
netsh traceコマンドを実行するため、コマンドプロンプトを管理者として実行してください。
以下のコマンドを実行すると、netsh trace startにつついてのオプションを確認することができます。
netsh trace start /?
C:\WINDOWS\system32>netsh trace start /?
start
トレースを開始します。
使用法: trace start [sessionname=<セッション名>]
[[scenario=]<シナリオ 1,シナリオ 2>]
[[globalKeywords=]keywords] [[globalLevel=]level]
[[capture=]yes|no] [[capturetype=]physical|vmswitch|both]
[[report=]yes|no|disabled] [[persistent=]yes|no]
[[traceFile=]path\filename] [[maxSize=]filemaxsize]
[[fileMode=]single|circular|append] [[overwrite=]yes|no]
[[correlation=]yes|no|disabled] [capturefilters]
[[provider=]providerIdOrName] [[keywords=]keywordMaskOrSet]
[[level=]level] [bufferSize=<バッファー サイズ>]
[[[provider=]provider2IdOrName] [[providerFilter=]yes|no]]
[[keywords=]keyword2MaskOrSet] [[perfMerge=]yes|no]
[[level=]level2] ...
既定値:
capture=no (トレース イベントに加え、パケット キャプチャを
有効にするかどうかを指定します)
capturetype=physical (パケット キャプチャを有効にする必要がある
対象として、物理ネットワーク アダプターのみ、仮想スイッチのみ、
または物理ネットワーク アダプターと仮想スイッチの両方を指定します)
report=no (トレース ファイルと共に、補足レポートを
生成するかどうかを指定します)
persistent=no (再起動後に、netsh trace stop を発行するまで
トレース セッションを続行するかどうかを指定します)
maxSize=250 MB (最大トレース ファイル サイズを指定します。0 = 最大値なし)
bufferSize=512 (トレース バッファー サイズを KB 単位で指定します。最小値 4、最大値 16384)
fileMode=circular
overwrite=yes (既存のトレース出力ファイルを上書きするかどうかを
指定します)
correlation=disabled (関連するイベントを相互に関連付け、グループ化
するかどうかを指定します)
perfMerge=yes (パフォーマンス メタデータをトレースに結合するか
どうかを指定します)
traceFile=%LOCALAPPDATA%\Temp\NetTraces\[sessionname]NetTrace.etl
(出力ファイルの場所を指定します)
providerFilter=no (プロバイダー フィルターを有効にするかどうかを指定します)
sessionname='' (同時トレースを収集できるように、トレース セッションの名前を
指定します)
プロバイダー キーワードの既定値は all で、レベルは 255 になります (キーワードとレベルが指定されていない場合)。
例:
netsh trace start scenario=InternetClient capture=yes
パケット キャプチャを物理ネットワーク アダプターに対してのみ有効にして
InternetClient シナリオと依存プロバイダーのトレースを開始します。
"netsh trace stop" コマンドが発行されるか、システムが再起動すると、
トレースは停止します。
出力ファイルには、既定の場所と名前が使用されます。古いファイルが
存在する場合、それらは上書きされます。
netsh trace start provider=microsoft-windows-wlan-autoconfig
keywords=state,ut:authentication
microsoft-windows-wlan-autoconfig プロバイダーのトレースを開始します。
"netsh trace stop" コマンドが発行されるか、システムが再起動すると、
トレースは停止します。
出力ファイルには、既定の場所と名前が使用されます。古いファイルが
存在する場合、それらは上書きされます。
キーワード 'state' または 'ut:authentication' が含まれるイベントのみのログが記録されます。
netsh trace show provider コマンドを使用すると、サポートされたキー
ワードとレベルを表示できます。
キャプチャ フィルター:
キャプチャ フィルターは、capture=yes を指定してキャプチャが明示的に
有効になっているときにだけサポートされます。サポートされるキャプチャ
フィルターとその使用法の一覧を表示するには、'netsh trace show CaptureFilterHelp' を使用します。
プロバイダー フィルター:
プロバイダー フィルターは、複数のプロバイダーでサポートされます。有効に
するには、各プロバイダーの後に providerFilter=Yes を指定します。
各プロバイダーでサポートされるプロバイダー フィルターとその使用法の
一覧を表示するには、'netsh trace show ProviderFilterHelp' を使用します。
netsh trace startコマンドのパケットキャプチャについていくつかの例を以下に記します。
コマンドプロンプトを管理者として実行してください。
以下の構文でパケットキャプチャが開始されます。
netsh trace start capture=yes
デフォルト値の250MBまでキャプチャされます。
以下、実際にコマンドを実行したときの出力です。
C:\>netsh trace start capture=yes トレース構成: ------------------------------------------------------------------- ステータス: 実行中 トレース ファイル: C:\Users\sakura\AppData\Local\Temp\NetTraces\NetTrace.etl 追加: オフ 循環: オン 最大サイズ: 250 MB レポート: オフ
上記の出力がされ、プロンプトが入力待ちに戻ります。
尚、パケットキャプチャはバックグランドで実行されています。
トレースファイルを確認すると、ファイルが作成されているのが確認できます。
C:\>dir c:\users\sakura\AppData\Local\Temp\NetTraces\*
ドライブ C のボリューム ラベルは Windows です
ボリューム シリアル番号は ****-**** です
c:\users\sakura\AppData\Local\Temp\NetTraces のディレクトリ
2019/03/18 08:51 <DIR> .
2019/03/18 08:51 <DIR> ..
2019/03/18 08:51 <DIR> NetTrace
2019/03/18 08:51 524,288 NetTrace.etl
1 個のファイル 524,288 バイト
3 個のディレクトリ 30,412,132,352 バイトの空き領域
上記のキャプチャを中止したい場合は、以下のコマンドを実行します。
netsh trace stop
本コマンドを実行するとしばらくプロンプトが返ってきません。(結構かかります。)
プロンプトが入力待ちになるまでお待ちください。
以下、上記コマンドを実行したときの出力となります。
C:\>netsh trace stop トレースの結合中... 完了 データ収集を生成しています ... 完了 トレース ファイルと追加のトラブルシューティング情報は、"C:\Users\sakura\AppData\Local\Temp\NetTraces\NetTrace.cab" としてコンパイルされました。 ファイルの場所 = C:\Users\sakura\AppData\Local\Temp\NetTraces\NetTrace.etl トレース セッションは正常に停止しました。
上記では出力先を指定せず、実行したところ、環境変数TEMPのディレクトリに保存されました。
出力先を指定するには、tracefile=を使用します。
構文は以下のようになります。
netsh trace start capture=yes tracefile=ファイル名
実際に実行したときの出力です。
C:\>netsh trace start capture=yes tracefile=c:\sakura.etl
トレース構成: ------------------------------------------------------------------- ステータス: 実行中 トレース ファイル: C:\sakura.etl 追加: オフ 循環: オン 最大サイズ: 250 MB レポート: オフ
パケットキャプチャ中は以下のようにsakura.etl, sakuraフォルダが作成されました。
netsh trace stopをすると、フォルダは削除されcabファイルが作成されます。
TCPやUDPパケットを指定しキャプチャしたい場合は Protocol=UDPやProtocol=TCPとなります。
以下にコマンドを例を記します。
netsh trace start capture=yes Protocol=TCP tracefile=c:\tcp.etl
netsh trace start capture=yes Protocol=UDP tracefile=c:\udp.etl
イーサネットタイプを指定する場合は、以下のようになります。
netsh trace start capture=yes Ethernet.Type=IPv4 tracefile=c:\ipv4.etl
上記の出力の通り、デフォルトのトレースファイルサイズは250MBとなっています。
maxSizeを指定することにより、サイズを変更することができます。
以下、トレースファイルサイズを1024にして実行したときの出力です。
C:\>netsh trace start capture=yes tracefile=c:\max.etl maxSize=1024 トレース構成: ------------------------------------------------------------------- ステータス: 実行中 トレース ファイル: C:\max.etl 追加: オフ 循環: オン 最大サイズ: 1024 MB レポート: オフ
Microsoft Message Analyzerをインストールしておいてください。
microsoft Message Analyzerのインストール記事も公開しています。
採取したパケットをキャプチャファイルをMicrosoft Message Analyzerで開いた状態のスクリーンキャプチャです。
etlファイルを開くと採取したキャプチャを閲覧することができます。
以上、Windows標準のnetshコマンドを使ってネットワークのパケットをキャプチャする方法でした。