iOSアプリを開発していると、実機からの通信を見たいときなんかがあります。
そんな時に、実機のパケットを見れると便利なので方法をまとめておきます。
まずiPhone(iPadでも良いですが)をMacに接続します。
次に、後で利用するiPhoneのUDIDを取得しておきます。
UDIDを確認するには、iTunesから見るのが簡単です。
表示されない場合はUDID
の付近をクリックするとシリアル番号やECIDなど表示が切り替わるので、UDID
が表示されるまでクリックしてください。
値は⌘C
か、編集 - UDIDをコピー
でコピーできます。
このUDIDを、rvictl
でリモート仮想インタフェースとして設定します。
(rviはRemote Virtual Interfaceの略)
$ rvictl -s xxxxxxxxxxxxxxxxxxxxx
Starting device xxxxxxxxxxxxxxxxxxxxx [SUCCEEDED] with interface rvi0
ネットワークインタフェースとして追加しているので、ifconfig
で確認できます。
$ ifconfig -l
lo0 gif0 stf0 en0 en1 p2p0 awdl0 bridge0 utun0 utun1 en3 rvi0
次に追加したリモート仮想インタフェースをtcpdumpでパケットキャプチャしてみます。
$ sudo tcpdump -i rvi0
tcpdump: WARNING: rvi0: That device doesn't support promiscuous mode
(BIOCPROMISC: Operation not supported on socket)
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on rvi0, link-type PKTAP (Apple DLT_PKTAP), capture size 262144 bytes
21:10:07.437603 IP 104.244.46.39.https > 10.46.245.28.59453: Flags [F.], seq 2316302377, ack 2632719563, win 17, options [nop,nop,TS val 3176163496 ecr 832777770], length 0
21:10:07.437825 IP 10.46.245.28.59453 > 104.244.46.39.https: Flags [.], ack 1, win 2048, options [nop,nop,TS val 832838783 ecr 3176163496], length 0
21:10:07.437914 IP 192.0.73.2.https > 10.46.245.28.59451: Flags [F.], seq 2195467291, ack 308360110, win 17, options [nop,nop,TS val 3176163495 ecr 832777247], length 0
21:10:07.437930 IP 192.0.73.2.https > 10.46.245.28.59451: Flags [F.], seq 0, ack 1, win 17, options [nop,nop,TS val 3176163779 ecr 832777247], length 0
21:10:07.437942 IP 104.244.46.39.https > 10.46.245.28.59453: Flags [F.], seq 0, ack 1, win 17, options [nop,nop,TS val 3176163795 ecr 832777770], length 0
21:10:07.437953 IP i2.wp.com.https > 10.46.245.28.59457: Flags [F.], seq 4226963860, ack 3846429936, win 17, options [nop,nop,TS val 3176163997 ecr 832777941], length 0
21:10:07.437962 IP i2.wp.com.https > 10.46.245.28.59457: Flags [F.], seq 0, ack 1, win 17, options [nop,nop,TS val 3176164277 ecr 832777941], length 0
21:10:07.437971 IP 192.0.73.2.https > 10.46.245.28.59451: Flags [F.], seq 0, ack 1, win 17, options [nop,nop,TS val 3176164346 ecr 832777247], length 0
21:10:07.437979 IP 104.244.46.39.https > 10.46.245.28.59453: Flags [F.], seq 0, ack 1, win 17, options [nop,nop,TS val 3176164392 ecr 832777770], length 0
21:10:07.437987 IP i2.wp.com.https > 10.46.245.28.59457: Flags [F.], seq 0, ack 1, win 17, options [nop,nop,TS val 3176164836 ecr 832777941], length 0
21:10:07.438068 IP 10.46.245.28.59451 > 192.0.73.2.https: Flags [.], ack 1, win 2048, options [nop,nop,TS val 832838783 ecr 3176163495], length 0
21:10:07.438335 IP 10.46.245.28.59451 > 192.0.73.2.https: Flags [.], ack 1, win 2048, options [nop,nop,TS val 832838783 ecr 3176163495], length 0
21:10:07.438443 IP 10.46.245.28.59453 > 104.244.46.39.https: Flags [.], ack 1, win 2048, options [nop,nop,TS val 832838783 ecr 3176163496], length 0
21:10:07.438542 IP 10.46.245.28.59457 > i2.wp.com.https: Flags [.], ack 1, win 2048, options [nop,nop,TS val 832838783 ecr 3176163997], length 0
21:10:07.438626 IP 10.46.245.28.59457 > i2.wp.com.https: Flags [.], ack 1, win 2048, options [nop,nop,TS val 832838783 ecr 3176163997], length 0
21:10:07.438702 IP 10.46.245.28.59451 > 192.0.73.2.https: Flags [.], ack 1, win 2048, options [nop,nop,TS val 832838783 ecr 3176163495], length 0
21:10:07.438788 IP 10.46.245.28.59453 > 104.244.46.39.https: Flags [.], ack 1, win 2048, options [nop,nop,TS val 832838784 ecr 3176163496], length 0
21:10:07.438859 IP 10.46.245.28.59457 > i2.wp.com.https: Flags [.], ack 1, win 2048, options [nop,nop,TS val 832838784 ecr 3176163997], length 0
さすがに見るのが辛いので、Wiresharkで見てみます。
インストールは以下で。
$ brew cask install wireshark
Wiresharkを起動したら、キャプチャオプション
を開きます。
開いたら追加したリモート仮想インタフェース(rvi0)を選択し、開始
ボタンでキャプチャを開始します。
iPhone側でQiitaのトップページを表示すると、以下のように通信内容が流れてきました。
あとは見たい内容を見ていくだけです。
用がすんだらリモート仮想インタフェースを外しておきます。
$ rvictl -x xxxxxxxxxxxxxxxxxxxxx
Stopping device xxxxxxxxxxxxxxxxxxxxx [SUCCEEDED]
これで作成したアプリの通信やiPhoneのブラウザからの通信内容などを確認できて色々はかどりますね。