[iOS]通信デバッグ

最近、iOS端末のパケット・キャプチャでデバッグしたので、その情報をまとめた。

Appleからの情報は、Technical Q&A QA1176 Getting a Packet Traceだ。</p>

Remote Virtual Interfaceの準備と解除の手順は以下のとおり。

# 端末の識別子を調べる。
・Macに端末をUSBで接続する。
・Xcodeを立ち上げ、Window / Devices and Simulators を選ぶ。
・端末のIdentifier: の値を選択してコピーする。

# 端末をつなぐ。
・Terminal.appで以下のコマンドを叩く。

$ rvictl -s 端末の識別子
 Starting device 端末の識別子 [SUCCEEDED] with interface rvi0

# 端末を外す。
・Terminal.appで以下のコマンドを叩く。 


$ rvictl -x 端末の識別子

# リモート仮想インタフェースの確認

$ ifconfig -l
lo0 gif0 stf0 XHC20 en0 p2p0 awdl0 en1 en2 bridge0 utun0 utun1 utun2 pktap0 en4 rvi0

# HTTPSのキャプチャの例。

$ sudo tcpdump port https -I rvi0

RFCからオープンとクローズのパケットの流れを抜き出す。

 TCP A                                                TCP B
 1.  CLOSED                                               LISTEN
 2.  SYN-SENT    --> <SEQ=100><CTL=SYN>               --> SYN-RECEIVED
 3.  ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK>  <-- SYN-RECEIVED
 4.  ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK>       --> ESTABLISHED
 5.  ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK><DATA> --> ESTABLISHED
         Basic 3-Way Handshake for Connection Synchronization

 TCP A                                                TCP B
 1.  ESTABLISHED                                          ESTABLISHED
 2.  (Close)
     FIN-WAIT-1  --> <SEQ=100><ACK=300><CTL=FIN,ACK>  --> CLOSE-WAIT
 3.  FIN-WAIT-2  <-- <SEQ=300><ACK=101><CTL=ACK>      <-- CLOSE-WAIT
 4.                                                       (Close)
     TIME-WAIT   <-- <SEQ=300><ACK=101><CTL=FIN,ACK>  <-- LAST-ACK
 5.  TIME-WAIT   --> <SEQ=101><ACK=301><CTL=ACK>      --> CLOSED
 6.  (2 MSL)
     CLOSED
                        Normal Close Sequence

【関連情報】
BUKURO.swift 2018-07
Cocoa.swift
Cocoa勉強会 関東
Cocoa練習帳
Qiita

この記事が気に入ったらサポートをしてみませんか?