摘自:http://www.51ste.com/share/det-402.html
一、前言
我們經(jīng)常在工作中使用到各種工具去對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行攔截苏携。抓包的工具有很多,適用于不同的平臺(tái)和場(chǎng)景,例如:Charles惧蛹、Fiddler、Wireshark等等刑枝,在windows下香嗓,使用Fiddler就非常的方便,但是它的缺陷在于沒有Mac的版本装畅,這讓使用mac的人員就十分苦惱靠娱。那么今天就其中一款抓包工具, Charles 進(jìn)行講解掠兄,Charles 是一款全平臺(tái)的抓包工具像云,所以可以在 Mac 下使用。
二蚂夕、Charles
1迅诬、什么是Charles
Charles 是一款比較常用的全平臺(tái)的網(wǎng)絡(luò)封包截取工具,而我們?cè)谧鲆苿?dòng)開發(fā)的時(shí)候婿牍,我們?yōu)榱苏{(diào)試侈贷、測(cè)試、分析等目的等脂,經(jīng)常需要與服務(wù)端的網(wǎng)絡(luò)通訊協(xié)議打交道铐维。Charles 可以幫我們截取網(wǎng)絡(luò)數(shù)據(jù)包來(lái)進(jìn)行分析。
Charles 通過將軟件本身設(shè)置成系統(tǒng)的網(wǎng)絡(luò)訪問代理服務(wù)器慎菲,使得所有的網(wǎng)絡(luò)請(qǐng)求都會(huì)走一遍 Charles 代理嫁蛇,從而 Charles 可以截取經(jīng)過它的請(qǐng)求,然后我們就可以對(duì)其進(jìn)行網(wǎng)絡(luò)包的分析露该。
Charles 是一款收費(fèi)的軟件睬棚,可以提供 30 天的免費(fèi)試用體驗(yàn)。試用期過后解幼,為付費(fèi)的用戶抑党,仍然可以繼續(xù)使用,但是每次使用時(shí)間不能超過 30 分鐘撵摆,并且啟動(dòng)時(shí)將會(huì)有 10s 的延遲底靠。所以如果只是偶爾使用一下,可以考慮一直使用免費(fèi)版本特铝,如果長(zhǎng)期依賴抓包的話暑中,可以選擇付費(fèi)或者其他你能想到的辦法來(lái)解決 Charles License 的問題壹瘟。
Charles 的功能非常強(qiáng)大,具體的還是以官方文檔為準(zhǔn)鳄逾,這里只是介紹一下開發(fā)和測(cè)試在工作中會(huì)用到的功能:
截取Http和Https網(wǎng)絡(luò)包稻轨。
支持重發(fā)網(wǎng)絡(luò)請(qǐng)求,方便后端調(diào)試雕凹。
支持修改網(wǎng)絡(luò)請(qǐng)求參數(shù)殴俱。
支持網(wǎng)絡(luò)請(qǐng)求的截取以及動(dòng)態(tài)修改請(qǐng)求響應(yīng)結(jié)果。
支持模擬限流網(wǎng)絡(luò)枚抵。
官網(wǎng):https://www.charlesproxy.com
這里使用的次新版线欲,v4.2.5 進(jìn)行講解,和舊版本相比汽摹,有一些界面的修改和增加了一下新的功能李丰,整體來(lái)說都差不多。
2竖慧、Charles的基本界面
打開Charles之后嫌套,在主頁(yè)面中逆屡,提供了兩種查看網(wǎng)絡(luò)包的視圖方式圾旨,分別是『Structure』和『Sequence』。
1魏蔗、Structure 視圖
Structure 視圖將網(wǎng)絡(luò)請(qǐng)求按請(qǐng)求的域名進(jìn)行分類砍的,將同域名的請(qǐng)求進(jìn)行分類。
可以看到莺治,Structure 視圖模式下廓鞠,所有的請(qǐng)求是以域名進(jìn)行分類顯示的,可以讓我們更關(guān)注同域名下的請(qǐng)求谣旁,當(dāng)然這里都被折疊起來(lái)了床佳,當(dāng)此域名下有接口鏈接被請(qǐng)求了,會(huì)閃一下榄审,這樣就可以讓我們發(fā)現(xiàn)哪些域名下的數(shù)據(jù)正在被請(qǐng)求砌们。
2、Sequence 視圖
Sequence 視圖模式下搁进,會(huì)將所有的網(wǎng)絡(luò)請(qǐng)求都按照訪問的時(shí)間從上到下進(jìn)行排序浪感。
和 Structure 一樣,該有的區(qū)域都有饼问,很直觀的顯示了當(dāng)前的請(qǐng)求鏈接影兽、請(qǐng)求數(shù)據(jù)、響應(yīng)數(shù)據(jù)等情況莱革。因?yàn)檫@里是按請(qǐng)求的先后順序進(jìn)行有序的排列峻堰,Charles 同時(shí)也提供了一個(gè)過濾請(qǐng)求的地方讹开,可以通過它來(lái)簡(jiǎn)單的過濾我們需要的請(qǐng)求再進(jìn)行查看。
在實(shí)際使用過程中茧妒,通常根據(jù)具體的需要在這兩種視圖之間來(lái)回切換萧吠。而對(duì)于某一個(gè)具體的網(wǎng)絡(luò)請(qǐng)求,Charles 也提供了詳細(xì)的請(qǐng)求內(nèi)容和響應(yīng)內(nèi)容桐筏,將發(fā)送的數(shù)據(jù)和顯示的數(shù)據(jù)均顯示出來(lái)纸型,對(duì)于一些常見的數(shù)據(jù)格式, Charles 還提供了一些格式化的操作梅忌,例如 JSON 內(nèi)容狰腌,可以切換到 JSON 標(biāo)簽下,它會(huì)按照 JSON 的格式進(jìn)行格式化牧氮,方便我們閱讀和查看琼腔,而圖片的請(qǐng)求也會(huì)在 Charles 中顯示縮略圖的預(yù)覽。
三踱葛、截取移動(dòng)設(shè)備的網(wǎng)絡(luò)封包
Charles 通常本身是可以直接截取本機(jī)上的網(wǎng)絡(luò)封包的丹莲,但是在現(xiàn)在互聯(lián)網(wǎng)公司來(lái)說,大部分使用到抓包的場(chǎng)景都是需要去抓一些移動(dòng)設(shè)備上的網(wǎng)絡(luò)請(qǐng)求尸诽,例如:iPhone甥材、Android 設(shè)備等,下面就以 iPhone 為例子性含,講解如何通過 Charles 抓取移動(dòng)設(shè)備上的網(wǎng)絡(luò)封包洲赵。
1、Charles對(duì)應(yīng)設(shè)置
既然 Charles 是做了一個(gè)本地代理商蕴,所以需要將代理功能打開叠萍,并設(shè)置一個(gè)固定的端口。默認(rèn)情況下绪商,端口號(hào)為:8888 苛谷。
可以通過菜單欄:proxy → Proxy Settings ,進(jìn)行查看當(dāng)前或者修改當(dāng)前代理端口格郁,并且保證 Enable transparent HTTP proxying 被勾選腹殿。
2、iPhone上的設(shè)置
如果像在移動(dòng)設(shè)備上指向 Charles 配置的代理理张,還需要知道本機(jī)的 IP 地址赫蛇。一般來(lái)說,我們都知道在 Ternimal 中使用 ifconfig 命令雾叭,也可查到當(dāng)前的 IP 地址悟耘。而 Charles 也提供了可視化的方式來(lái)查看當(dāng)前本機(jī)的 IP 地址。
通過頂部菜單:Help → Local IP Address 织狐,即可查看到當(dāng)前設(shè)備的 IP 地址暂幼。
知道當(dāng)前代理設(shè)備的 IP 地址之后筏勒,還需要在 iPhone 上設(shè)置 WIFI 的 HTTP 代理。注意這里的前提是旺嬉,iPhone 和 Charles 代理設(shè)備鏈接的是同一網(wǎng)絡(luò)管行。
在iPhone中,通過 設(shè)置 → 無(wú)線局域網(wǎng) 邪媳,查看當(dāng)前鏈接的 WIFI 點(diǎn)擊最右邊的感嘆號(hào)捐顷,進(jìn)入當(dāng)前 WIFI 的細(xì)節(jié)配置頁(yè)面,在最下面的 HTTP 代理中雨效,選擇「手動(dòng)」迅涮,然后填寫 Charles 代理機(jī)器的 IP 和 端口。
設(shè)置好之后徽龟,在 iPhone 上打開任意需要聯(lián)網(wǎng)的 App 叮姑,就可以看到 Charles 中彈出iPhone 請(qǐng)求鏈接的確認(rèn)菜單,點(diǎn)擊“Allow”即可完成設(shè)置据悔。
3传透、截取Https的網(wǎng)絡(luò)封包
在現(xiàn)在這個(gè)全網(wǎng)皆Https的環(huán)境下,一個(gè)App使用Https 是非常常見的极颓。而正常情況下朱盐,Charles 是不能截取Https的網(wǎng)絡(luò)包的,這涉及到 Https 的證書問題讼昆。
但是可以在 Charles 中托享,通過一些簡(jiǎn)單的配置骚烧,使其安裝 Charles 的 CA 證書浸赫。
具體步驟如下:
①在 Mac 上安裝 CA 證書。通過頂部菜單選擇:Help → SSL Proxying →? ? ?Install Charles Root Certificate赃绊,來(lái)安裝 CA 證書既峡。
②iPhone 中,通過訪問 http://charesproxy.com/getssl來(lái)下載安裝 Charlse 的 CA 證書碧查。
③在需要截取Https的請(qǐng)求上运敢,選擇 Enable SSL Proxying。
完成上面的步驟之后忠售,就可以在 Charles 中传惠,截取到 iPhone 設(shè)備上的 Https 請(qǐng)求了。
在這個(gè)配置的過程中稻扬,可能會(huì)出現(xiàn)一些問題卦方,可能按照步驟依然抓取不了 Https 的網(wǎng)絡(luò)包。主要的原因在于: CA 證書需要被 MacOS 信任泰佳。
Charles 的 CA 證書盼砍,需要被 MaxOS 信任尘吗,安裝好證書之后,通常會(huì)彈出『鑰匙串訪問』的窗口等待確認(rèn)浇坐,當(dāng)發(fā)現(xiàn)剛才安裝的 Charles 證書右下角有各 x 號(hào)睬捶,表示當(dāng)前證書并不被 MacOS 信任。
需要選中這個(gè) CA 證書近刘,并指定為信任即可擒贸,在這個(gè)過程中,需要輸入密碼進(jìn)行授權(quán)觉渴。
這樣酗宋,我們就可以抓取iPhone手機(jī)上的請(qǐng)求了,當(dāng)然該工具還有著很多強(qiáng)大的功能疆拘,大家可以根據(jù)需要前去查找蜕猫。