Windows CE機でパケットキャプチャ

ネタが尽きたので久々にWindows CEの話題でも書いてみる。


Windows CE 5.0以降(当然6.0も)には、標準でパケットキャプチャできる仕組みWinpcapのようなもん)がネットワークドライバ(cxport)にあらかじめ仕込まれている。
ただしMicrosoft Network MonitorやWiresharkのようなグラフィカルなアプリは入っていないので、追加でパケットキャプチャ用のドライバ(netlog.dll)とフロントエンド(netlogctl.exe)を組み込む必要がある。


netlog.dllはパケットキャプチャのための後付のドライバ。
netlogctl.exeはコマンドラインベースのプログラムで、ドライバの制御を行う。
この2つを\Windowsフォルダにコピーして使う。
ちなみにnetlog.dll, netlogctl.exeのバイナリはデフォルトでは存在しないので、カタログから「NDISパケットキャプチャDLL」(SYSGEN_NETLOG)を追加してシステム生成するか、自分でビルドする必要がある。自力でビルドする場合は、ターゲットワークスペースのリリースディレクトリ(%_FLATRELEASEDIR%)を開いて、

sysgen -p common netlog netlogctl

とすればターゲットマシン用の実行ファイルがビルドされる。(この方がてっとり早い)


コマンドラインオプションは以下の通り。


netlogctl load
       netlog.dllをロードする。自動的にキャプチャが開始される
netlogctl unload
netlog.dllをアンロードする。キャプチャ中の場合は自動的に停止する
netlogctl start
キャプチャ開始
netlogctl stop
キャプチャ停止
netlogctl pkt_size XXX
キャプチャする最大パケット長をバイト数で指定する。デフォルトは5,000バイト。キャプチャ停止中のみ有効
netlogctl cap_size XXX
キャプチャファイルの最大サイズをバイト数で指定する。デフォルトは500,000バイト。キャプチャ停止中のみ有効
netlogctl file XXX
キャプチャファイル名(の語幹)を指定する。デフォルトは \Netcap (この設定では\Netcap0.cap と\Netcap1.capが出力される)。キャプチャ停止中のみ有効
netlogctl usb 0
USB PPPパケットを採取しない(ActiveSyncログを除外する)
netlogctl usb 1
USB PPPパケットを採取する(ActiveSyncログを除外しない)
netlogctl state
現在の設定、動作状態を表示する

出力されたログファイル(*.cap)は、Microsoft Network MonitorWireshark(旧Ethereal)で開いてパケット解析が可能。
netlogctl.exeを呼び出すグラフィカルなフロントエンドを作るというのも面白いかも。netlogctl自体のソースも存在するので、そのまま流用して改造しても良いかもしれない。


netlog.dllのソース
\WINCE500\public\common\oak\utils\netlog


netlogctl.exeのソース
\wince500\public\common\oak\utils\netlogctl


Windows Mobileにビルド済みのバイナリを持ってって動くのか…どうかは知らない。
動いちゃいそうな気もするけど。