使用Charles抓包
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 的?官方網(wǎng)站?下載最新的安裝包,下載晚完成安裝即可周循。
Charles 是付費軟件强法,當(dāng)然免費狀態(tài)也可以使用万俗⊥宓眩可以使用如下信息完成注冊:
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
如果注冊失敗,可以嘗試?這種方法闰歪。
由于 Charles 是通過將自己設(shè)置成代理服務(wù)器來完成封包截取的嚎研,所以第一步是需要將 Charles 設(shè)置成系統(tǒng)的代理服務(wù)器。
啟動 Charles 后库倘,菜單中的 “Proxy” -> “Windos Proxy(或者M(jìn)ac OS X Proxy)”临扮, 來將 Charles 設(shè)置成系統(tǒng)代理。如下所示:
配置后教翩,就可以在界面中看到截取的網(wǎng)絡(luò)請求杆勇。但是,Chrome 和 Firefox 瀏覽器默認(rèn)并不使用系統(tǒng)的代理服務(wù)器設(shè)置饱亿, 所以需要將 Chrome 和 Firefox 設(shè)置成使用系統(tǒng)的代理服務(wù)器蚜退,或者直接設(shè)置成地址127.0.0.1:8888闰靴。
如果 Chrome 已安裝了 Host Switch Plus 插件,則需要暫時關(guān)閉钻注。
一般情況下蚂且,我們只需要監(jiān)聽指定服務(wù)器上發(fā)送的請求,可以使用如下辦法解決:
方式1:在主界面 “Sequence” -> “Filter” 欄位置輸入需要過濾的關(guān)鍵字即可幅恋。例如輸入fanhaobai杏死,則過濾輸出只包含 fanhaobai 信息的請求。
方式2:在 Charles 的菜單欄選擇 “Proxy” -> ”Recording Settings”捆交,并選擇 Include 欄淑翼,添加一條永久過濾規(guī)則,主要填入需要截取網(wǎng)站的協(xié)議品追、主機(jī)地址窒舟、端口號。
方式3:右擊需要過濾的網(wǎng)絡(luò)請求诵盼,選擇 “Focus” 選項即可惠豺。
方式 1 和方式 3 可以快速地過濾臨時性網(wǎng)絡(luò)請求,使用方式 2 過濾永久性網(wǎng)絡(luò)請求风宁。
Charles 除了可以截取本地的網(wǎng)絡(luò)包洁墙,作為代理服務(wù)器后,同樣可以截取移動設(shè)備的網(wǎng)絡(luò)請求包戒财。
截取移動設(shè)備網(wǎng)絡(luò)包時热监,需要先將 Charles 的代理功能打開。在 Charles 的菜單欄上選擇 “Proxy” -> ”Proxy Settings”饮寞,填入默認(rèn)代理端口 8888孝扛,且勾選 “Enable transparent HTTP proxying” 就完成了設(shè)置。如下圖所示:
首先幽崩,通過 Charles 的頂部菜單的 “Help” -> ”Local IP Address” 獲取本地電腦的 IP 地址苦始,例如我的本機(jī)電腦為192.168.1.102。
在 iPhone 的 ”設(shè)置“ -> ”無線局域網(wǎng)“ 中慌申,對當(dāng)前局域網(wǎng)連接設(shè)置 HTTP 代理(端口默認(rèn)為 8888)陌选,如下圖:
設(shè)置完成后,打開 iPhone 的任意程序蹄溉,在 Charles 就可以彈出連接確認(rèn)窗口咨油,點擊 ”Allow” 即可。
在 Android 上操作同 iPhone柒爵,只是某些系統(tǒng)設(shè)置方式不一致而已役电。
如果需要截取并分析 Https 協(xié)議信息,需要安裝 Charles 的 CA 證書棉胀。
點擊 Charles 的頂部菜單法瑟,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”囱晴,即可完成證書的安裝。如下圖所示:
建議將證書安裝在 ”受信任的根證書頒發(fā)機(jī)構(gòu)“ 存儲區(qū)瓢谢。
特別說明畸写,即使安裝完證書后,Charles 默認(rèn)是不會截取 Https 網(wǎng)絡(luò)通訊的信息氓扛。對于需要截取分析站點 Https 請求枯芬,可以右擊請求記錄,選擇 SSL proxy 即可采郎,如圖所示:
如果在 iPhone 或 Android 機(jī)器上截取 Https 協(xié)議的通訊內(nèi)容千所,需要手機(jī)上安裝相應(yīng)的證書。點擊 Charles 的頂部菜單蒜埋,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate on a Mobile Device or Remote Browser”淫痰,然后按照 Charles 的提示的安裝教程安裝即可。如下圖所示:
在上述?截取移動設(shè)備網(wǎng)絡(luò)包?為手機(jī)設(shè)置好代理后整份,手機(jī)瀏覽器中訪問地址http://chls.pro/ssl待错,即可打開證書安裝的界面。安裝完證書后烈评,就可以截取手機(jī)上的 Https 通訊內(nèi)容了火俄。注意,同樣需要在要截取的網(wǎng)絡(luò)請求上右擊讲冠,選擇 SSL proxy 菜單項瓜客。
如果 SSL proxy 后出現(xiàn)如下錯誤:
可將證書設(shè)置為信任即可,例如 iPhone 下 “設(shè)置” -> “通用” -> “關(guān)于本機(jī)” -> “證書信任設(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 的類型称杨。如下圖所示:
當(dāng)然可以通過 “Only for selected hosts” 項肌毅,只模擬指定站點的慢請求。
有時為了調(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)試接口非常方便,如下圖所示:
有候為方便我們調(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 功能贴彼,都可以達(dá)到修改服務(wù)器返回內(nèi)容的目的。這三者在功能上的差異是:
Map 功能適合長期地將某一些請求重定向到另一個網(wǎng)絡(luò)地址或本地文件埃儿。
Rewrite 功能適合對網(wǎng)絡(luò)請求進(jìn)行一些正則替換器仗。
Breakpoints 功能適合做一些臨時性的修改。
Charles 的 Map 功能分 Map Remote 和 Map Local 兩種童番。Map Remote 是將指定的網(wǎng)絡(luò)請求重定向到另一個網(wǎng)址請求地址精钮,而 Map Local 是將指定的網(wǎng)絡(luò)請求重定向到本地文件。在 Charles 的菜單中剃斧,選擇 “Tools” -> ”Map Remote” 或 “Map Local” 轨香,即可進(jìn)入到相應(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),我們需要填寫的重定向的源地址和本地的目標(biāo)文件简逮。對于有一些復(fù)雜的網(wǎng)絡(luò)請求結(jié)果球散,我們可以先使用 Charles 提供的 “Save Response…” 功能,將請求結(jié)果保存到本地并稍加修改散庶,成為我們的目標(biāo)映射文件蕉堰。
Rewrite 功能功能適合對某一類網(wǎng)絡(luò)請求進(jìn)行一些正則替換凌净,以達(dá)到修改結(jié)果的目的。
例如屋讶,將服務(wù)端返回的www.fanhaobai.com全部替換為www.baidu.com冰寻,如下:
將響應(yīng)中的www.fanhaobai.com全部替換為www.baidu.com。于是在 “Tools” -> “Rewrite” 下配置如下的規(guī)則:
選中 “Enable Rewrite” 啟用 Rewrite 功能 皿渗,響應(yīng)如下:
上面提供的 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 的反向代理功能允許我們將本地的端口映射到遠(yuǎn)程的另一個端口上撩匕。