本文的內容主要包括:
- Charles 的簡介
- 將 Charles 設置成系統代理
- 過濾網絡請求
- 截取 iPhone 上的網絡封包
- 截取 Https 通訊信息
- 模擬慢速網絡
Charles 的簡介
Charles 是在 Mac 下常用的網絡封包截取工具,在做移動開發時,我們為了調試與服務器端的網絡通訊協議,常常需要截取網絡封包來分析。
Charles 通過將自己設置成系統的網絡訪問代理服務器,使得所有的網絡訪問請求都通過它來完成,從而實現了網絡封包的截取和分析。
除了在做移動開發中調試端口外,Charles 也可以用于分析第三方應用的通訊協議。配合 Charles 的 SSL 功能,Charles 還可以分析 Https 協議。
附:可以去Charles 的官方網站下載最新版本,Charles破解
將 Charles 設置成系統代理
啟動 Charles 后,第一次 Charles 會請求你給它設置系統代理的權限。你可以輸入登錄密碼授予 Charles 該權限。你也可以忽略該請求,然后在需要將 Charles 設置成系統代理時,選擇菜單中的 “Proxy” -> “Mac OS X Proxy” 來將 Charles 設置成系統代理。如下所示:
??,你在Safari上進行的網絡請求出現在 Charles 的界面中了。
注:Chrome 和 Firefox 瀏覽器默認并不使用系統的代理服務器設置,而 Charles 是通過將自己設置成代理服務器來完成封包截取的,所以在默認情況下無法截取 Chrome 和 Firefox 瀏覽器的網絡通訊內容。如果你需要截取的話,在 Chrome 中設置成使用系統的代理服務器設置即可,或者直接將代理服務器設置成 127.0.0.1:8888 也可達到相同效果。
過濾網絡請求
- 方法一:在主界面的中部的 Filter 欄中填入需要過濾出來的關鍵字。例如http://www.lxweimin.com , 那么只需要在 Filter 欄中填入 www.jianshu 即可。
- 方法二:在 Charles 的菜單欄選擇 “Proxy”->”Recording Settings”,然后選擇 Include 欄,選擇添加一個項目,然后填入需要監控的協議,主機地址,端口號。這樣就可以只截取目標網站的封包了。如下圖所示:
通常情況下,我們使用方法一做一些臨時性的封包過濾,使用方法二做一些經常性的封包過濾。 - 方法三:在想過濾的網絡請求上右擊,選擇 “Focus”,之后在 Filter 一欄勾選上 Focussed 一項,如下圖所示:
這種方式可以臨時性的,快速地過濾出一些沒有通過關鍵字的一類網絡請求。
截取 iPhone 上的網絡封包
Charles 通常用來截取本地上的網絡封包,但是當我們需要時,我們也可以用來截取其它設備上的網絡請求。下面我就以 iPhone 為例,講解如何進行相應操作。
-
Charles 上的設置
要截取 iPhone 上的網絡請求,我們首先需要將 Charles 的代理功能打開。在 Charles 的菜單欄上選擇 “Proxy”->”Proxy Settings”,填入代理端口 8888,并且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上的設置。如下圖所示:
-
iPhone 上的設置
1.首先我們需要獲取 Charles 運行所在電腦的 IP 地址,Charles 的頂部菜單的 “Help”->”Local IP Address”,即可在彈出的對話框中看到 IP 地址,如下圖所示:
2.在 iPhone 的 “ 設置 “->” 無線局域網 “ 中,可以看到當前連接的 wifi 名,通過點擊右邊的詳情鍵,可以看到當前連接上的 wifi 的詳細信息,包括 IP 地址,子網掩碼等信息。在其最底部有「HTTP 代理」一項,我們將其切換成手動,然后填上 Charles 運行所在的電腦的 IP,以及端口號 8888,如下圖所示:
3.設置好之后,我們打開 iPhone 上的任意需要網絡通訊的程序,就可以看到 Charles 彈出 iPhone 請求連接的確認菜單,點擊 “Allow” 即可完成設置。
截取 Https 通訊信息
安裝證書
如果你需要截取分析 Https 協議相關的內容。那么需要安裝 Charles 的 CA 證書。具體步驟如下。-
首先我們需要在 Mac 電腦上安裝證書。點擊 Charles 的頂部菜單,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”,然后輸入系統的帳號密碼,即可在 KeyChain 看到添加好的證書。如下圖所示:
需要注意的是,即使是安裝完證書之后,Charles 默認也并不截取 Https 網絡通訊的信息,如果你想對截取某個網站上的所有 Https 網絡請求,需要選擇 SSL proxy,官網提示如下:
Choosing hosts to SSL Proxy
You must specifically identify the host names you want to enable SSL Proxying on. The list is in the Proxy Settings, SSL tab. You can also right-click on a host name in the structure view and turn on or off SSL Proxying.
After adding a host name to the SSL Proxying list you may need to restart Charles for existing browser sessions to change.
If you want to SSL Proxy all host names then enter * into the host names list in the SSL Proxying Settings.
這樣,對于該 Host 的所有 SSL 請求可以被截取到了。
截取移動設備中的 Https 通訊信息
-
如果我們需要在 iOS 或 Android 機器上截取 Https 協議的通訊內容,還需要在手機上安裝相應的證書。點擊 Charles 的頂部菜單,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,然后就可以看到 Charles 彈出的簡單的安裝教程。如下圖所示:
- 按照我們之前說的教程,在設備上設置好 Charles 為代理后,在手機瀏覽器中訪問地址:http://charlesproxy.com/getssl, 即可打開證書安裝的界面,安裝完證書后,就可以截取手機上的 Https 通訊內容了。不過同樣需要注意,默認情況下 Charles 并不做截取,你還需要在要截取的網絡請求上右擊,選擇 SSL proxy 菜單項。
模擬慢速網絡
-
在做移動開發的時候,我們常常需要模擬慢速網絡或者高延遲的網絡,以測試在移動網絡下,應用的表現是否正常。Charles 對此需求提供了很好的支持。
在 Charles 的菜單上,選擇 “Proxy”->”Throttle Setting” 項,在之后彈出的對話框中,我們可以勾選上 “Enable Throttling”,并且可以設置 Throttle Preset 的類型。如下圖所示:
- 如果我們只想模擬指定網站的慢速網絡,可以再勾選上圖中的 “Only for selected hosts” 項,然后在對話框的下半部分設置中增加指定的 hosts 項即可。