iPhone でパケットキャプチャしてみる(2019年12月版)
この投稿は 品川 Advent Calendar 2019 - Qiita の8日目です。
OB枠での参加です。きっと来年はちゃんと社名が出ると思います。
はじめに
やりたいこと
iPhone の通信内容をみたい。
やり方
定番中の定番ですが、以下の2通りです。
調べながらすんなりできるだろうと思ってたら、UI だったり、実行時のパスが変わってたりして意外と手こずったので、2019年12月版としてまとめます。
Wireshark(+ rvictl)
ながれ
Xcode のインストール
Xcode 自体は全く必要ないのですが、rvictl を使うためには Xcode が必要なようです。
App Store か developer.apple.com から 11.2 をダウンロードします。
developer.apple.com からの場合は、xip ファイルとしてダウンロードできるので、展開すれば使えます。
Wireshark のインストール
$ brew cask install wireshark
iPhone の UDID を調べる
以前は、iTunes で確認できていたのですが、macOS 10.15 Catalina からは Finder で確認できます。副ボタンのクリック(右クリック)でコピーできます。
表示されていない場合は、該当の箇所あたりをクリックすると表示が切り替わります。
Remote Virtual Interface をつくる
Mac に iPhone をつないだまま rvictl
で Remote Virtual Interface をつくります。
この rvictl
のパスが最初わかりませんでした。
$ /Library/Apple/usr/bin/rvictl -s {さっき調べた UDID} Starting device {さっき調べた UDID} [SUCCEEDED] with interface rvi0
Wireshark でみる
準備ができたので、Wireshark でみてみます。
$ wireshark
Wireshark が起動したら、表示されているインターフェースから先程つくった rvi0
を選択するか、画面上部の「キャプチャオプション」から同様に rvi0
を選択することで、キャプチャが開始されます。
iPhone で通信を行うと、Wireshark 上で確認できます。
最後に、Remote Virtual Interface を消します。
$ /Library/Apple/usr/bin/rvictl -x {さっき調べた UDID} Stopping device {さっき調べた UDID}} [SUCCEEDED]
Charles
結局確認したいことは大体 http(https) のリクエスト/レスポンスだと思うので、そういうときは Charles です。
ながれ
Charles のインストールとプロキシ設定
Download Charles からダウンロードして、実行します。
Buy Charles Licenses にあるように、30日間試用できます。(1回あたり、30分で強制終了します。)
Charles を起動したら、プロキシ設定を行います。
「Proxy」> 「Proxy Settings」
プロキシのポートを設定します。(デフォルトは 8888)
また、Charles を起動している Mac 自体がプロキシに吸い込まれてほしくない場合は、「macOS」でチェックを外しておきます。
(Mac も見たい場合は、そのまま)
「Proxy」> 「SSL Proxing Settings」から SSL プロキシ設定を行います。
「Include」に対象とするホストとポートを設定します。(例ではいずれも *
)
iPhone でプロキシ設定
iPhone を Charles を起動している Mac と同じ Wi-Fi (LAN)につなぎます。
「設定」> 「Wi-Fi」から、接続している Wi-Fi の「i」マークを選択。
一番下の「プロキシを構成」を選択。
「手動」を選択し、Charles を起動している Mac のローカル IP アドレスと先ほど設定したプロキシのポート番号を入力します。
Charles でアクセスしてよいか確認されるので、「Allow」
他の端末や iPhone の IP アドレスが変わる度に確認されるのが面倒な場合は、「Proxy」>「Access Control Settings」から 0.0.0.0/0
などを追加しておきます。
iPhone でプロファイル設定、証明書の有効化
iPhone で Safari を開いて、http://www.charlesproxy.com/getssl/ にアクセスし、プロファイルをダウンロードします。
http://www.charlesproxy.com/getssl/ にアクセスできない場合は、
あたりを確認してみてください。
「設定」>「一般」>「プロファイル」から先程ダウンロードしたプロファイルをインストールします。
「設定」>「情報」>「証明書信頼設定」から証明書を有効にします。
Charles でみる
準備ができたので、Charles でみてみます。
https なエンドポイントからのレスポンスも内容が確認できています。