【IT 工具 Charles抓包】
簡介
Charles是什么倦挂?
為什么是Charles?
為什么要用抓包工具担巩?大家在平常移動App調(diào)試測試中是如何進行抓包的?
在我們做開發(fā)與測試的過程中涛癌,總免不了碰到網(wǎng)絡(luò)問題犯戏,特別是重后臺的產(chǎn)品,這個時候我們往往的處理方法是抓個網(wǎng)絡(luò)包拳话,看看到底應(yīng)用發(fā)送和接收了些什么鬼.....這個時候Charles上場了先匪;Charles是一款屌的不行的截包工具,好用到?jīng)]朋友弃衍。
那么Charles屌在哪里呢呀非??镜盯?主要特點如下:
1.支持SSL代理岸裙,可以截取分析SSL的請求
2.支持流量控制∷倮拢可以模擬慢速網(wǎng)絡(luò)(2G,3G)降允,以及等待時間較長的請求。
3.支持AJAX調(diào)試艺糜∧飧猓可以自動把JSON或者XML數(shù)據(jù)格式化,方便查看倦踢。
4.支持重發(fā)網(wǎng)絡(luò)請求,方便后端調(diào)試侠草。
5.支持修改網(wǎng)絡(luò)請求參數(shù)辱挥。
6.支持網(wǎng)絡(luò)請求的截取和動態(tài)修改。
7.最重要的一個優(yōu)點就是有不同平臺的版本(Mac边涕,Windows晤碘、Linux)即學(xué)一個打遍天下。
Charles基本工作原理
charles是通過網(wǎng)絡(luò)代理來進行抓包的功蜓,下面先了解一下http代理的原理:
1.普通http請求過程
一般情況下的HTTP請求與響應(yīng)
2.加入了Charles的HTTP代理的請求與響應(yīng)過程
中間的代理服務(wù)器就是Charles
使用
Charles的下載與安裝過程
1.官網(wǎng)下載地址:
http://www.charlesproxy.com/download/
2.Mac下安裝:
是一個安裝包是一個dmg后綴的文件园爷。打開后將Charles拖到Application目錄下即完成安裝。
在Mac下你打開Launchpad即可看到一個像花瓶一樣的Charles程序圖標
3.Windows下安裝:
下載后直接雙擊根據(jù)安裝向?qū)б徊揭徊桨惭b即可
Http抓包操作步驟
Step 1:開啟Charleshttp代理式撼;
Step 2:手機端Wifi添加代理童社;
Step 3:開啟Charles錄制功能;
Step 4:啟動應(yīng)用開始抓包著隆;
Step 5:分析抓取的數(shù)據(jù)包扰楼。
Step 1: 開啟Charleshttp代理
設(shè)置Charles代理
第一次啟動默認會開啟本機的系統(tǒng)代理呀癣,因為我們只是監(jiān)控移動端的所以將此選去除(去掉選項前面的小鉤)
激活http代理功能
Step 2: 手機端Wifi添加代理
Android手機:
在手機端打開你的Wifi設(shè)置然后長按已經(jīng)連接的Wifi在彈出來的菜單中選擇【修改網(wǎng)絡(luò)】
溝上[顯示高級]選項--【手動】
輸入代理服務(wù)器的IP與端口
IP即安裝了Charles的電腦IP地址,端口就是前面一步設(shè)置Charles時所設(shè)置的端口弦赖。
注意:手機所連接Wifi要與電腦在同一個LAN(局域網(wǎng))
Genymotion:
Charles默認是不監(jiān)聽Genymotion模擬器的網(wǎng)絡(luò)動態(tài)的项栏。
需要進行以下設(shè)置:
- 打開你的Genymotion模擬器
- 設(shè)置 -> Wifi -> 長按你的當前的網(wǎng)絡(luò)連接
- 選擇 “修改網(wǎng)絡(luò)”
- 勾選 “顯示高級選項”
- 選擇 “代理設(shè)置 -> 手動”
- 設(shè)置你的代理服務(wù)器為: 10.0.3.2 (這是Genymotion為本機準備的特殊端口)
- 把端口設(shè)置為: 8888
- 保存
- 打開飛行模式再關(guān)閉飛行模式,方可起效
AVD:
Android自帶模擬器
-
查看本機IP(Help -> Local IP Address)
注意:必須從這里看蹬竖,不能直接查本機IP
. -
打開模擬器的代理設(shè)定界面沼沈,把代理IP和端口設(shè)置好
.
iOS手機:
- 點擊你所連接的wifi
- 輸入代理服務(wù)器的IP與端口
IP即安裝了Charles的電腦IP地址,端口就是前面一步設(shè)置Charles時所設(shè)置的端口币厕。
注意:手機所連接Wifi要與電腦在同一個LAN(局域網(wǎng))
Step 3:開啟Charles錄制功能
- 當手機連接上代理后Charles會彈出相應(yīng)的提示框列另,點擊Allow即可。(有時候不會有彈窗)
-
點擊工具欄上的開始錄制按鈕劈榨,即啟動了Charles的抓包功能了访递。
Step 4:啟動應(yīng)用開始抓包
- 在手機上操作相應(yīng)的App進行抓包。
-
在Charles的主界面上就可看到相應(yīng)的請求內(nèi)容同辣。
Step 5:分析抓取的數(shù)據(jù)包
Charles 主要提供兩種查看封包的視圖拷姿,分別名為 “Structure”和 “Sequence”:
Structure 視圖將網(wǎng)絡(luò)請求按訪問的域名分類;
Sequence 視圖將網(wǎng)絡(luò)請求按訪問的時間排序旱函。大家可以根據(jù)具體的需要在這兩種視圖之前來回切換响巢。請求多了有些時候會看不過來,Charles提供了一個簡單的Filter功能棒妨,可以輸入關(guān)鍵字來快速篩選出URL 中帶指定關(guān)鍵字的網(wǎng)絡(luò)請求踪古。
對于某一個具體的網(wǎng)絡(luò)請求,你可以查看其詳細的請求內(nèi)容和響應(yīng)內(nèi)容券腔。如果請求內(nèi)容是POST 的表單伏穆,Charles 會自動幫你將表單進行分項顯示。如果響應(yīng)內(nèi)容是 JSON 格式的纷纫,那么 Charles可以自動幫你將JSON 內(nèi)容格式化枕扫,方便你查看。如果響應(yīng)內(nèi)容是圖片辱魁,那么 Charles可以顯示出圖片的預(yù)覽烟瞧。
Https抓包操作步驟
Step 1:了解一下https的基本原理;
Step 2:在手機端安裝SSL證書染簇;
Step 3:激活Charles的SSL代理参滴;
Step 4:將指定的URL請求開啟SSL代理功能
Step 5:其他步驟與Http抓包相同
Step 1:了解一下https的基本原理;
HTTPS其實是有兩部分組成:HTTP+ SSL / TLS锻弓,也就是在HTTP上又加了一層處理加密信息的模塊砾赔。服務(wù)端和客戶端的信息傳輸都會通過TLS進行加密,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。具體是如何進行加密过蹂,解密十绑,驗證的,且看下圖解說
詳細說明酷勺,請參考:
Step 2:在手機端安裝SSL證書
-
將證書文件從Charles導(dǎo)出
.
然后通過adb或者其他工具將其復(fù)制到手機的SD卡中本橙。
-
將證書文件導(dǎo)入Android手機
.
在手機的設(shè)置界面找到【安全】---》【從內(nèi)部存儲設(shè)備或SD卡安裝】----》選擇SD卡上的證書---》彈出設(shè)置證書名對話框,輸入一個易記的名字脆诉,然后根據(jù)提示進行導(dǎo)入即可
- 將證書文件導(dǎo)入iOS手機
1.在iPhone手機上打開Safari瀏覽器甚亭,然后在地址欄中輸入www.charlesproxy.com/getssl。
2.稍后會彈出安裝描述文件提示击胜,點擊右上角的【安裝】按鈕進行證書安裝即可
.
Step 3:激活Charles的SSL代理
1.選擇【Proxy】--->【SSL Proxying Settings..】設(shè)置亏狰。
2.在彈出來的對話框中溝選【Enable SSL Proxying】
Step 4:將指定的URL請求開啟SSL代理功能
1.選擇抓取的https鏈接,然后右鍵選擇【Enable SSL Proxying】偶摔。
2.如果不激活SSL代理暇唾,所有https請求都是亂碼無法查看。
再次請求這個Https時辰斋,其請求內(nèi)容已經(jīng)一目了然了
通過映射修改返回報文
Charles中有兩種修改映射的方法Map Local
和Map Remote
策州,兩種方法各有不同的用處。
本地映射Map Local
其實這種方法很好理解宫仗,就是修改映射方式讓請求去讀取我們本地的文件并返回够挂,具體操作如下:
右鍵需要修改的URL-->點擊Map Local
點Choose,選擇本地json文件藕夫,下次請求返回報文就會變成選擇的json文件
設(shè)置完映射之后每次該請求都會從設(shè)置的本地文件中讀取并返回數(shù)據(jù)孽糖,我們可以隨心所欲的修改保存的報文達到調(diào)試接口的目的。
另外如果在開發(fā)初期毅贮,客戶端和服務(wù)器端已經(jīng)定義好了接口办悟,但是服務(wù)器端還沒有部署好環(huán)境。我們也可以通過這個方法把定義好的報文保存到本地滩褥,通過修改映射的方式來進行初步開發(fā)誉尖。
取消Map Local
Tools-->Map Local
可以勾選Enable Map Local,全局控制是否映射铸题;
也可點Add和Remove,添加和去除需要映射的URL琢感;
遠程映射Map Remote
修改遠程映射是通過修改請求的HOST來實現(xiàn)的丢间,可以將請求切換到不同的環(huán)境(例如當前的包是正式環(huán)境,你想看看測試環(huán)境的修改有沒有生效驹针,可以不用再打一個測試環(huán)境的包烘挫,通過修改遠程映射快速實現(xiàn)。也省的改手機的HOST的了)。
選中要修改的請求-->右鍵-->Map Remote 在Map To 欄中填寫要映射到的地址的一些參數(shù)饮六。
通過斷點修改請求與響應(yīng)的內(nèi)容
除了修改映射的方法其垄,通過設(shè)置斷點也可以實現(xiàn)想要的效果。和我們在IDE上設(shè)置斷點一樣卤橄,在斷點處會進入調(diào)試模式绿满,請求會暫時中斷,這是我們可以進行一些自定義的操作窟扑。
Step 1:設(shè)置Charless斷點喇颁。
Step 2:對指定的URL開啟斷點功能。
Step 3:編輯請求與響應(yīng)的內(nèi)容嚎货。
Step 1:設(shè)置Charless斷點
選擇【Breakpoint Settings…】--->勾選【Enable Breakpoints】來激活斷點功能
Step 2:對指定的URL開啟斷點功能
1.選擇一個URL鏈接-à右鍵開啟菜單---》選擇【Breakpoints】即可開啟此請求的斷點橘霎。
2.這樣Charles會遇到此請求時會彈出中斷對話框
Step 3:編輯請求與響應(yīng)的內(nèi)容
a.編輯請求內(nèi)容
在中斷對話框中,用戶可以點擊Edit Request來編輯請求的內(nèi)容殖属,編輯完成后然后點擊【Execute】發(fā)出去這個請求給服務(wù)端
b.編輯服務(wù)器響應(yīng)的內(nèi)容
在【Edit Request】對話中點擊【Execute】發(fā)出請求后姐叁,服務(wù)端返回來數(shù)據(jù)后,用戶點擊【Edit Response】可對響應(yīng)內(nèi)容進行編輯完成后然后點擊【Execute】發(fā)出去這個數(shù)據(jù)給客戶端
總結(jié)
上面的方法可以用來修改一般的網(wǎng)絡(luò)請求洗显,但如果數(shù)據(jù)做了加密處理看不到明文那用處就不大了外潜。
需要注意一點:通過斷點的方式會存在一定的問題。數(shù)據(jù)被攔截后墙懂,客戶端的請求超時時長是不會停止計算的橡卤,如果沒在設(shè)置的超時時間內(nèi)返回數(shù)據(jù)本次請求也就按失敗處理了。
弱網(wǎng)模擬
1.菜單中選擇【Proxy】--->【Throttle Settings..】-à激活【Enable Throttling】损搬。
2.在Throttle Configuration設(shè)置弱網(wǎng)的參數(shù)碧库。
3.以下是各種網(wǎng)制式的速率參考文檔:
移動網(wǎng)絡(luò)制式與網(wǎng)速的參考文檔
引用:
★★★移動應(yīng)用抓包調(diào)試利器Charles
Android開發(fā)利器 - Charles + Genymotion 調(diào)試網(wǎng)絡(luò)應(yīng)用程序
android emulator + charles抓包
Charles--修改返回報文