ネットワークキャプチャといえば、Wireshark や Microsoft Message Analyzer が定番です。今回、USB や Bluetooth のキャプチャもできることを教わりました。
USBなど の通信ログは ETW (Event Tracing for Windows) に流れてくるのでEtwStreamでログをキャプチャできることも教わりました。そこで今回は、USB キャプチャなど各種Windows のトレースプロバイダーをEtwStream でキャプチャするために必要なトレースプロバイダー一覧を取得してみましょう。
このプロバイダーさえ把握できれば、USBに限らず自分で任意のトレースイベントを EtwStream でキャプチャできますからね!
USB キャプチャ
先にキャプチャの様子です。 それぞれ Twitter で教わりました。
Wireshark
Wireshark をダウンロードしてインストールすれば利用できます。
そういえば今日会社で気がついたんだけど、ネットワークエンジニア御用達のWiresharkの最新版ではUSBのプロトコルも解析できるようになったぽい。hoot+C86CTLで試してみたら確かにキャプれた。デバッグに役立つかも? pic.twitter.com/2kNdhASzPB
— 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 Message AnalyzerもETWからのUSBトレースの解析に対応してたりする。実際に仕事でのUSBデバイス開発に使ったけど便利やった。 pic.twitter.com/YY2fwN0buj
— Kenta IDA (@ciniml) January 6, 2016
とりあえず転送の記録も全部出てくるので便利。EtwStreamでやるのは転送のペイロードにあるデバイス固有のデータも解析したいときに楽なんかな。 pic.twitter.com/dC72hhKqyr
— Kenta IDA (@ciniml) January 6, 2016
Microsoft から詳細動画が公開されているので見てみるといいでしょう。
Universal Serial Bus (USB) - Windows drivers | Microsoft Learn
EtwStream
そして、私たち開発者にとって一番うれしいのが EtwStream でも見れることです。
USBに限らずネットワークキャプチャもそうですが、通信にかかわる膨大なログから「狙いを付けて絞りこんで加工してみる」というのは手間です。Wireshark や Microsoft Message Analyzer の独自クエリは大げさかつだるいのですよね。そのため、EtwStream のように、自在にRxでグルーピングなどが容易にできてプログラムに組み込めるのは強力な長所といえます。普段 Fiddler をお使いの開発者にとっても思ったことはあるのではないでしょうか。
というわけでEtwStream 1.2.0。USBから流れる大量データの把握も、Rxによるグルーピングやフィルタリングで容易にできる #かも pic.twitter.com/GSPBHVLcuV
— 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。