一、charles的使用
1.1 ?charles的說明
Charles其實是一款代理服務(wù)器生棍,通過過將自己設(shè)置成系統(tǒng)(電腦或者瀏覽器)的網(wǎng)絡(luò)訪問代理服務(wù)器捧杉,然后截取請求和請求結(jié)果達到分析抓包的目的呈宇。該軟件是用Java寫的,能夠在Windows扒俯,Mac奶卓,Linux上使用。安裝Charles的時候要先裝好Java環(huán)境撼玄。
Charles的主要功能:
(1)截取Http 和 Https 網(wǎng)絡(luò)封包夺姑。
(2)支持重發(fā)網(wǎng)絡(luò)請求,方便后端調(diào)試掌猛。
(3)支持修改網(wǎng)絡(luò)請求參數(shù)盏浙。
(4)支持網(wǎng)絡(luò)請求的截獲并動態(tài)修改。
(5)支持模擬慢速網(wǎng)絡(luò)。
1.1.1 charles的下載和安裝
1废膘、安裝包的下載
(1)進入官網(wǎng)下載地址:http://www.charlesproxy.com/竹海,點擊鏈接下載30天免費試用版本。
PS:Charles 是收費軟件丐黄,可以免費試用 30 天斋配。試用期過后,未付費的用戶仍然可以繼續(xù)使用灌闺,但是每次使用時間不能超過 30 分鐘艰争,并且啟動時將會有 10 秒種的延時。因此桂对,該付費方案對廣大用戶還是相當友好的甩卓,即使你長期不付費,也能使用完整的軟件功能接校。只是當你需要長時間進行封包調(diào)試時猛频,會因為 Charles 強制關(guān)閉而遇到影響狮崩。
(2)安裝方法下載破解版蛛勉,安裝即可
安裝包地址:https://pan.baidu.com/s/1caploU
破解補丁地址:https://pan.baidu.com/s/1hrRpzda
(1)按照步驟下載安裝第一個安裝包;
(2)將破解補丁包粘貼到charles的lib文件下睦柴,然后將原來的命名為charles的文件替換掉 即可
1.1.2 charles與手機/電腦的連接
1.1.2.1 charles與手機端的連接
使手機和電腦在一個局域網(wǎng)內(nèi)诽凌,不一定非要是一個ip段,只要是同一個路由器下就可以了坦敌。
(1)首先利用cmd -config命令查看自己電腦的ip地址
(2)然后在手機端的wifi代理設(shè)置那里去進行相關(guān)的配置設(shè)置侣诵。
這里的代理服務(wù)器地址填寫為電腦的ip地址,然后端口這里寫8888(這個是charles的默認設(shè)置)狱窘,如果自己修改了就寫成自己所修改的端口就可以了杜顺。
配置完成,會看到一個charles與手機端的連接提示彈窗蘸炸,選擇allo即可躬络。
(3)手機端抓包https
上述1、2步驟搭儒,只針對http請求穷当。由于https協(xié)議的特殊性,所以要求電腦端和手機端都需要安裝下證書淹禾,否則會看到返回的數(shù)據(jù)都是亂碼馁菜。
a.電腦端證書下載
b. 手機端證書下載
在設(shè)備上打開這個網(wǎng)址?http://www.charlesproxy.com/getssl?安裝?Charles?SSL?證書。
注意铃岔,同一個手機對應(yīng)不同電腦上的Charles都要分別下載證書進行認證汪疮,因為手機的證書是和電腦端的Charles一一配對的。
PS:ios手機,需要信任該證書
C.相關(guān)配置
選擇Proxy | Proxy Settings智嚷,彈出proxy設(shè)置選項卡躲胳,勾選Enable SSL Proxying,在Location部份選擇add纤勒,按如下圖添加坯苹,抓取任意站點、443端口的數(shù)據(jù)摇天。
1.1.2.2 charles與電腦端的連接
由于charles會自動配置瀏覽器和工具的代理設(shè)置粹湃,所以說打開工具直接就已經(jīng)是抓包狀態(tài)了。直接打開網(wǎng)頁就可以了泉坐。
?注意:
(1)Charles支持抓去http为鳄、https協(xié)議的請求,不支持socket腕让。
(網(wǎng)絡(luò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換孤钦,這個連接的一端稱為一個socket)
(2)防火墻關(guān)掉
1.1.2.3 過濾請求
通常情況下,我們需要對網(wǎng)絡(luò)請求進行過濾纯丸,只監(jiān)控向指定目錄服務(wù)器上發(fā)送的請求偏形。對于這種需求,以下幾種辦法:
方法一:在主界面的中部的Filter欄中填入需要過濾出來的關(guān)鍵字觉鼻。例如我們的服務(wù)器的地址是:www.baidu.com,那么只需要在 Filter 欄中填入www.baidu.com即可俊扭。
方法二:在Charles的菜單欄選擇 “Proxy”->”Recording Settings”,然后選擇 Include 欄坠陈,選擇添加一個項目萨惑,然后填入需要監(jiān)控的協(xié)議,主機地址仇矾,端口號庸蔼。這樣就可以只截取目標網(wǎng)站的封包了。如下圖所示:
通常情況下贮匕,我們使用方法一做一些臨時性的封包過濾姐仅,使用方法二做一些經(jīng)常性的封包過濾。
方法三:在想過濾的網(wǎng)絡(luò)請求上右擊粗合,選擇“Focus”萍嬉,之后在 Filter 一欄勾選上 Focussed 一項,如下圖所示:
這種方式可以臨時性的隙疚,快速地過濾出一些沒有通過關(guān)鍵字的一類網(wǎng)絡(luò)請求壤追。
1.2.charle的主界面介紹
1.2.1 界面簡介
啟動后,頁面展示如下:
1.2.2 顯示模式
Charles有兩種顯示模式供屉,stucture 和sequence行冰。支持來回切換溺蕉。
(1) Structure形式如下圖 優(yōu)點:可以很清晰的看到請求的數(shù)據(jù)結(jié)構(gòu),而且是以域名劃分請求信息的悼做,可以很清晰的去分析和處理數(shù)據(jù)疯特。
(2)Sequence形式如下圖 優(yōu)點:可以看到全部請求,這里的結(jié)果以數(shù)據(jù)請求的順序來顯示肛走,最新的請求顯示在最下面
綜上漓雅,兩種形式各有千秋,structure 適合對單一系列的訪問請求從宏觀上進行把握朽色,可以快速定位邻吞。sequence 適合精確定位內(nèi)容,因為每條sequence 都有size葫男,status等屬性信息抱冷,方便快速定位這條結(jié)果的價值.
對于我自己來說,更傾向于Charles的第一種樹狀視圖梢褐,比fiddler的列表視圖好的地方在于:多次刷新后的請求會被歸納到樹里面旺遮,更加一目了然,用fiddler的時候盈咳,有點強迫癥的同學(xué)耿眉,都要點擊clear,有木有…
1.2.3 工具條簡介
⑴~⑷?session
Charles有個會話(session猪贪,不是指http中的session)的概念跷敬,可以理解為瀏覽器中的tab讯私,這個功能在需要調(diào)試多個站點頁面時很實用热押,當你刷新頁面的時候,只會在當前session中捕獲請求斤寇。
(PS:ctrl+N創(chuàng)建個新的session桶癣,ctrl+W關(guān)閉當前session)
⑸垃圾桶———功能是clear,清理掉所有請求顯示信息娘锁。
⑹搜索關(guān)鍵字(望遠鏡的那個)———功能是搜索關(guān)鍵字牙寞,也可以使用ctrl+f實現(xiàn),可以設(shè)置搜索的范圍莫秆。
⑺停止監(jiān)控
———功能是領(lǐng)抓去的數(shù)據(jù)顯示或者不顯示的設(shè)置间雀。 這個本人認為是charles工具很方便的一個,一般都使其為不顯示抓取狀態(tài)镊屎,只有當自己測試的時候的前后惹挟,在令其為抓取并顯示狀態(tài)游岳。這樣可以快準狠的獲取到相關(guān)自己想要的信息刁愿,而不必在一堆數(shù)據(jù)請求中去尋找。
⑻開啟/停止網(wǎng)速模擬
測試時宠默,會用到網(wǎng)速模擬,具體的在后面功能部分介紹运怖,此處略.....
⑼開啟停止斷點功能
⑽刷新單個請求
⑾編輯請求
編輯修改功能拼弃,可以對下圖中的請求信息進行修改,修改完畢后點擊Execute就可以發(fā)送一個修改后的請求數(shù)據(jù)包摇展。
⑿校驗請求的結(jié)果
⒀工具
⒁設(shè)置
1.2.4 右鍵請求菜單
右鍵請求出現(xiàn)菜單吻氧,Charles的右鍵菜單功能比fiddler強大太多了。
1.2.5 請求詳情
請求詳情跟fiddler相似咏连,但直觀不少:
1.2.5.1 overview—請求總覽
(1)URL(統(tǒng)一資源定位符)
https:協(xié)議方案名
M.xxx.baidu.com:服務(wù)器地址医男,這里是DNS可解析的名稱。同事也可以是ipv4d地址名捻勉,還可以是[0:0:0:0:0:0:0:1]這樣用方括號括起來的IPV6地址名镀梭。
App/getindexPage:帶層次的文件路徑。指定服務(wù)器上的文件路徑來定位特指的資源踱启。
URL——請求url的路徑报账、文件和查詢字符串
Status——狀態(tài)是否已完成
Notes——備注
Response?Code——響應(yīng)狀態(tài)碼
Protocol——該seesion使用的協(xié)議(Http/https/ftp)
SSLssl——協(xié)議版本號
Method——該seesion使用的方法(get/post/put等)
Content-Type——響應(yīng)的content-type頭
Timing:
Request?Start?Time——接收到的第一個請求的第一個字節(jié)的時間點
Request?End?Time——發(fā)送到客戶端的最后一個響應(yīng)的最后一個字節(jié)的時間
Response?Start?Time——響應(yīng)開始時間
Response?End?Time——響應(yīng)結(jié)束時間
Duration——整個請求—響應(yīng)持續(xù)時間
DNS——所有選中的session解析DNS所花費的時間的總和
Connect——所有選中session建立TCP/IP連接所花費的時間總和
Request——請求耗費時間
Response——響應(yīng)耗費時間
Size
Request?Header——請求頭大小
Response?Header——響應(yīng)頭大小
Request?
Response?
Total——請求頭+響應(yīng)頭字節(jié)大小
1.2.5.2 request—請求頭
名詞解釋:
(1)Appid : 在COM中,安全控制的最小單位是進程埠偿,每個進程都有對應(yīng)的安全控制策略透罢。進程的安全控制策略保存在注冊表中,存儲位置為:HKCR\AppID\訪問權(quán)限冠蒋、啟動權(quán)限等安全配置信息羽圃。開發(fā)COM組件時,可以在COM組件對應(yīng)的CLSID子鍵下
新建字符串類型的項抖剿,名稱:AppID朽寞,值:該COM組件所在進程的AppID值。
channel:渠道包來源
Contextuuid:設(shè)備唯一標識
1.2.5.3 response—請求結(jié)果
Json格式斩郎,具體含義參考接口文檔脑融。(其中raw是原始數(shù)據(jù)包的狀態(tài))
1.2.5.4 summary—請求詳情,包含加載時間等
1.2.5.5 時間線圖表
1.3 常用的功能
1.3.1 模擬網(wǎng)速功能
在線上環(huán)境通常有些因為網(wǎng)速慢導(dǎo)致的bug缩宜,在本機無法重現(xiàn)肘迎,那時候就很抓瞎,如果嫌遠程麻煩锻煌,推薦使用throttle妓布。
支持對Bandwidth(帶寬)、Utilistation(利用百分比)宋梧、Round-trip(往返延遲)匣沼、MTU(字節(jié))進行配置,并且支持3G/4G或者其他網(wǎng)絡(luò)模式乃秀。
肛著!如果我們只想模擬指定網(wǎng)站的慢速網(wǎng)絡(luò)圆兵,可以再勾選上圖中的“Only for selected hosts”項,然后在對話框的下半部分設(shè)置中增加指定的 hosts 項即可枢贿。
ADSL:屬于DSL技術(shù)的一種殉农,全稱Asymmetric Digital Subscriber Line(非對稱數(shù)字用戶線路),亦可稱作非對稱數(shù)字用戶環(huán)路局荚。是一種新的數(shù)據(jù)傳輸方式超凳。
VDSL:是一種非對稱DSL技術(shù),全稱Very High Speed Digital Subscriber Line (超高速數(shù)字用戶線路)耀态。和ADSL技術(shù)一樣轮傍,VDSL也使用雙絞線進行語音和數(shù)據(jù)的傳輸。VDSL是利用現(xiàn)有電話線上安裝VDSL首装,只需在用戶側(cè)安裝一臺VDSL modem创夜。最重要的是,無須為寬帶上網(wǎng)而重新布設(shè)或變動線路仙逻。
Isdn:綜合業(yè)務(wù)數(shù)字網(wǎng)(Integrated Services Digital Network驰吓,ISDN)是一個數(shù)字電話網(wǎng)絡(luò)國際標準,是一種典型的電路交換網(wǎng)絡(luò)系統(tǒng)系奉。在ITU的建議中檬贰,ISDN是一種在數(shù)字電話網(wǎng)IDN的基礎(chǔ)上發(fā)展起來的通信網(wǎng)絡(luò),ISDN能夠支持多種業(yè)務(wù)缺亮,包括電話業(yè)務(wù)和非電話業(yè)務(wù)翁涤。
1.3.2修改網(wǎng)絡(luò)請求內(nèi)容
Charles可以方便地提供網(wǎng)絡(luò)請求的修改和重發(fā)功能。這也可以解決我們萌踱,為了修改謀其格請求葵礼,或者反復(fù)嘗試不同參數(shù)的網(wǎng)絡(luò)請求的需求。方法是:只需要在以往的網(wǎng)絡(luò)請求上點擊右鍵虫蝶,選擇 “Edit”/點擊鉛筆圖標章咧,即可創(chuàng)建一個可編輯的網(wǎng)絡(luò)請求。如下所示:
我們可以修改該請求的任何信息能真,包括URL地址、端口扰柠、參數(shù)等粉铐,之后點擊 “Execute” 即可發(fā)送該修改后的網(wǎng)絡(luò)請求(如下圖所示)。Charles 支持我們多次修改和發(fā)送該請求卤档。
1.3.3 重復(fù)發(fā)送網(wǎng)絡(luò)請求
(1)Repeat:此功能此功能對于測試同學(xué)特別有用蝙泼,可以檢驗接口的健壯性。對于前端的價值是不需要刷新頁面劝枣,只需要repeat請求汤踏,比如檢驗代理是否成功织鲸,修改請求后執(zhí)行等。使用方法:選擇請求后溪胶,右擊Repeat就是重復(fù)發(fā)送一次請求搂擦。?
(2)Advanced Repeat可以自定義重復(fù)次數(shù)和重復(fù)間隔,重復(fù)發(fā)送多次請求哗脖∑偬撸可以來簡單地測試服務(wù)器的并發(fā)處理能力,方法如下:我們在想打壓的網(wǎng)絡(luò)請求上(POST或 GET 請求均可)右擊才避,然后選擇 「Repeat Advanced」菜單項橱夭。然后在彈出的對話框中,選擇打壓的并發(fā)線程數(shù)以及打壓次數(shù)桑逝,確定之后棘劣,即可開始打壓。(iteration:迭代次數(shù)楞遏,Concurrency:并發(fā)數(shù),repeat為時間間隔)呈础。
1.3.4 修改服務(wù)器返回內(nèi)容
有些時候我們想讓服務(wù)器返回一些指定的內(nèi)容,方便我們調(diào)試一些特殊情況橱健。例如列表頁面為空的情況而钞,數(shù)據(jù)異常的情況,部分耗時的網(wǎng)絡(luò)請求超時的情況等拘荡。如果沒有Charles臼节,要服務(wù)器配合構(gòu)造相應(yīng)的數(shù)據(jù)顯得會比較麻煩。這個時候珊皿,使用 Charles 相關(guān)的功能就可以滿足我們的需求网缝。
根據(jù)具體的需求,Charles提供了 Map 功能蟋定、 Rewrite 功能以及 Breakpoints 功能粉臊,都可以達到修改服務(wù)器返回內(nèi)容的目的。這三者在功能上的差異是:
△Map功能適合長期地將某一些請求重定向到另一個網(wǎng)絡(luò)地址或本地文件驶兜。
△Rewrite功能適合對網(wǎng)絡(luò)請求進行一些正則替換扼仲。
△Breakpoints功能適合做一些臨時性的修改。
1.3.4.1 MAL
在Charles的菜單中抄淑,選擇 “Tools”->”Map Remote” 或 “Map Local” 即可進入到相應(yīng)功能的設(shè)置頁面屠凶。
(1)map remote
對于Map Remote功能,我們需要分別填寫網(wǎng)絡(luò)重定向的源地址和目的地址肆资,對于不需要限制的條件矗愧,可以留空。
(2)map local
對于Map Local功能郑原,我們需要填寫的重定向的源地址和本地的目標文件唉韭。對于有一些復(fù)雜的網(wǎng)絡(luò)請求結(jié)果夜涕,我們可以先使用 Charles 提供的 “Save Response…” 功能,將請求結(jié)果保存到本地(如下圖所示)属愤,然后稍加修改女器,成為我們的目標映射文件。
方法是:
1.請求右鍵—save response春塌,然后另存在自己電腦的某個位置(文件屬性必須為.txt)
2.請求右鍵/tools—MAPlocal晓避,然后添加你剛才保存的文件,點擊OK保存
3.右鍵請求只壳,選擇repeat
4.重新刷新app的頁面俏拱,會看到數(shù)據(jù)已經(jīng)修改過來了。
5.去掉代理配置:取消勾選Tools—Maplocal即可
1.3.4.2 ?Rewrite
Map Local在使用的時候吼句,有一個潛在的問題锅必,就是其返回的 Http Response Header 與正常的請求并不一樣。這個時候如果客戶端校驗了 Http Response Header 中的部分內(nèi)容惕艳,就會使得該功能失效搞隐。解決辦法是同時使用 Map Local 以下面提到的 Rewrite 功能,將相關(guān)的 Http 頭 Rewrite 成我們希望的內(nèi)容远搪。
Rewrite功能功能適合對某一類網(wǎng)絡(luò)請求進行一些正則替換劣纲,以達到修改結(jié)果的目的。
例如:我們的客戶端有一個API請求是獲得用戶昵稱谁鳍,而我當前的昵稱是 “XXXX”癞季。我們想試著直接修改網(wǎng)絡(luò)返回值,將“XXXX”替換成“測試測試下”倘潜。
步驟是:
1.選中請求绷柒,然后在Tools—右鍵選擇rewrite功能;
2.在彈出的提示彈窗中涮因,選擇add-rules
3.完成設(shè)置之后废睦,右鍵請求,選擇 repeat养泡。然后我們就可以從 Charles 中看到嗜湃,之后的 API 獲得的昵稱被自動 Rewrite 成了 測試測試下,如下圖所示:
1.3.5 斷點功能(Breakpoints)
上面提供的Rewrite功能最適合做批量和長期的替換瓤荔,但是很多時候净蚤,我們只是想臨時修改一次網(wǎng)絡(luò)請求結(jié)果,這個時候输硝,使用 Rewrite 功能雖然也可以達到目的,但是過于麻煩程梦,對于臨時性的修改点把,我們最好使用 Breakpoints 功能橘荠。
Breakpoints,當指定的網(wǎng)絡(luò)請求發(fā)生時郎逃,Charles 會截獲該請求哥童,這個時候,我們可以在 Charles 中臨時修改網(wǎng)絡(luò)請求的返回內(nèi)容褒翰。
Charles能夠斷到發(fā)送請求前(篡改Request)和請求后(篡改Response)贮懈。
使用斷點修改請求的弊端是,如果開發(fā)設(shè)置了請求超時時間优训,那么修改的速度慢了往往即使返回了也沒有效果朵你,所以實際測試中使用此方法的場景并不多。
這里以將我的券金額修改為13.00元為例:
(1) 針對接口右鍵選擇"BreakPoints",這樣這個接口就被加入到斷點狀態(tài)了揣非;
(2)需要進一步修改斷點的屬性抡医,可以在菜單欄"Proxy"–>"Breakpoints Settings"里進行添加刪除或者修改,并且可以選擇這個斷點是在request還是response早敬,還是兩者都要忌傻。這里只是修改response
(3)刷新app界面,跳轉(zhuǎn)到斷點模版搞监,這個時候你可以在對應(yīng)狀態(tài)情況下修改request或者response,然后點擊下方按鈕“Execute”水孩。點開Edit Response界面,選擇JSON格式琐驴,格式清晰俘种,方便修改,直接在上面進行數(shù)據(jù)修改棍矛,改成你想要測試的數(shù)據(jù)安疗,然后點擊執(zhí)行按鈕
(4)再次刷新app界面,然后app返回的是新改的數(shù)據(jù)够委,根據(jù)返回數(shù)據(jù)測試客戶端顯示是否正確
1.3.6 查看連接本機charles代理的ip
這里可以看到連接自己charles代理的IP荐类,針對某些不需要的/未知用戶,點擊remove即可
1.3.7 設(shè)置請求的黑名單
不想某些請求發(fā)起茁帽,直接返回404玉罐,可以用黑名單。選擇Tools-Blacklist潘拨,設(shè)置如下圖: