2013年1月21日月曜日

アプリのパケット解析をする

「パケット解析」と呼ぶと敷居が高そうに思えるけど、実際のところはネットワークプロトコルに関する、技術者としては標準的な知識さえ持っていれば、あとはツールの使い方を理解するだけ。

お手軽な割には、アプリ開発において絶大な威力を発揮するのでオススメです。

特にネットワークを使ったアプリでは、「ネットワーク環境が問題なのか、サーバに問題があるのか」「サーバが送るデータに問題があるのか、クライアントのパーサに問題があるのか」など犯人を絞り込むの作業が必要になります。

いずれも、通信内容を把握できていれば自明なことです。

実用的にもそれ以外でも覚えて損のないスキルセットです。
  • 「前任者が作った殺したはずの機能が実は生きていて、余計な通信を発生させていた」というような発覚しづらい厄介なバグを、通信内容を把握しておくことで解決できる。
  • WebViewの通信は、読み込んでいるURL程度ならすぐ分かるものの、XHRの通信まで完全に把握するにはアプリに小細工が必要だったりする。しかしパケットを監視すれば手を加えなくても一発でOK。
  • 自分の書いたコードと違って、キャプチャされたパケットは嘘を付かない。
  • 「通信内容に問題があるんじゃ?」と話題になったアプリの挙動を、自分の手で解析できる。ハッカー気分を味わえて非常に楽しい。

ツール

Wireshark

総合的なパケットキャプチャツールとして非常に優秀。ただし非常にとっつきづらい。

オライリーの「実戦パケット解析 第2版」が、Wiresharkの使い方からはじまり、トラブルを解析によって解決する事例、そして主要ネットワークプロトコルの入門解説まで解説していて、パケットの世界に入門したい人に非常にオススメできると思う。

Burp Proxy

WiresharkはSSL通信の中身を除くのがやや手間なので、MacでSSL通信をキャプチャするならこれがオススメ。(JavaアプリケーションなのでOSを問わずに動く)

http通信のリクエストとレスポンスが纏められるので直感的で、Wiresharkよりも見た目はとっつきやすい。ただしリバースプロキシツールなので、Burp Proxyが通信処理のボトルネックになるため、本格的な通信障害調査には使えない。

Fiddler2

Windowsを使っているならBurp ProxyよりもFiddler2が良い。同じリバースプロキシツールだけど、http/https通信のキャプチャにとどまらず、Webページを動的に書き換えるなどいろいろ面白いことができる。

もともとはMSのIEチームが開発したツールみたいだけど、IEの滅亡を願うWeb開発者はこのツールに対して複雑な感情に抱いてるに違いない。