俺のメモ帖

とあるインフラ系SEのメモ帖。趣味や技術的なもとか書けたらいいなぁ。

Windows標準コマンドのみでパケットキャプチャ

Windowsでパケットキャプチャ=WireShark入れてなければできない。

これが少し前までの自分の常識でした。

最近のWindowsではnetshコマンドで取得できるのですね。

まあ内容見るにはひと手間要るし、見るのは結局WireSherk使っていますが。

 

あれですよ。簡単にソフトウェアとか追加できないような環境って結構あるわけですよ。そんな時に、Windows標準コマンドってのが強みになるわけです。

取得したデータは別ところに持ち出して自端末とかで解析はできますし。

 

ではそのコマンドを。

  • キャプチャの開始
    netsh trace start capture=yes
  • キャプチャの終了
    netsh trace stop
  • キャプチャの取得状態の確認
    netsh trace show status

 

開始時に、いろいろな条件を指定できます。自分がよく使うのは以下。

  • 出力先を指定したい場合
    traceFile=出力先ファイル名
    ※パスなしだとコマンドプロンプトのカレント。フルパス指定も可。
  • 最大サイズを指定したい場合
    maxSize=最大サイズ(MB)
  • 再起動後もとり続けたい場合
    persistent=yes
    ※これはWireSharkでは実現できない強みですね。リブート後から自動的に取得再開されるので、起動中のパケットとか取れるのかも?(未確認)

 

全部あわせると、以下のような感じ。

netsh trace start capture=yes traceFile=D:\temp\%COMPUTERNAME%_YYYYMMDD-HHMMSS.etl maxSize=1000 persistent=yes

 

バッチファイルとかで日時をYYYYMMDD-HHMMSS形式で取得しておいたら開始時刻やコンピュータ名をファイル名に指定できてわかりやすいかも。

 

見方。

Microsoft Message Analyzer っていうMS謹製ツールでファイルは開けます。このツールくっそ重いですが。でもこれで変換しないとWireSharkとかの使い慣れたツールで見れません。

英語版しか無いですが、以下から取得できます。

https://www.microsoft.com/en-us/download/details.aspx?id=44226

  1. etlファイルを、Microsoft Message Analyzerで開く。
  2. 全部開ききったら、「Save As」を使用して、表示されるダイアログにて「Export」を選択する。
  3. 出力されたファイルをWireSharkで開く。

非常に面倒。

調べてないけど、2の手順を自動化できないもんかね。

 

備考

コマンドで取得開始したら、コマンドでしか状態見れないかと思っていましたが、どうやらそうでもないらしく。

「管理ツール」→「パフォーマンスモニタ」で少し見られる様子。

  • 「パフォーマンス」→「データ コレクター セット」→「イベントトレースセッション」を選択し、一覧中の「NetTrace-XXXX」っていうのが進行中のセッション。
  • 「パフォーマンス」→「データ コレクター セット」→「スタートアップ イベントトレースセッション」を選択し、一覧中の「NetTrace-XXXX」っていうのが再起動後に自動的に開始するように設定したもの。
    再起動後に停止できないとかいう場合は、これを消せばいいらしい。