iOS Charles抓包

級別:★★☆☆☆
標籤:「iOS手機抓包」「iOS HTTPS抓包」「Charles證書」
做者: Xs·H
審校: QiShare團隊php


前言:在iOS應用開發過程當中,經過抓包調試服務接口的場景時常出現。Charles和Wireshark是我在iOS開發過程當中最經常使用的兩款軟件。git

在平常開發中,咱們沒法看到應用程序與服務器之間發送和接收的內容,沒有這種可見性,咱們在肯定故障的確切位置時會很是困難且耗時。而Charles是一個運行在PC上的Web代理,咱們將應用程序配置爲經過Charles訪問網絡,即可以在Charles上記錄並顯示發送和接收的全部數據,進而能夠大大提升調試程序的效率。Charles官網github

從下圖能夠看出Charles的角色:後端

Charles有如下幾個經常使用功能:瀏覽器

  • 請求預覽:經過分組或序列視圖預覽和過濾請求數據;
  • 請求抓包:抓取HTTP和HTTPS的請求數據和響應數據;
  • 請求斷點:攔截指定的請求或響應,預覽中間的數據;
  • 數據修改:修改請求數據和響應數據以配合數據測試;
  • 請求重發:指定請求重複發送,以測試後端功能和性能;
  • 網速模擬:設置網速延遲,模擬手機上2G/3G/4G網絡;

因爲Charles的功能不少,很難在文章中詳盡介紹,因此做者以在項目中對Charles的使用爲切入點,對最經常使用、最有用的幾個功能進行介紹。安全

1、安裝

Charles是收費軟件,有30天的免費試用期限,以後每使用30分鐘會被強退一次,重啓後可繼續使用。從Charles官網能夠獲取Charles安裝包,也能夠從互聯網中查找破解版。服務器

下載破解版時要注意甄別安裝包來源,謹防木馬和病毒。微信

2、請求預覽

Charles啓動後,就運行在抓包模式。因爲Charles會自動配置PC瀏覽器的代理,因此,隨意打開一個網頁(只要有網絡請求便可)便可預覽到請求信息。網絡

若是使用插件爲瀏覽器設置了獨立代理,請關閉插件或者設置成系統代理。多線程

Charles提供了Structure和Sequence兩種預覽模式。 Structure以域名對請求進行分組,能夠很方便地預覽同一域名下的請求數據,也方便於平常開發中對某一服務接口的分析和處理。圖示以下:

Sequence以時間順序顯示請求信息,能夠最直接的預覽請求信息。在此模式下,可使用Filter過濾請求,針對性分析。圖示以下:

在兩種模式下,均可以經過切換標籤(Overview、Request、Response等)預覽不一樣類型的請求信息。在最經常使用的Request和Response標籤下,還能夠經過切換子標籤(Headers、Cookies、Text等)預覽對應標籤詳細內容。圖示以下:

3、請求抓包

使用工具欄的白圓紅點按鈕(快捷鍵是「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啓用權限。圖示以下:

4、請求斷點

在Charles的請求預覽界面中,右鍵點擊某條/組請求,在彈出的選項列表中有Breakpoints選項。圖示以下:

點擊Breakpoints後即爲該請求設定了斷點。默認狀況下,在該請求的Request / Response過程都會受斷點控制,即在Request數據發送到的服務端以前會被暫停,在Response數據發送到客戶端以前也會被暫停。能夠從Charles菜單欄 -> Proxy -> Breakpoint Settings中編輯斷點的參數。好比,只須要對Response過程加斷點,能夠將Request的勾選狀態取消。圖示以下:

在斷點狀態下,能夠預覽和修改請求的中間數據,以後點解Execute按鈕便可繼續執行請求。

5、數據修改

RewriteBreakpoint Editing均可以起到修改請求數據的做用。

1. Rewrite

在Charles菜單欄 -> Tools -> Rewrite中能夠開啓Rewrite功能,點擊Add按鈕能夠添加一條設置,並能夠在右側的LocationsRules中分別添加要Rewrite的請求路徑和Rewrite規則。圖示以下:

Rewrite適合應用於對請求的批量和長期修改,對請求數據影響較大(測試結束後常常忘記去掉規則)。因此,在一些輕量級的數據修改場景中,我常常結合Breakpoint功能修改數據。

2. Breakpoint Editing

結合斷點功能,能夠很好的實現臨時修改請求的Request / Response數據的需求。爲某條請求設置斷點後,當該請求發生時,會自動跳到斷點窗口。點開Edit Request / Response界面,能夠看到中間信息,選擇合適的數據格式(HTML、Json等)進行修改。修改完成後,點擊Execute按鈕便可在終端上看到修改後的的效果。圖示以下:

6、請求重發

在Charles的請求預覽界面中,右鍵點擊某條/組請求,在彈出的選項列表中有RepeatAdvanced Repeat兩個選項。圖示以下:

單擊Repeat會重發該請求一次,經常使用於測試服務接口可否正常訪問,客戶端可否正常收到返回數據等。單擊Advanced Repeat會彈出重發參數編輯頁面,圖示以下:

在此編輯界面上,能夠自定義Iterations(重發次數)、 Concurrency(併發數)和 Repeat(重發延時),經常使用於對服務接口進行壓力測試。

7、網速模擬

在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 纏繞規則
奇舞週刊

相關文章
相關標籤/搜索