2015.01.22   |   iOS

WiresharkでiPhone実機のHTTP通信を覗いてみる

ちょっと困ったことが起きたので、iPhone実機ではどんなHTTPの通信が走っているのか知りたくなりました。調べてみると結構簡単に出来そうだったので挑戦してみます。

手順概要

  1. WiresharkをMacにインストールする
  2. 実機をMacにつなぐ
  3. 仮想ネットワークを作成
  4. 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の通信だけをフィルタリング可能です。

参考

iPhone端末とかのパケットキャプチャ