Charles是一款常用的網絡封包截取工具,在測試與服務器端的網絡通訊時,常常需要截取網絡封包來分析。Charles通過將自己設置成系統的網絡訪問代理服務器,所有的網絡訪問請求都通過它來完成,從而實現了網絡封包的截取和分析。
一.Charles的下載安裝
(1)下載地址:https://www.charlesproxy.com/download/
(2)注冊賬號(任意版本的Charles都可用)
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
二.Charles的基本功能介紹
1:主界面
2:菜單
Charles 的主菜單包括:File、Edit、View、Proxy、Tools、Window、Help。用的最多的主菜單分別是 Proxy 和 Tools。
(1) Proxy菜單
Proxy 菜單包含以下功能:
Start/Stop Recording:開始/停止記錄會話。
Start/Stop Throttling:開始/停止節流。
Enable/Disable Breakpoints:開啟/關閉斷點模式。
Recording Settings:記錄會話設置。
Throttle Settings:模擬網速設置。
Breakpoint Settings:斷點設置。
Reverse Proxies Settings:反向代理設置。
Port Forwarding Settings:端口轉發。
MacOS Proxy:記錄計算機上的所有請求。
Proxy Settings:代理設置。
SSL Proxying Settings:SSL 代理設置。
Access Control Settings:訪問控制設置。
External Proxy Settings:外部代理設置。
Web Interface Settings:Web 界面設置。
(2)Tools菜單
Tools 菜單包含以下功能:
No Caching Settings:禁用緩存設置。
Block Cookies Settings:禁用 Cookie設置。
Map Remote Settings:遠程映射設置。
Map Local Settings:本地映射設置。
Rewrite Settings:重寫設置。
Black List Settings:黑名單設置。
White List Settings:白名單設置。
DNS Spoofing Settings:DNS 欺騙設置。
Mirror Settings:鏡像設置。
Auto Save Settings:自動保存設置。
Client Process Settings:客戶端進程設置。
Compose:編輯修改。
Repeat:重復發包。
Repeat Advanced:高級重復發包。
Validate:驗證。
Publish Gist:發布要點。
Import/Export Settings:導入/導出設置。
Profiles:配置文件。
Publish Gist Settings:發布要點設置。
在后續的內容中會介紹常用的功能。
三.Charles的基本功能
(1)Session
Session有兩種展示結構:structure和sequence
Structure:按照不同hosts域名分組展示請求(如下圖3.1):
圖3.1
Sequence:按照請求順序來展示請求(如下圖3.2):
圖3.2
如果請求太多看起來比較麻煩,Charles有一個Filter功能,可以輸入關鍵字來快速篩選出URL中帶有關鍵字的網絡請求。
(2)使用Structure結構在session上右鍵查看支持的功能:
① Repeat、Repeat Advanced…:重復執行請求,Repeat Advanced可以指定重復的遍數。這樣可以選中多會話,在右側的chart查看請求的時間等性能
② Focus:在某個域名下點擊Focus,會將當前域名放到頂部,沒有Focus的域名統一放到下面的Other Hosts下(可以在View->Focused Hosts中統一編輯)
③ 黑白名單(可以在Toos->Black List/Write List下統一更改)
Black List:黑名單中的域名不能聯網
Write List:白名單開啟后,只有白名單中的網絡可以訪問網絡,不在白名單中的不能訪問網絡
(如果一個域名既在Black List中也在Write List中,則也不能訪問網絡)
④ Export:導出會話Session保存到本地,然后下次可以通過File->Open Session打開本地的Session
⑤ Compare:左側列表選擇兩個Session,右鍵時會出現該項,可以比對兩個請求的入參和出參
⑥ Compose:即工具欄上的鋼筆的圖標,編輯請求然后執行
四.手機通過Charles抓取https包
(1)配置Charles,允許抓取https的包
① :Proxy->SSL Proxying Settings…,勾選Enable SSL Proxying,Add一個locations,通過通配符* 抓取所有域名的https。
Host可以使用通配符或?進行匹配,如果想抓取所有域名的,直接用即可(Add一個新的Location,然后直接點OK就創建了),如果特定想抓取某個域名的,可以直接在Host那里寫具體Host。
② :Charles設置Port值,Charles按照下圖方式配置Port
路徑:Proxy->Proxy Settings…
(2)手機端配置PC代理
① 在手機的WIFI設置里,修改網絡,手動添加代理
代理服務器主機名:使用PC的本機IP地址(help-Local IP Address可查到)
代理服務器端口:使用上一步設置的Port值
② 第一次配置完代理,需要在PC端進行允許操作,詳見下圖的Allow(如果不小心關了下面的彈框,可以重新配置一下手機代理或在Charles里手動添加)
Charles里添加允許訪問的IP的方法:
③ PC端Charles安裝https證書
Help->SSL Proxying ->Install Charles Root Certificate,然后在鑰匙串中信任證書即可
④ 手機端下載Charles的證書(兩種方式)
1:根據Help->SSL Proxying ->Install Charles Root Certificate on Mobile Device or Remote Browser…獲得下載證書的地址,操作如下圖:
將下載到PC端證書放到手機中,在設置中信任即可。
2:手機瀏覽器打開此網址下載證書:chls.pro/ssl
特殊機型說明如下:
A:小米安裝比較特殊,需要在設置->其他高級設置->安全和隱私->憑據存儲->從存儲設備安裝->選擇下載的證書安裝
B:ios10以上系統,需要在設置->通用->關於本機,信任安裝的證書
證書安裝好了之后就可以抓包了
抓取包注意事項:如果要抓取Safari等瀏覽器的包,必須勾選Proxy->macOS Proxy,否則沒進行抓包
五.模擬請求做mock,使用斷點,Map和Rewrite
(1)驗證server端的請求和結果
直接選中請求,點擊控制欄上的編輯,然后修改請求后執行。
(2)APP或者PC端等待server的數據返回
這種可以使用打斷點的方式,或者通過Map Remote /Map Local重定向來獲得結果。
① 打斷點
Session上右鍵選擇Breakpoints,或者通過頂部工具欄的Proxy->Breakpoints Settings來編輯斷點的請求,需要點開導航欄上的開啟斷點(Disable Breakpoints)才可以生效斷點
添加斷點后的內容如下圖所示:
當再有符合斷點規則(Host、Path、Query)的請求過來時,會自動進入斷點頁面,斷點分為兩部分:
1:請求發到服務器前,此時可以修改request的入參等信息
2:服務器返回的數據返回給終端(APP或PC)之前,此時可以修改response的內容
② 通過Map Remote:是將某個網絡請求重定向到另一個網絡請求
可以在Session上右鍵Map Remote設定規則,或Tools->Map Remote來管理所有Map Remote(勾選Enable Map Remote才會啟用)
請求可以使用通配符*等來匹配,Map To可以是一個接口請求,可以是一個遠程文件(js或html文件等)
③ 使用Map Local:使用本地一個文件的內容作為返回值
可以在Session上右鍵Map Local設定規則,或Tools->Map Local來管理所有Map Local(勾選Enable Map Local才會啟用)
④ mock的方法,Rewrite
在Tools->Rewrite中添加規則,Enable Rewrite勾選才會去走重寫
Rewrite:可以添加規則修改請求的header、參數等各種信息,比Map更靈活,而且針對同一個請求可以添加多個規則,但如果出問題不容易調試
比如下面的例子,添加了一個叫做測試的規則,右側Location上面添加要匹配的請求,下面填寫重寫規則(右面的彈框,Type可以選擇 header rules, URL rules, query parameter rules, and body rules)
(3)指定Hosts
有時候要把域名指向某一個固定的IP地址,除了修改PC本機的hosts文件外,也可以在Charles中設置
Tools->DNS Spoofing Settings中設置hosts
六.模擬網速
有時測試需要限制網速,在Proxy->Throttle Settings中配置,然后再Proxy->Strat Throttling或工具欄上小烏龜的圖標開啟或停止限流
勾選 Enable Throttling 啟用網速模擬配置,在 Throttle Preset 下選擇網絡類型即可,具體設置可以根據實際情況自行設置。如果只想模擬指定網站的慢速網絡,可以再勾選上圖中的 Only for selected hosts 項,然后在對話框的下半部分設置中增加指定的 hosts 項即可。
Throttle Settings 視圖中的選項含義如下:
Bandwidth:帶寬
Utilistation:利用百分比
Round-trip:往返延遲
MTU:字節