抓包工具Charles
一、charles的使用
1.1 charles的說明
Charles其實是一款代理伺服器,通過過將自己設定成系統(電腦或者瀏覽器)的網路訪問代理伺服器,然後擷取請求和請求結果達到分析抓包的目的。該軟體是用Java寫的,能夠在Windows,Mac,Linux上使用。安裝Charles的時候要先裝好Java環境。
Charles的主要功能:
(1)擷取Http 和 Https 網路封包。
(2)支援重發網路請求,方便後端除錯。
(3)支援修改網路請求引數。
(4)支援網路請求的截獲並動態修改。
(5)支援模擬慢速網路。
1.1.1 charles的下載和安裝
1、安裝包的下載
(1)進入官網下載地址:http://www.charlesproxy.com/,點選連結下載30天免費試用版本。
(2)雲盤中文破解免費版:連結: https://pan.baidu.com/s/1PgqzfYmAiOUdDmonDai1aA 密碼: azsb
PS:Charles 是收費軟體,可以免費試用 30 天。試用期過後,未付費的使用者仍然可以繼續使用,但是每次使用時間不能超過 30 分鐘,並且啟動時將會有 10 秒種的延時。因此,該付費方案對廣大使用者還是相當友好的,即使你長期不付費,也能使用完整的軟體功能。只是當你需要長時間進行封包除錯時,會因為 Charles 強制關閉而遇到影響。
https://www.zzzmode.com/mytools/charles/將補丁包charles.jar下載並覆蓋到charles的lib檔案下即可
1.1.2 charles與手機/電腦的連線
1.1.2.1 charles與手機端的連線
使手機和電腦在一個區域網內,不一定非要是一個ip段,只要是同一個路由器下就可以了。
(1)首先利用cmd -config命令檢視自己電腦的ip地址
(2)然後在手機端的wifi代理設定那裡去進行相關的配置設定。
這裡的代理伺服器地址填寫為電腦的ip地址,然後埠這裡寫8888(這個是charles的預設設定),如果自己修改了就寫成自己所修改的埠就可以了。
配置完成,會看到一個charles與手機端的連線提示彈窗,選擇allo即可。
(3)手機端抓包https
上述1、2步驟,只針對http請求。由於https協議的特殊性,所以要求電腦端和手機端都需要安裝下證書,否則會看到返回的資料都是亂碼。
a.電腦端證書下載
b. 手機端證書下載
在裝置上開啟這個網址http://www.charlesproxy.com/getssl安裝CharlesSSL證書。
注意,同一個手機對應不同電腦上的Charles都要分別下載證書進行認證,因為手機的證書是和電腦端的Charles一一配對的。
PS:ios手機,需要信任該證書
C.相關配置
選擇Proxy | Proxy Settings,彈出proxy設定選項卡,勾選Enable SSL Proxying,在Location部份選擇add,按如下圖新增,抓取任意站點、443埠的資料。
1.1.2.2 charles與電腦端的連線
由於charles會自動配置瀏覽器和工具的代理設定,所以說開啟工具直接就已經是抓包狀態了。直接開啟網頁就可以了。
注意:
(1)Charles支援抓去http、https協議的請求,不支援socket。
(網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket)
(2)防火牆關掉
1.1.2.3 過濾請求
通常情況下,我們需要對網路請求進行過濾,只監控向指定目錄伺服器上傳送的請求。對於這種需求,以下幾種辦法:
方法一:在主介面的中部的Filter欄中填入需要過濾出來的關鍵字。例如我們的伺服器的地址是:www.baidu.com,那麼只需要在 Filter 欄中填入www.baidu.com即可。
方法二:在Charles的選單欄選擇 “Proxy”->”Recording Settings”,然後選擇 Include 欄,選擇新增一個專案,然後填入需要監控的協議,主機地址,埠號。這樣就可以只擷取目標網站的封包了。如下圖所示:
通常情況下,我們使用方法一做一些臨時性的封包過濾,使用方法二做一些經常性的封包過濾。
方法三:在想過濾的網路請求上右擊,選擇“Focus”,之後在 Filter 一欄勾選上 Focussed 一項,如下圖所示:
這種方式可以臨時性的,快速地過濾出一些沒有通過關鍵字的一類網路請求。
1.2.charle的主介面介紹
1.2.1 介面簡介
啟動後,頁面展示如下:
1.2.2 顯示模式
Charles有兩種顯示模式,stucture 和sequence。支援來回切換。
(1) Structure形式如下圖 優點:可以很清晰的看到請求的資料結構,而且是以域名劃分請求資訊的,可以很清晰的去分析和處理資料。
(2)Sequence形式如下圖 優點:可以看到全部請求,這裡的結果以資料請求的順序來顯示,最新的請求顯示在最下面
綜上,兩種形式各有千秋,structure 適合對單一系列的訪問請求從巨集觀上進行把握,可以快速定位。sequence 適合精確定位內容,因為每條sequence 都有size,status等屬性資訊,方便快速定位這條結果的價值.
對於我自己來說,更傾向於Charles的第一種樹狀檢視,比fiddler的列表檢視好的地方在於:多次重新整理後的請求會被歸納到樹裡面,更加一目瞭然,用fiddler的時候,有點強迫症的同學,都要點選clear,有木有…
1.2.3 工具條簡介
⑴~⑷session
Charles有個會話(session,不是指http中的session)的概念,可以理解為瀏覽器中的tab,這個功能在需要除錯多個站點頁面時很實用,當你重新整理頁面的時候,只會在當前session中捕獲請求。
(PS:ctrl+N建立個新的session,ctrl+W關閉當前session)
⑸垃圾桶———功能是clear,清理掉所有請求顯示資訊。
⑹搜尋關鍵字(望遠鏡的那個)———功能是搜尋關鍵字,也可以使用ctrl+f實現,可以設定搜尋的範圍。
⑺停止監控
———功能是領抓去的資料顯示或者不顯示的設定。 這個本人認為是charles工具很方便的一個,一般都使其為不顯示抓取狀態,只有當自己測試的時候的前後,在令其為抓取並顯示狀態。這樣可以快準狠的獲取到相關自己想要的資訊,而不必在一堆資料請求中去尋找。
⑻開啟/停止網速模擬
測試時,會用到網速模擬,具體的在後面功能部分介紹,此處略.....
⑼開啟停止斷點功能
⑽重新整理單個請求
⑾編輯請求
編輯修改功能,可以對下圖中的請求資訊進行修改,修改完畢後點擊Execute就可以傳送一個修改後的請求資料包。
⑿校驗請求的結果
⒀工具
⒁設定
1.2.4 右鍵請求選單
右鍵請求出現選單,Charles的右鍵選單功能比fiddler強大太多了。
1.2.5 請求詳情
請求詳情跟fiddler相似,但直觀不少:
1.2.5.1 overview—請求總覽
(1)URL(統一資源定位符)
https:協議方案名
M.xxx.baidu.com:伺服器地址,這裡是DNS可解析的名稱。同事也可以是ipv4d地址名,還可以是[0:0:0:0:0:0:0:1]這樣用方括號括起來的IPV6地址名。
App/getindexPage:帶層次的檔案路徑。指定伺服器上的檔案路徑來定位特指的資源。
URL——請求url的路徑、檔案和查詢字串
Status——狀態是否已完成
Notes——備註
ResponseCode——響應狀態碼
Protocol——該seesion使用的協議(Http/https/ftp)
SSLssl——協議版本號
Method——該seesion使用的方法(get/post/put等)
Content-Type——響應的content-type頭
Timing:
RequestStartTime——接收到的第一個請求的第一個位元組的時間點
RequestEndTime——傳送到客戶端的最後一個響應的最後一個位元組的時間
ResponseStartTime——響應開始時間
ResponseEndTime——響應結束時間
Duration——整個請求—響應持續時間
DNS——所有選中的session解析DNS所花費的時間的總和
Connect——所有選中session建立TCP/IP連線所花費的時間總和
Request——請求耗費時間
Response——響應耗費時間
Size
RequestHeader——請求頭大小
ResponseHeader——響應頭大小
Request
Response
Total——請求頭+響應頭位元組大小
1.2.5.2 request—請求頭
名詞解釋:
(1)Appid : 在COM中,安全控制的最小單位是程序,每個程序都有對應的安全控制策略。程序的安全控制策略儲存在登錄檔中,儲存位置為:HKCR\AppID\訪問許可權、啟動許可權等安全配置資訊。開發COM元件時,可以在COM元件對應的CLSID子鍵下
新建字串型別的項,名稱:AppID,值:該COM元件所在程序的AppID值。
channel:渠道包來源
Contextuuid:裝置唯一標識
1.2.5.3 response—請求結果
Json格式,具體含義參考介面文件。(其中raw是原始資料包的狀態)
1.2.5.4 summary—請求詳情,包含載入時間等
1.2.5.5 時間線圖表
1.3 常用的功能
1.3.1 模擬網速功能
在線上環境通常有些因為網速慢導致的bug,在本機無法重現,那時候就很抓瞎,如果嫌遠端麻煩,推薦使用throttle。
支援對Bandwidth(頻寬)、Utilistation(利用百分比)、Round-trip(往返延遲)、MTU(位元組)進行配置,並且支援3G/4G或者其他網路模式。
!如果我們只想模擬指定網站的慢速網路,可以再勾選上圖中的“Only for selected hosts”項,然後在對話方塊的下半部分設定中增加指定的 hosts 項即可。
ADSL:屬於DSL技術的一種,全稱Asymmetric Digital Subscriber Line(非對稱數字使用者線路),亦可稱作非對稱數字使用者環路。是一種新的資料傳輸方式。
VDSL:是一種非對稱DSL技術,全稱Very High Speed Digital Subscriber Line (超高速數字使用者線路)。和ADSL技術一樣,VDSL也使用雙絞線進行語音和資料的傳輸。VDSL是利用現有電話線上安裝VDSL,只需在使用者側安裝一臺VDSL modem。最重要的是,無須為寬頻上網而重新佈設或變動線路。
Isdn:綜合業務數字網(Integrated Services Digital Network,ISDN)是一個數字電話網路國際標準,是一種典型的電路交換網路系統。在ITU的建議中,ISDN是一種在數字電話網IDN的基礎上發展起來的通訊網路,ISDN能夠支援多種業務,包括電話業務和非電話業務。
1.3.2修改網路請求內容
Charles可以方便地提供網路請求的修改和重發功能。這也可以解決我們,為了修改謀其格請求,或者反覆嘗試不同引數的網路請求的需求。方法是:只需要在以往的網路請求上點選右鍵,選擇 “Edit”/點選鉛筆圖示,即可建立一個可編輯的網路請求。如下所示:
我們可以修改該請求的任何資訊,包括URL地址、埠、引數等,之後點選 “Execute” 即可傳送該修改後的網路請求(如下圖所示)。Charles 支援我們多次修改和傳送該請求。
1.3.3 重複傳送網路請求
(1)Repeat:此功能此功能對於測試同學特別有用,可以檢驗介面的健壯性。對於前端的價值是不需要重新整理頁面,只需要repeat請求,比如檢驗代理是否成功,修改請求後執行等。使用方法:選擇請求後,右擊Repeat就是重複傳送一次請求。
(2)Advanced Repeat可以自定義重複次數和重複間隔,重複傳送多次請求。可以來簡單地測試伺服器的併發處理能力,方法如下:我們在想打壓的網路請求上(POST或 GET 請求均可)右擊,然後選擇 「Repeat Advanced」選單項。然後在彈出的對話方塊中,選擇打壓的併發執行緒數以及打壓次數,確定之後,即可開始打壓。(iteration:迭代次數,Concurrency:併發數,repeat為時間間隔)。
1.3.4 修改伺服器返回內容
有些時候我們想讓伺服器返回一些指定的內容,方便我們除錯一些特殊情況。例如列表頁面為空的情況,資料異常的情況,部分耗時的網路請求超時的情況等。如果沒有Charles,要伺服器配合構造相應的資料顯得會比較麻煩。這個時候,使用 Charles 相關的功能就可以滿足我們的需求。
根據具體的需求,Charles提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以達到修改伺服器返回內容的目的。這三者在功能上的差異是:
△Map功能適合長期地將某一些請求重定向到另一個網路地址或本地檔案。
△Rewrite功能適合對網路請求進行一些正則替換。
△Breakpoints功能適合做一些臨時性的修改。
1.3.4.1 MAL
在Charles的選單中,選擇 “Tools”->”Map Remote” 或 “Map Local” 即可進入到相應功能的設定頁面。
(1)map remote
對於Map Remote功能,我們需要分別填寫網路重定向的源地址和目的地址,對於不需要限制的條件,可以留空。
(2)map local
對於Map Local功能,我們需要填寫的重定向的源地址和本地的目標檔案。對於有一些複雜的網路請求結果,我們可以先使用 Charles 提供的 “Save Response…” 功能,將請求結果儲存到本地(如下圖所示),然後稍加修改,成為我們的目標對映檔案。
方法是:
1.請求右鍵—save response,然後另存在自己電腦的某個位置(檔案屬性必須為.txt)
2.請求右鍵/tools—MAPlocal,然後新增你剛才儲存的檔案,點選OK儲存
3.右鍵請求,選擇repeat
4.重新重新整理app的頁面,會看到資料已經修改過來了。
5.去掉代理配置:取消勾選Tools—Maplocal即可
1.3.4.2 Rewrite
Map Local在使用的時候,有一個潛在的問題,就是其返回的 Http Response Header 與正常的請求並不一樣。這個時候如果客戶端校驗了 Http Response Header 中的部分內容,就會使得該功能失效。解決辦法是同時使用 Map Local 以下面提到的 Rewrite 功能,將相關的 Http 頭 Rewrite 成我們希望的內容。
Rewrite功能功能適合對某一類網路請求進行一些正則替換,以達到修改結果的目的。
例如:我們的客戶端有一個API請求是獲得使用者暱稱,而我當前的暱稱是 “XXXX”。我們想試著直接修改網路返回值,將“XXXX”替換成“測試測試下”。
步驟是:
1.選中請求,然後在Tools—右鍵選擇rewrite功能;
2.在彈出的提示彈窗中,選擇add-rules
3.完成設定之後,右鍵請求,選擇 repeat。然後我們就可以從 Charles 中看到,之後的 API 獲得的暱稱被自動 Rewrite 成了 測試測試下,如下圖所示:
1.3.5 斷點功能(Breakpoints)
上面提供的Rewrite功能最適合做批量和長期的替換,但是很多時候,我們只是想臨時修改一次網路請求結果,這個時候,使用 Rewrite 功能雖然也可以達到目的,但是過於麻煩,對於臨時性的修改,我們最好使用 Breakpoints 功能。
Breakpoints,當指定的網路請求發生時,Charles 會截獲該請求,這個時候,我們可以在 Charles 中臨時修改網路請求的返回內容。
Charles能夠斷到傳送請求前(篡改Request)和請求後(篡改Response)。
使用斷點修改請求的弊端是,如果開發設定了請求超時時間,那麼修改的速度慢了往往即使返回了也沒有效果,所以實際測試中使用此方法的場景並不多。
這裡以將我的券金額修改為13.00元為例:
(1) 針對介面右鍵選擇"BreakPoints",這樣這個介面就被加入到斷點狀態了;
(2)需要進一步修改斷點的屬性,可以在選單欄"Proxy"–>"Breakpoints Settings"裡進行新增刪除或者修改,並且可以選擇這個斷點是在request還是response,還是兩者都要。這裡只是修改response
(3)重新整理app介面,跳轉到斷點模版,這個時候你可以在對應狀態情況下修改request或者response,然後點選下方按鈕“Execute”。點開Edit Response介面,選擇JSON格式,格式清晰,方便修改,直接在上面進行資料修改,改成你想要測試的資料,然後點選執行按鈕
(4)再次重新整理app介面,然後app返回的是新改的資料,根據返回資料測試客戶端顯示是否正確
1.3.6 檢視連線本機charles代理的ip
這裡可以看到連線自己charles代理的IP,針對某些不需要的/未知使用者,點選remove即可
1.3.7 設定請求的黑名單
不想某些請求發起,直接返回404,可以用黑名單。選擇Tools-Blacklist,設定如下圖: