iPhone, iPad の通信を Mac でパケットキャプチャする

iPhone, iPad の通信を Mac でパケットキャプチャする

iPhone や iPad 等の iOS の通信について、Mac で簡単にパケットをキャプチャすることができます。例えば、あるアプリがどこへ通信しているか、それがどんな内容なのかを知ることができます。

パケットキャプチャは iPhone や iPad をMac に仮想インターフェースとして割り当てることで実現します。仮想インターフェースの割り当ては Mac に標準インストールされている「rvictl」というコマンドを使います。

iPhone や iPad をMac に仮想インターフェースとして割り当てる

1.  iPhone, iPad の UDID (識別子) を調べる

  1. パケットキャプチャしたい iPhone, iPad を Mac に Lightning ケーブル等で接続する。
  2. iTunes.app を開く。
  3. ウィンドウ上部から接続した iPhone, iPad のアイコンをクリックし、デバイス画面を表示する。
  4. 画面上部のデバイスのシリアル番号が表示されている項目をクリックし、UDID (識別子)を表示する。
  5. UDIDの項目を右クリックするか、「⌘ + c 」で UDID をコピーする。

2. iPhone, iPad を Mac に仮想インターフェースとして割り当てる

  1. ターミナル.app を起動し、下記のコマンドを実行します。’UDID’ のところを先ほどコピーした UDID の値に置き換えます。
    rvictl -s 'UDID'
  2. 下記コマンドで仮想インターフェースとして割り当てられていることを確認します。
    インターフェス名は「rvi0」等が割り当てられます。

    rvictl -l

    「Could not get list of devices」と表示されると、割り当てに失敗しています。
    「’UDID’ with interface rvi0 」等が表示されていると、割り当てできています。

3. パケットキャプチャソフトウェアで iPhone, iPad の通信をキャプチャする。

Wireshark や tcpdump 等のソフトウェアを使って、iPhone, iPad の通信をキャプチャします。インターフェース名「rvi0」等をキャプチャするインターフェースと指定します。

例えば tcpdump だと下記のコマンドになります。

tcpdump -i rvi0

 

仮想インターフェースの割り当てを解除する

仮想インターフェースとしての割り当てを解除したい場合は下記のコマンドを実行します。UDID のところは割り当てた機器の UDID の値に置き換えます。

rvictl -x 'UDID'

最後に、下記コマンドで解除できているか確認します。「Could not get list of devices」と表示されれば OK です。

rvictl -l

 

UDID をターミナルのコマンドから調べる方法

iPhone, iPad の UDID は下記のコマンドでも取得することが可能です。ただし、Mac に Xcode がインストールされている必要があります。

instruments -w device

Xcode にインストールされているシミュレーションデバイスも表示されるので、grep で除外したほうが見やすいかもしれません。

instruments -w device | grep -v Simulator

総評

iOS アプリの通信をキャプチャしてみるといい暇つぶしになります。そのアプリが、外部との通信に HTTPS 等で暗号化されていれば、パケットの中身を確認することは難しいですが、意外と暗号化していない場合も多いので、いろいろなアプリの通信を見てみてはどうでしょうか。

ちなみに、家電操作系のアプリ(リモコンがわりになるもの)については、通信を暗号化していないことが多いように思われるので、パケットを解析して自作のプログラムから機器をコントロールすることができるようになる可能性もあります。