運用稼働中の Windows Server の場合、パケットキャプチャーを取りたい場合でもパケットキャプチャーソフトをインストールしたくはないですね。
Windows Server 2008 R2(Windows 7) 以降であれば、OS 標準機能の netsh でパケットキャプチャーを取ることができます。(要管理権限)
netsh でのキャプチャーは、ログオフしてもパケットキャプチャーし続けますし、デフォルトが 250MB の循環型なのでキャプチャー取りっぱなしでもディスクパンクしないのも、Server でのキャプチャーにもってこいですね。
大量にパケットが飛んでくる環境とか、問題が起きた時のパケットを後で確認したい場合はサイズを大きくしておくと良いでしょう。
(実際にキャプチャーして、時間あたりのサイズを計測しておくのが吉ですね)
キャプチャー時の負荷はさして上がりませんが、これも環境依存なので実環境で試しキャプチャーしてみることをお勧めします。
■ キャプチャー開始
netsh trace start capture=yes
■ キャプチャー終了
netsh trace stop
キャプチャー終了すると、キャプチャー出力先が表示されるので、Microsoft Network Monitor をインストールした PC に .etl をコピーします。
Microsoft Network Monitor をまだインストールしていない場合は、こちらからダウンロードしてください。
Download Microsoft Network Monitor 3.4 (archive) from
Official Microsoft Download Center
https://www.microsoft.com/en-us/download/details.aspx?id=4865
Microsoft Message Analyzer が現行ツールですけど、重いので僕は使わないです。参考までにダウンロードページ(公開終了した模様)
Download Microsoft Message Analyzer from Official
Microsoft Download Center
https://www.microsoft.com/en-us/download/details.aspx?id=44226
Microsoft Network Monitor で .etl を開きます。

そのままではパケット内容が確認できないので、[Parser Profiles]-[NetworkMonitor Parsers]-[Windows] をチェックしてパケットを見られるようにします。

Save As で .cap 保存すれば、汎用的なファイル形式になるので、Wireshark 等の使い慣れたパケットキャプチャーツールで解析することができます。

よく使うオプションは以下の2つです
| maxsize=数値 | パケットキャプチャーサイズ(MB) |
| tracefile=path | パケットキャプチャーの出力先 |
こんな感じで指定します
netsh trace start capture=yes maxsize=2048 tracefile=c:\PacketCapture\NetTrace.etl
persistent=yes を指定すると、再起動後もパケットキャプチャーを続けるので、OS 起動時のパケットキャプチャーを取得することができます。
netsh trace start help でヘルプが表示されるので、オプションを確認することができます。
PS C:\> netsh trace start help
start
トレースを開始します。
使用法: trace start [[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]
[[[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 = 最大値なし)
fileMode=circular
overwrite=yes (既存のトレース出力ファイルを上書きするかどうかを
指定します)
correlation=yes (関連するイベントを相互に関連付け、グループ化
するかどうかを指定します)
perfMerge=yes (パフォーマンス メタデータをトレースに結合するか
どうかを指定します)
traceFile=%LOCALAPPDATA%\Temp\NetTraces\NetTrace.etl
(出力ファイルの場所を指定します)
providerFilter=no (プロバイダー フィルターを有効にするかどうかを指定します)
[以下省略]
|
今回触れませんが、キャプチャーフィルターのヘルプは以下で確認できます
netsh trace show capturefilterhelp
PowerShell プロンプトは変数が簡単に使えるのでお勧めです。
以下をコピペすればパケットキャプチャー開始
| # パケットキャプチャーの出力先 $PacketCaptureDirectory = "c:\PacketCapture" # パケットキャプチャーファイル名 $PacketCaptureFileName = "NetTrace.etl" # キャプチャーサイズ $PacketCaptureSize = 2048 # フォルダーがなかったら作成 if( -not (Test-Path $PacketCaptureDirectory)){ md $PacketCaptureDirectory } # ファイルがあったら明示的に削除 $PacketCaptureFullFileName = Join-Path $PacketCaptureDirectory $PacketCaptureFileName if( Test-Path $PacketCaptureFullFileName ){ del $PacketCaptureFullFileName } # キャプチャー開始 netsh trace start capture=yes maxsize=$PacketCaptureSize tracefile=$PacketCaptureFullFileName |
netsh trace は Promiscuous Mode にならないので、自分自身との通信しかキャプチャーできません。
Promiscuous Mode でキャプチャしたい場合は、Wireshark 等のキャプチャーツールが必要です。
![]()
![]()
Copyright © MURA All rights reserved.