級別:★★☆☆☆
標籤:「iOS手機抓包」「iOS HTTPS抓包」「Charles證照」
作者: Xs·H
審校: QiShare團隊
前言:在iOS應用開發過程中,通過抓包除錯服務介面的場景時常出現。Charles和Wireshark是我在iOS開發過程中最常用的兩款軟體。
在日常開發中,我們無法看到應用程式與伺服器之間傳送和接收的內容,沒有這種可見性,我們在確定故障的確切位置時會非常困難且耗時。而Charles是一個執行在PC上的Web代理,我們將應用程式配置為通過Charles訪問網路,便可以在Charles上記錄並顯示傳送和接收的所有資料,進而可以大大提高除錯程式的效率。Charles官網
從下圖可以看出Charles的角色:
Charles有以下幾個常用功能:
- 請求預覽:通過分組或序列檢視預覽和過濾請求資料;
- 請求抓包:抓取HTTP和HTTPS的請求資料和響應資料;
- 請求斷點:攔截指定的請求或響應,預覽中間的資料;
- 資料修改:修改請求資料和響應資料以配合資料測試;
- 請求重發:指定請求重複傳送,以測試後端功能和效能;
- 網速模擬:設定網速延遲,模擬手機上2G/3G/4G網路;
由於Charles的功能很多,很難在文章中詳盡介紹,所以作者以在專案中對Charles的使用為切入點,對最常用、最有用的幾個功能進行介紹。
一、安裝
Charles是收費軟體,有30天的免費試用期限,之後每使用30分鐘會被強退一次,重啟後可繼續使用。從Charles官網可以獲取Charles安裝包,也可以從網際網路中查詢破解版。
下載破解版時要注意甄別安裝包來源,謹防木馬和病毒。
二、請求預覽
Charles啟動後,就執行在抓包模式。由於Charles會自動配置PC瀏覽器的代理,所以,隨意開啟一個網頁(只要有網路請求即可)即可預覽到請求資訊。
如果使用外掛為瀏覽器設定了獨立代理,請關閉外掛或者設定成系統代理。
Charles提供了Structure和Sequence兩種預覽模式。 Structure以域名對請求進行分組,可以很方便地預覽同一域名下的請求資料,也方便於日常開發中對某一服務介面的分析和處理。圖示如下:
Sequence以時間順序顯示請求資訊,可以最直接的預覽請求資訊。在此模式下,可以使用Filter過濾請求,針對性分析。圖示如下:
在兩種模式下,都可以通過切換標籤(Overview、Request、Response等)預覽不同型別的請求資訊。在最常用的Request和Response標籤下,還可以通過切換子標籤(Headers、Cookies、Text等)預覽對應標籤詳細內容。圖示如下:
三、請求抓包
使用工具欄的白圓紅點按鈕(快捷鍵是“Command+R”)可以使Charles在抓包(Start Recording)和不抓包(Stop Recording)之間切換。使用此按鈕,在需要除錯時再開啟抓包功能可以有效減少干擾資訊,而快速抓取到需要除錯的請求。
對從手機(以iPhone示例)發出的請求進行抓包,需要保證iPhone和PC工作在同一區域網內。
1. 獲取PC的IP地址
在Charles選單欄 -> Help -> Local IP Address
中可以檢視PC的IP地址。圖示如下:
也可以在Mac終端使用命令ifconfig en1
檢視PC的IP地址。圖示如下:
2. 配置iPhone代理
在iPhone的設定 -> 無線區域網 -> 區域網資訊(i) -> 配置代理 -> 手動
中配置代理,伺服器輸入框中填寫PC的IP地址,埠輸入框中填寫Charles的代理埠(一般是8888)。圖示如下:
具體的埠可以從Charles選單欄 -> Proxy -> Proxy Settings
中檢視。圖示如下:
iPhone代理配置完成後,Charles會彈出連線提示框,點選Allow
之後即可使用Charles對從該iPhone發出的請求進行抓包了。圖示如下:
3. 抓包HTTPS請求
在配置iPhone代理完畢後,就可以通過Structure或者Sequence視窗預覽HTTP請求的資料了。但由於HTTPS請求被加密過,預覽請求時只能預覽到亂碼資料。要預覽到HTTPS請求的資料明文,需要PC和iPhone安裝證照授權。
1) PC安裝證照
在Charles選單欄 -> Help -> SSL Proxying -> Install Charles Root Certificate
中可以為PC安裝證照,證照可以在Mac的鑰匙串中檢視。圖示如下:
證照可以在Mac的鑰匙串中檢視,雙擊證照,將信任許可權設定為始終信任
。圖示如下:
2) iPhone安裝證照
在iPhone瀏覽器中訪問http://charlesproxy.com/getssl
可以下載證照並安裝。此地址一般不會變化,可以在Charles選單欄 -> Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Remote Browser
中檢視最新的官方證照下載地址。圖示如下:
基於iOS的證照信任機制,在安裝完成並信任證照後,需要到iPhone設定 -> 關於本機 -> 證照信任設定
中啟用根證照。圖示如下:
這樣,就可以使用Charles中抓包iPhone發出的HTTPS請求並預覽明文資料了。
抓包模擬器上的HTTPS請求需要點選
Install Charles Root Certificate in iOS Simulators
安裝證照。
3) 啟動抓包SSL許可權
在Charles選單欄 -> Proxy -> SSL Proxying Settings
中勾選Enable SSL Proxying
,然後在Locations
中新增需要抓包的Host和Port即可。圖示如下:
也可以在抓包介面,右鍵點選某條/組請求,在彈出的選項列表中點選Enable SSL Proxying
啟用許可權。圖示如下:
四、請求斷點
在Charles的請求預覽介面中,右鍵點選某條/組請求,在彈出的選項列表中有Breakpoints
選項。圖示如下:
點選Breakpoints
後即為該請求設定了斷點。預設情況下,在該請求的Request / Response過程都會受斷點控制,即在Request資料傳送到的服務端之前會被暫停,在Response資料傳送到客戶端之前也會被暫停。可以從Charles選單欄 -> Proxy -> Breakpoint Settings
中編輯斷點的引數。比如,只需要對Response過程加斷點,可以將Request的勾選狀態取消。圖示如下:
在斷點狀態下,可以預覽和修改請求的中間資料,之後點解Execute
按鈕即可繼續執行請求。
五、資料修改
Rewrite
和Breakpoint Editing
都可以起到修改請求資料的作用。
1. Rewrite
在Charles選單欄 -> Tools -> Rewrite
中可以開啟Rewrite功能,點選Add
按鈕可以新增一條設定,並可以在右側的Locations
和Rules
中分別新增要Rewrite的請求路徑和Rewrite規則。圖示如下:
Rewrite適合應用於對請求的批量和長期修改,對請求資料影響較大(測試結束後經常忘記去掉規則)。所以,在一些輕量級的資料修改場景中,我經常結合Breakpoint
功能修改資料。
2. Breakpoint Editing
結合斷點功能,可以很好的實現臨時修改請求的Request / Response資料的需求。為某條請求設定斷點後,當該請求發生時,會自動跳到斷點視窗。點開Edit Request / Response介面,可以看到中間資訊,選擇合適的資料格式(HTML、Json等)進行修改。修改完成後,點選Execute
按鈕即可在終端上看到修改後的的效果。圖示如下:
六、請求重發
在Charles的請求預覽介面中,右鍵點選某條/組請求,在彈出的選項列表中有Repeat
和Advanced Repeat
兩個選項。圖示如下:
單擊Repeat
會重發該請求一次,常用於測試服務介面能否正常訪問,客戶端能否正常收到返回資料等。單擊Advanced Repeat
會彈出重發引數編輯頁面,圖示如下:
在此編輯介面上,可以自定義Iterations
(重發次數)、 Concurrency
(併發數)和 Repeat
(重發延時),常用於對服務介面進行壓力測試。
七、網速模擬
在Charles選單欄 -> Proxy -> Throttle Settings
中可以啟用Throttling
(節流)功能,並自定義Locations
(受限服務介面)和Throttle Configuration
(節流配置)。支援對Throttle preset
(預置的資料傳輸方式)、Bandwidth
(頻寬) Utilisation
(利用比率)、 Round-trip latency
(往返延遲)、MTU
(最大傳輸單元) Reliability
(可靠性) Stability
(穩定性)等引數進行編輯。其中,在Throttle preset
支援模擬3G/4G網路環境。圖示如下:
使用Throttle功能,可以方便地排插因為若網而導致的bug,而這類bug線上上很容易出現,而且很難排查復現。
小編微信:可加並拉入《QiShare技術交流群》。
關注我們的途徑有:
QiShare(簡書)
QiShare(掘金)
QiShare(知乎)
QiShare(GitHub)
QiShare(CocoaChina)
QiShare(StackOverflow)
QiShare(微信公眾號)
推薦文章:
初探TCP
初探IP、UDP
iOS 多執行緒之執行緒安全
iOS 多執行緒之GCD
iOS 多執行緒之NSOperation
iOS 多執行緒之NSThread
iOS Winding Rules 纏繞規則
奇舞週刊