2019-07-04

使用Charles抓包

2017-07-22

工具

工具

Charles 是在 Mac 下常用的截取網(wǎng)絡(luò)封包的工具(Win 環(huán)境也已支持),在移動端開發(fā)過程中,我們常需要截取網(wǎng)絡(luò)包分析服務(wù)端的通訊協(xié)議。Charles 將自己設(shè)置成系統(tǒng)的網(wǎng)絡(luò)訪問代理服務(wù)器,不僅可以提供 SSL 代理,還支持流量的控制、支持重發(fā)網(wǎng)絡(luò)請求、支持修改網(wǎng)絡(luò)請求參數(shù)、支持網(wǎng)絡(luò)響應(yīng)截獲并動態(tài)修改。

安裝Charles

從 Charles 的?官方網(wǎng)站?下載最新的安裝包,下載晚完成安裝即可。

Charles 是付費軟件,當然免費狀態(tài)也可以使用??梢允褂萌缦滦畔⑼瓿勺裕?/p>

Registered Name: https://zhile.io

License Key: 48891cf209c6d32bf4

如果注冊失敗,可以嘗試?這種方法。

設(shè)置成系統(tǒng)代理服務(wù)器

由于 Charles 是通過將自己設(shè)置成代理服務(wù)器來完成封包截取的,所以第一步是需要將 Charles 設(shè)置成系統(tǒng)的代理服務(wù)器。

啟動 Charles 后,菜單中的 “Proxy” -> “Windos Proxy(或者Mac OS X Proxy)”, 來將 Charles 設(shè)置成系統(tǒng)代理。如下所示:

配置后,就可以在界面中看到截取的網(wǎng)絡(luò)請求。但是,Chrome 和 Firefox 瀏覽器默認并不使用系統(tǒng)的代理服務(wù)器設(shè)置, 所以需要將 Chrome 和 Firefox 設(shè)置成使用系統(tǒng)的代理服務(wù)器,或者直接設(shè)置成地址127.0.0.1:8888。

如果 Chrome 已安裝了 Host Switch Plus 插件,則需要暫時關(guān)閉。

過濾網(wǎng)絡(luò)請求

一般情況下,我們只需要監(jiān)聽指定服務(wù)器上發(fā)送的請求,可以使用如下辦法解決:

方式1:在主界面 “Sequence” -> “Filter” 欄位置輸入需要過濾的關(guān)鍵字即可。例如輸入fanhaobai,則過濾輸出只包含 fanhaobai 信息的請求。

方式2:在 Charles 的菜單欄選擇 “Proxy” -> ”Recording Settings”,并選擇 Include 欄,添加一條永久過濾規(guī)則,主要填入需要截取網(wǎng)站的協(xié)議、主機地址、端口號。

方式3:右擊需要過濾的網(wǎng)絡(luò)請求,選擇 “Focus” 選項即可。

方式 1 和方式 3 可以快速地過濾臨時性網(wǎng)絡(luò)請求,使用方式 2 過濾永久性網(wǎng)絡(luò)請求。

截取移動設(shè)備網(wǎng)絡(luò)包

Charles 除了可以截取本地的網(wǎng)絡(luò)包,作為代理服務(wù)器后,同樣可以截取移動設(shè)備的網(wǎng)絡(luò)請求包。

設(shè)置CHARLES

截取移動設(shè)備網(wǎng)絡(luò)包時,需要先將 Charles 的代理功能打開。在 Charles 的菜單欄上選擇 “Proxy” -> ”Proxy Settings”,填入默認代理端口 8888,且勾選 “Enable transparent HTTP proxying” 就完成了設(shè)置。如下圖所示:

IPHONE

首先,通過 Charles 的頂部菜單的 “Help” -> ”Local IP Address” 獲取本地電腦的 IP 地址,例如我的本機電腦為192.168.1.102。

在 iPhone 的 ”設(shè)置“ -> ”無線局域網(wǎng)“ 中,對當前局域網(wǎng)連接設(shè)置 HTTP 代理(端口默認為 8888),如下圖:

設(shè)置完成后,打開 iPhone 的任意程序,在 Charles 就可以彈出連接確認窗口,點擊 ”Allow” 即可。

ANDROID

在 Android 上操作同 iPhone,只是某些系統(tǒng)設(shè)置方式不一致而已。

截取 Https 包

如果需要截取并分析 Https 協(xié)議信息,需要安裝 Charles 的 CA 證書。

本地通信信息

點擊 Charles 的頂部菜單,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”,即可完成證書的安裝。如下圖所示:

建議將證書安裝在 ”受信任的根證書頒發(fā)機構(gòu)“ 存儲區(qū)。

特別說明,即使安裝完證書后,Charles 默認是不會截取 Https 網(wǎng)絡(luò)通訊的信息。對于需要截取分析站點 Https 請求,可以右擊請求記錄,選擇 SSL proxy 即可,如圖所示:

移動設(shè)備的通信信息

如果在 iPhone 或 Android 機器上截取 Https 協(xié)議的通訊內(nèi)容,需要手機上安裝相應(yīng)的證書。點擊 Charles 的頂部菜單,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,然后按照 Charles 的提示的安裝教程安裝即可。如下圖所示:

在上述?截取移動設(shè)備網(wǎng)絡(luò)包?為手機設(shè)置好代理后,手機瀏覽器中訪問地址http://chls.pro/ssl,即可打開證書安裝的界面。安裝完證書后,就可以截取手機上的 Https 通訊內(nèi)容了。注意,同樣需要在要截取的網(wǎng)絡(luò)請求上右擊,選擇 SSL proxy 菜單項。

如果 SSL proxy 后出現(xiàn)如下錯誤:

可將證書設(shè)置為信任即可,例如 iPhone 下 “設(shè)置” -> “通用” -> “關(guān)于本機” -> “證書信任設(shè)置” 下:

模擬慢請求

在做 App 開發(fā)調(diào)試時,經(jīng)常需要模擬慢請求或者高延遲網(wǎng)絡(luò),以測試應(yīng)用在網(wǎng)絡(luò)異常情況變現(xiàn)是否正常,而這使用 Charles 就輕松幫我們完成。

在 Charles 的菜單上,選擇 “Proxy” -> ”Throttle Setting” 項,在彈出的窗口中,可以勾選上 “Enable Throttling”,并且可以設(shè)置 Throttle Preset 的類型。如下圖所示:

當然可以通過 “Only for selected hosts” 項,只模擬指定站點的慢請求。

修改請求內(nèi)容

有時為了調(diào)試服務(wù)端的接口,我們需要反復(fù)嘗試不同參數(shù)的網(wǎng)絡(luò)請求。Charles 可以方便地提供網(wǎng)絡(luò)請求的修改和重發(fā)功能。只需在該網(wǎng)絡(luò)請求上點擊右鍵,選擇 “Compose”,即可創(chuàng)建一個可編輯的網(wǎng)絡(luò)請求。

我們可以修改該請求的任何信息,包括 URL 地址、端口、參數(shù)等,之后點擊 “Execute” 即可發(fā)送該修改后的網(wǎng)絡(luò)請求。Charles 支持我們多次修改和發(fā)送該請求,這對于我們和服務(wù)器端調(diào)試接口非常方便,如下圖所示:

修改響應(yīng)內(nèi)容

有候為方便我們調(diào)試一些特殊情況,需要服務(wù)器返回一些特定的響應(yīng)內(nèi)容。例如數(shù)據(jù)為空或者數(shù)據(jù)異常的情況,部分耗時的網(wǎng)絡(luò)請求超時的情況等。通常讓服務(wù)端配合,構(gòu)造相應(yīng)的數(shù)據(jù)顯得會比較麻煩,這個時候,使用 Charles 就可以滿足我們的需求。

根據(jù)不同的場景需求,Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以達到修改服務(wù)器返回內(nèi)容的目的。這三者在功能上的差異是:

Map 功能適合長期地將某一些請求重定向到另一個網(wǎng)絡(luò)地址或本地文件。

Rewrite 功能適合對網(wǎng)絡(luò)請求進行一些正則替換。

Breakpoints 功能適合做一些臨時性的修改。

MAP功能

Charles 的 Map 功能分 Map Remote 和 Map Local 兩種。Map Remote 是將指定的網(wǎng)絡(luò)請求重定向到另一個網(wǎng)址請求地址,而 Map Local 是將指定的網(wǎng)絡(luò)請求重定向到本地文件。在 Charles 的菜單中,選擇 “Tools” -> ”Map Remote” 或 “Map Local” ,即可進入到相應(yīng)功能的設(shè)置頁面。

對于 Map Remote 功能(選中 Enable Map Remote),我們需要填寫網(wǎng)絡(luò)重定向的源地址和目的地址,對于其他非必需字段可以留空。下圖是一個示例,我將測試環(huán)境t.fanhaobai.com的請求重定向到了生產(chǎn)環(huán)境www.fanhaobai.com。

對于 Map Local 功能(選中 Enable Map Local),我們需要填寫的重定向的源地址和本地的目標文件。對于有一些復(fù)雜的網(wǎng)絡(luò)請求結(jié)果,我們可以先使用 Charles 提供的 “Save Response…” 功能,將請求結(jié)果保存到本地并稍加修改,成為我們的目標映射文件。

REWRITE功能

Rewrite 功能功能適合對某一類網(wǎng)絡(luò)請求進行一些正則替換,以達到修改結(jié)果的目的。

例如,將服務(wù)端返回的www.fanhaobai.com全部替換為www.baidu.com,如下:

將響應(yīng)中的www.fanhaobai.com全部替換為www.baidu.com。于是在 “Tools” -> “Rewrite” 下配置如下的規(guī)則:

選中 “Enable Rewrite” 啟用 Rewrite 功能 ,響應(yīng)如下:

BREAKPOINTS功能

上面提供的 Rewrite 功能最適合做批量和長期的替換,但是很多時候,我們只是想臨時修改一次網(wǎng)絡(luò)請求結(jié)果,這個時候,我們最好使用 Breakpoints 功能。

在需要打斷點的請求上右擊并選擇 “Breakpoints”,重新請求該地址,可以發(fā)現(xiàn)客戶端被掛起,Charles 操作界面如下:

此時可以修改請求信息,但這里只修改響應(yīng)信息,故點擊 “Execute” 后選擇 “Edit Response” 項,修改 title 為fanhaobai.com,如下:

繼續(xù)點擊 “Execute” ,可看見響應(yīng)的 title 已經(jīng)變?yōu)閒anhaobai.com。

壓力測試

我們可以使用 Charles 的 Repeat 功能來簡單地測試服務(wù)器的并發(fā)處理能力。在想壓測的網(wǎng)絡(luò)請求上右擊,然后選擇 “Repeat Advanced” 項,如下所示:

這樣我們就可以在上圖的對話框中,選擇壓測的并發(fā)線程數(shù)以及壓測次數(shù),確定之后,即可開始壓力測試了。

反向代理

Charles 的反向代理功能允許我們將本地的端口映射到遠程的另一個端口上。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • //button.titleLabel.textAlignment = NSTextAlignmentLeft; ...
    hank009閱讀 2,103評論 0 0
  • 今天周三,大寶鬧鐘響了也沒起,等我收拾好小寶,一看還有十五分鐘七點,大寶竟然一點動靜也沒有。我在我們房間喊了兩次,...
    明懿媽媽閱讀 166評論 0 0
  • 今天起得比較早,不到5點就起來了,本意是要寫東西的,因為已經(jīng)連續(xù)3天都是要等到第二天上午才提交作業(yè)了,這個dead...
    天外來客人閱讀 308評論 0 0
  • 朵朵含煙帶雨嬌,片片如雪紛飛飄。 無奈佳顏暮春歸,零落泥土芳魂銷。
    文采樂閱讀 618評論 1 11

友情鏈接更多精彩內(nèi)容