iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
最近、iOS端末のパケット・キャプチャでデバッグしたので、その情報をまとめた。
Appleからの情報は、Technical Q&A QA1176 Getting a Packet Traceだ。
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 --> --> SYN-RECEIVED
3. ESTABLISHED <-- <-- SYN-RECEIVED
4. ESTABLISHED --> --> ESTABLISHED
5. ESTABLISHED --> --> ESTABLISHED
Basic 3-Way Handshake for Connection Synchronization
TCP A TCP B
1. ESTABLISHED ESTABLISHED
2. (Close)
FIN-WAIT-1 --> --> CLOSE-WAIT
3. FIN-WAIT-2 <-- <-- CLOSE-WAIT
4. (Close)
TIME-WAIT <-- <-- LAST-ACK
5. TIME-WAIT --> --> CLOSED
6. (2 MSL)
CLOSED
Normal Close Sequence