日報 #102 - iPhoneのパケットキャプチャ
すげぇ休みました。
俺ですら「このブログ終わったのか」と思うくらい。
でもグジグジとやるんですよ。
熱が出たりと不調続きでございますが、
今週は今日から出社したので懲りもせず日報いきましょう。
本日の話題は「iPhoneのパケットキャプチャ」です。
開発者の皆様であればいくつもやり方を持っていると思います。
やれtcpdumpだのやれwiresharkだの。
よくヒットするのはこのページです。
http://qiita.com/HIkaruSato/items/1f66c1a189bf9c19f838
やや面倒ですが、3GSとかの携帯電話の通信でもキャプチャできる方法は魅力的ですね。
で今回はその方法について。
早い話が、iPhoneをUSBでmacにつなぎ、おもむろに下記コマンドを叩く。
rvictl -s [iPhoneのidentifer] tcpdump -i rvi0 -w [ダンプファイル名]
参考サイトの通りです。
その状態でひとしきり通信をしたら、
rvictl -x [iPhoneのidentifer]
こうすることで、dumpの結果がバイナリで保存されますと。
それをWiresharkとかで読みこめばみれますよと。
とまぁここまでは参考サイトの通り。
とっても分かりやすいので再掲しますね。
http://qiita.com/HIkaruSato/items/1f66c1a189bf9c19f838
ですが、この rvictl ってなんざんしょってことで少し調べてみました。
調べてみると、どうやらこの方法自体はAppleが推奨しているやり方の1つみたいなんですね。
https://developer.apple.com/library/ios/qa/qa1176/_index.html#//apple_ref/doc/uid/DTS10001707
ここにその他の方法も含めて全て紹介されています。
さて、該当の rvictl ですが、どうやら Remote Virtual Interface ctl の略みたいです。
全くわかりません。
少し読み進めるとこんな文章が。
Set up an RVI for that device. This creates a virtual network interface on your Mac that represents the iOS device's networking stack
接続したiPhoneのネットワークに、仮想ネットワークインターフェースをかぶせるようです。
そういう便利なiOS固有のコマンドなんでしょうね。
でも説明はそれだけです。
-hでヘルプを見てみるとオプション一覧が見れます。
Remote Virtual Interface Tool starts and stops a remote packet capture instance for any set of attached mobile devices. It can also provide feedback on any attached devices that are currently relaying packets back to this host. Options: -l, -L List currently active devices -s, -S Start a device or set of devices -x, -X Stop a device or set of devices
これだけ読む感じだとデバイスはiPhoneだけに限らないみたいですが、どうなんでしょうかね。
こんどandroidでも試してみましょう。
でまぁ、rviを一度作成したら -l コマンドでそのリストがみれるので、
rviの名前を指定してtcpdumpをすれば、そのネットワークインターフェースのtcpdumpが取得できる、とこういうわけなんですね。
ってことは、わざわざファイルに出力して、、、なんて面倒なことやらずにそのままWiresharkで読めるんじゃないの?
ということでやってみたら、
ちゃんとできました。
ということなので、
いっとう楽なiPhoneのパケットキャプチャは、
rvictl -s hogehoge
で仮想インターフェイスを作って、
rvictl -l
で作ったインターフェース名を確認し、おもむろにwiresharkを立ち上げ、
capture項目で監視インターフェースに上記のインターフェース名を選択して、
フィルタしていつものように眺める。
これがいっちゃん楽ですね。
そして作ったインターフェースはちゃんと削除しておきましょう。
rvictl -x hogehoge
ということでした。
報告は以上です。