ネットワークキャプチャといえば、WiresharkやMicrosoft Message Analyzerが定番です。今回、USBやBluetoothのキャプチャもできることを教わりました。
USBなどの通信ログはETW (Event Tracing for Windows) に流れてくるのでEtwStreamでログをキャプチャできることも教わりました。そこで今回は、USBキャプチャなど各種WindowsのトレースプロバイダーをEtwStreamでキャプチャするために必要なトレースプロバイダー一覧を取得してみましょう。
このプロバイダーさえ把握できれば、USBに限らず自分で任意のトレースイベントをEtwStreamでキャプチャできますからね!
USB キャプチャ
先にキャプチャの様子です。 それぞれTwitterで教わりました。
Wireshark
Wiresharkをダウンロードしてインストールすれば利用できます。
UME-3 (@ume3fmp) January 6, 2016
詳細はWikiやググると豊富にあるので参照しましょう。
Microsoft Message Analyzer
次はMicrosoft Message Analyzerです。WindowsにおけるGUIキャプチャならWiresharkではなくMicrosoft Message Analyzerが便利です。Wiresharkとか何年も触ってません。
Microsoft Message AnalyzerもUSBキャプチャに対応しています。
ダウンロードしてインストールはWiresharkより簡単です。
https://www.microsoft.com/en-us/download/details.aspx?id=44226
Microsoftから詳細動画が公開されているので見てみるといいでしょう。
https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn741264(v=vs.85).aspx
EtwStream
そして、私たち開発者にとって一番うれしいのがEtwStreamでも見られることです。
USBに限らずネットワークキャプチャもそうですが、通信にかかわる膨大なログから「狙いを付けて絞りこんで加工してみる」というのは手間です。WiresharkやMicrosoft Message Analyzerの独自クエリは大げさかつだるいのですよね。そのため、EtwStreamのように、自在にRxでグルーピングなどが容易にできてプログラムに組み込めるのは強力な長所といえます。普段Fiddlerをお使いの開発者にとっても思ったことはあるでしょう。
neuecc (@neuecc)January 6, 2016
ETW Trace Provider
さてEtwStreamの.FromTraceEvent(string[] providerNameOrGuid)
はとても強力ですが、どのトレースプロバイダーかワカラナイとそもそもトレースできません。そして、トレースプロバイダーの指定はGUID.... ということで、各種プロバイダーの一覧を取得しましょう。
3種類用意しました。
logman
Get-NetEventProvider
: PowerShell 4.0 (Windows 8.1 / Windows Server 2012 R2) から利用可能Get-EtwTraceProvider
: PowerShell 5.0 (Windows 10) から利用可能
ただ、Get-EtwTraceProvider
は、Name/GUID共に無効なものが混じっているのでちょっと怪しいです。logmanやGet-NetEventProviderにいらない管理者権限も必要なので、正直使わないです。
まとめ
EtwStream + Rx最高です。Have a happy ETW life。