1. 如果測試網路使用 Wi-Fi,那麼可以讓 iOS device 連上一個測試用的 Wi-Fi network
a. 將 Wi-Fi AP 設定為 bridge mode2. 若 APP使用 HTTP 進行連線,可以使用 debugging HTTP proxy 以取得所有經過 proxy 的封包
bridge the Wi-Fi on to an Ethernet and then use standard Ethernet techniques to capture a packet trace.b. 將 Mac 網路設定為 Internet Sharing
設定 Mac 支援 internet Sharing, 將 iOS device 連上 Mac 所設定的 shared network.c. 直接擷取 Wi-Fi 封包
接著便可以在 Mac 上直接使用 wireshark 擷取封包
一般而言 Wi-Fi 所傳送的封包都經過加密,因此若要直接擷取 Wi-Fi 封包,便先需要將 AP 的加密解除,或是只設定為 WEP。
設定完成之後,後續的操作可以參考這裡。
3. 在 iOS 5.0 之後的版本可以使用 RVI(Remote Virtual Interface), 其作法如下
a. 將 iOS Device 透過 USB 連接 MAC
b. 在 MAC 上設定 RVI,並且將此 RVI 對應到 iOS Device 的網路堆疊
c. 在 MAC 上針對 RVI 介面,執行擷取封包的程式。
4. RVI 使用舉例:
a. 取得 iOS Device UUID
此步驟可執行 Organizer直接取得,參考下圖中的Identifier。假設UUID為 Identifier 57cd11efbf58a99391b5cb421cc7b05213552fcf
b. 設定 RVI
rvictl -s 57cd11efbf58a99391b5cb421cc7b05213552fcfc. 執行封包擷取程式,便可以取得網路端的封包
c1. 執行 "sudo tcpdump -i rvi0 -n" 可以直接看到網路封包,建議使用"sudo tcpdump -i rv0 -n -s 0 -w dumpFile.pcap tcp" 將封包存成檔案後,再使用 wireshark 進行分析
c2. 直接使用wireshark,選擇 rvi0
d. 移除 RVI
rvictl -x 57cd11efbf58a99391b5cb421cc7b05213552fcf
自己的使用習慣是使用 RVI並透過wireshark捉取封包,當 RVI 不可行的時候,才會使用其他方式。
參考資料
- https://developer.apple.com/library/mac/qa/qa1176/_index.html
- http://blog.manbolo.com/2013/02/22/analysing-ios-app-network-performances-on-cellularwifi