WiresharkでiPhone実機のHTTP通信を覗いてみる
ちょっと困ったことが起きたので、iPhone実機ではどんなHTTPの通信が走っているのか知りたくなりました。調べてみると結構簡単に出来そうだったので挑戦してみます。
手順概要
- WiresharkをMacにインストールする
- 実機をMacにつなぐ
- 仮想ネットワークを作成
- Wiresharkで解析
ステップとしてはこんな感じになります。
Wiresharkのインストールがちょっと面倒なのと、Wiresharkの使い方がわかりづらいという点を除けば結構簡単にできるので、覚えておくと便利そうです。
1. WiresharkをMacにインストールする
Wiresharkというパケット解析用のアプリケーションをMacにインストールします。これがなくても生のパケットは拾えるのですが、関連付けたり読み解いていくのを手動でやるのはつらいです。WiresharkはGUIでいろいろやってくれるので活用しましょう。
https://www.wireshark.org/download.html
まずはここからアプリケーションをダウンロードしてインストールします。
インストール後、起動しようとするとX11をインストールしてくれ的なエラーが出てダウンロードページに飛ぶので、そこから「XQuartz」をダウンロード・インストールします。再ログインを促されるので一応MacOSを再起動します。
XQuartzをインストール後、再びWiresharkをランチャーから立ち上げると、「X11はどこだ」みたいなダイアログが出るので、ファイラーからX11の場所を指定してあげます。(分かりづらいですが、アプリケーションのユーティリティの中にあります。)
X11を指定後待ってても起動しないので、一度Wiresharkを終了します。そしてコマンドラインから
/Applications/Wireshark.app/Contents/MacOS/Wireshark
みたいな感じで起動してあげます。どうも初回はコマンドから起動してあげる必要があるみたいです。時間がかかりますがしばらくするとちゃんと起動すると思います。
2. 実機をMacにつなぐ
ライトニングケーブルで普通につなぎます。XcodeのDeviceなどから端末のIdentifierを記録しておいてください。16進数のちょっと長めの文字列です。
3. 仮想ネットワークを作成
Macに仮想ネットワークを構築して、端末の通信をMac経由で行うようにします。これによってパケットのキャプチャが可能になります。
なんか難しそうですがコマンド一発でできます。
rvictl -s {$端末のIdentifier}
こうすることでネットワークに rvi0 という仮想ネットワークが作成されます。
4. Wiresharkで解析
ここまでくれば用意しておいたWiresharkで解析するだけです。InterfaceListから rvi0 を選択すると、端末に流れるパケットを取り出すことが出来ます。上のFilterに http
と入れてあげれば、HTTPの通信だけをフィルタリング可能です。