Charles抓包工具的使用

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

感謝唐巧分享的文章,受益匪淺

文章目錄

  1. 1.?目錄及更新說明
  2. 2.?Charles 限時優惠
  3. 3.?簡介
  4. 4.?安裝 Charles
  5. 5.?將 Charles 設置成系統代理
  6. 6.?Charles 主界面介紹
  7. 7.?過濾網絡請求
  8. 8.?截取 iPhone 上的網絡封包
    1. 8.1.?Charles 上的設置
    2. 8.2.?iPhone 上的設置
  9. 9.?截取 Https 通訊信息
    1. 9.1.?安裝證書
    2. 9.2.?截取移動設備中的 Https 通訊信息
  10. 10.?模擬慢速網絡
  11. 11.?修改網絡請求內容
  12. 12.?給服務器做壓力測試
  13. 13.?修改服務器返回內容
    1. 13.1.?Map 功能
    2. 13.2.?Rewrite 功能
    3. 13.3.?Breakpoints 功能
  14. 14.?反向代理
  15. 15.?設置外部代理,解決與翻墻軟件的沖突
  16. 16.?總結

目錄及更新說明

更新記錄:

  • 2013 年 12 月,第一版。
  • 2015 年 11 月,增加 Rewrite 相關介紹。
  • 2016 年 8 月,增加 Charles 4 的介紹,反向代理功能和設置外部代理,并且介紹了如何解決與翻墻軟件的沖突。

本文的內容主要包括:

  • Charles 的簡介
  • 如何安裝 Charles
  • 將 Charles 設置成系統代理
  • Charles 主界面介紹
  • 過濾網絡請求
  • 截取 iPhone 上的網絡封包
  • 截取 Https 通訊信息
  • 模擬慢速網絡
  • 修改網絡請求內容
  • 給服務器做壓力測試
  • 修改服務器返回內容
  • 反向代理
  • 設置外部代理,解決與翻墻軟件的沖突
  • 總結

Charles 限時優惠

Charles 4 正版限時優惠優惠活動(限時:2016 年 8 月 8 日 - 15 日),優惠 30 元,點擊領取優惠券。

簡介

charles-logo.png

Charles?是在 Mac 下常用的網絡封包截取工具,在做
移動開發時,我們為了調試與服務器端的網絡通訊協議,常常需要截取網絡封包來分析。

Charles 通過將自己設置成系統的網絡訪問代理服務器,使得所有的網絡訪問請求都通過它來完成,從而實現了網絡封包的截取和分析。

除了在做移動開發中調試端口外,Charles 也可以用于分析第三方應用的通訊協議。配合 Charles 的 SSL 功能,Charles 還可以分析 Https 協議。

Charles 是收費軟件,可以免費試用 30 天。試用期過后,未付費的用戶仍然可以繼續使用,但是每次使用時間不能超過 30 分鐘,并且啟動時將會有 10 秒種的延時。因此,該付費方案對廣大用戶還是相當友好的,即使你長期不付費,也能使用完整的軟件功能。只是當你需要長時間進行封包調試時,會因為 Charles 強制關閉而遇到影響。

Charles 主要的功能包括:

  1. 截取 Http 和 Https 網絡封包。
  2. 支持重發網絡請求,方便后端調試。
  3. 支持修改網絡請求參數。
  4. 支持網絡請求的截獲并動態修改。
  5. 支持模擬慢速網絡。

Charles 4 新增的主要功能包括:

  1. 支持 Http 2。
  2. 支持 IPv6。

安裝 Charles

去 Charles 的官方網站(http://www.charlesproxy.com)下載最新版的 Charles 安裝包,是一個 dmg 后綴的文件。打開后將 Charles 拖到 Application 目錄下即完成安裝。

將 Charles 設置成系統代理

之前提到,Charles 是通過將自己設置成代理服務器來完成封包截取的,所以使用 Charles 的第一步是將其設置成系統的代理服務器。

啟動 Charles 后,第一次 Charles 會請求你給它設置系統代理的權限。你可以輸入登錄密碼授予 Charles 該權限。你也可以忽略該請求,然后在需要將 Charles 設置成系統代理時,選擇菜單中的 “Proxy” -> “Mac OS X Proxy” 來將 Charles 設置成系統代理。如下所示:

charles-pro-3.png

之后,你就可以看到源源不斷的網絡請求出現在 Charles 的界面中。

需要注意的是,Chrome 和 Firefox 瀏覽器默認并不使用系統的代理服務器設置,而 Charles 是通過將自己設置成代理服務器來完成封包截取的,所以在默認情況下無法截取 Chrome 和 Firefox 瀏覽器的網絡通訊內容。如果你需要截取的話,在 Chrome 中設置成使用系統的代理服務器設置即可,或者直接將代理服務器設置成?127.0.0.1:8888也可達到相同效果。

Charles 主界面介紹

charles-pro-4.png

Charles 主要提供兩種查看封包的視圖,分別名為 “Structure” 和 “Sequence”。?

  1. Structure 視圖將網絡請求按訪問的域名分類。
  2. Sequence 視圖將網絡請求按訪問的時間排序。

大家可以根據具體的需要在這兩種視圖之前來回切換。請求多了有些時候會看不過來,Charles 提供了一個簡單的 Filter 功能,可以輸入關鍵字來快速篩選出 URL 中帶指定關鍵字的網絡請求。

對于某一個具體的網絡請求,你可以查看其詳細的請求內容和響應內容。如果請求內容是 POST 的表單,Charles 會自動幫你將表單進行分項顯示。如果響應內容是 JSON 格式的,那么 Charles 可以自動幫你將 JSON 內容格式化,方便你查看。如果響應內容是圖片,那么 Charles 可以顯示出圖片的預覽。

過濾網絡請求

通常情況下,我們需要對網絡請求進行過濾,只監控向指定目錄服務器上發送的請求。對于這種需求,以下幾種辦法:

方法一:在主界面的中部的 Filter 欄中填入需要過濾出來的關鍵字。例如我們的服務器的地址是:http://yuantiku.com?, 那么只需要在 Filter 欄中填入 yuantiku 即可。

方法二:在 Charles 的菜單欄選擇 “Proxy”->”Recording Settings”,然后選擇 Include 欄,選擇添加一個項目,然后填入需要監控的協議,主機地址,端口號。這樣就可以只截取目標網站的封包了。如下圖所示:

charles-filter-setting.jpg

通常情況下,我們使用方法一做一些臨時性的封包過濾,使用方法二做一些經常性的封包過濾。

方法三:在想過濾的網絡請求上右擊,選擇 “Focus”,之后在 Filter 一欄勾選上 Focussed 一項,如下圖所示:

charles-focus.png

這種方式可以臨時性的,快速地過濾出一些沒有通過關鍵字的一類網絡請求。

截取 iPhone 上的網絡封包

Charles 通常用來截取本地上的網絡封包,但是當我們需要時,我們也可以用來截取其它設備上的網絡請求。下面我就以 iPhone 為例,講解如何進行相應操作。

Charles 上的設置

要截取 iPhone 上的網絡請求,我們首先需要將 Charles 的代理功能打開。在 Charles 的菜單欄上選擇 “Proxy”->”Proxy Settings”,填入代理端口 8888,并且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上的設置。如下圖所示:

charles-proxy-setting.jpg

iPhone 上的設置

首先我們需要獲取 Charles 運行所在電腦的 IP 地址,Charles 的頂部菜單的 “Help”->”Local IP Address”,即可在彈出的對話框中看到 IP 地址,如下圖所示:

charles-local-ip.png

在 iPhone 的 “ 設置 “->” 無線局域網 “ 中,可以看到當前連接的 wifi 名,通過點擊右邊的詳情鍵,可以看到當前連接上的 wifi 的詳細信息,包括 IP 地址,子網掩碼等信息。在其最底部有「HTTP 代理」一項,我們將其切換成手動,然后填上 Charles 運行所在的電腦的 IP,以及端口號 8888,如下圖所示:

charles-iphone-setting.jpg

設置好之后,我們打開 iPhone 上的任意需要網絡通訊的程序,就可以看到 Charles 彈出 iPhone 請求連接的確認菜單(如下圖所示),點擊 “Allow” 即可完成設置。

charles-proxy-confirm.jpg

截取 Https 通訊信息

安裝證書

如果你需要截取分析 Https 協議相關的內容。那么需要安裝 Charles 的 CA 證書。具體步驟如下。

首先我們需要在 Mac 電腦上安裝證書。點擊 Charles 的頂部菜單,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”,然后輸入系統的帳號密碼,即可在 KeyChain 看到添加好的證書。如下圖所示:

charles-pro-1.png

需要注意的是,即使是安裝完證書之后,Charles 默認也并不截取 Https 網絡通訊的信息,如果你想對截取某個網站上的所有 Https 網絡請求,可以在該請求上右擊,選擇 SSL proxy,如下圖所示:

charles-ssl-add-host.jpg

這樣,對于該 Host 的所有 SSL 請求可以被截取到了。

截取移動設備中的 Https 通訊信息

如果我們需要在 iOS 或 Android 機器上截取 Https 協議的通訊內容,還需要在手機上安裝相應的證書。點擊 Charles 的頂部菜單,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,然后就可以看到 Charles 彈出的簡單的安裝教程。如下圖所示:

charles-pro-2.png

按照我們之前說的教程,在設備上設置好 Charles 為代理后,在手機瀏覽器中訪問地址:http://charlesproxy.com/getssl,即可打開證書安裝的界面,安裝完證書后,就可以截取手機上的 Https 通訊內容了。不過同樣需要注意,默認情況下 Charles 并不做截取,你還需要在要截取的網絡請求上右擊,選擇 SSL proxy 菜單項。

模擬慢速網絡

在做移動開發的時候,我們常常需要模擬慢速網絡或者高延遲的網絡,以測試在移動網絡下,應用的表現是否正常。Charles 對此需求提供了很好的支持。

在 Charles 的菜單上,選擇 “Proxy”->”Throttle Setting” 項,在之后彈出的對話框中,我們可以勾選上 “Enable Throttling”,并且可以設置 Throttle Preset 的類型。如下圖所示:

charles-throttle-setting.jpg

如果我們只想模擬指定網站的慢速網絡,可以再勾選上圖中的 “Only for selected hosts” 項,然后在對話框的下半部分設置中增加指定的 hosts 項即可。

修改網絡請求內容

有些時候為了調試服務器的接口,我們需要反復嘗試不同參數的網絡請求。Charles 可以方便地提供網絡請求的修改和重發功能。只需要在以往的網絡請求上點擊右鍵,選擇 “Edit”,即可創建一個可編輯的網絡請求。如下所示:

charles-edit.png

我們可以修改該請求的任何信息,包括 URL 地址、端口、參數等,之后點擊 “Execute” 即可發送該修改后的網絡請求(如下圖所示)。Charles 支持我們多次修改和發送該請求,這對于我們和服務器端調試接口非常方便,如下圖所示:

charles-execute.png

給服務器做壓力測試

我們可以使用 Charles 的 Repeat 功能來簡單地測試服務器的并發處理能力,方法如下。

我們在想打壓的網絡請求上(POST 或 GET 請求均可)右擊,然后選擇 「Repeat Advanced」菜單項,如下所示:

charles-repeat-1.png

接著我們就可以在彈出的對話框中,選擇打壓的并發線程數以及打壓次數,確定之后,即可開始打壓。

charles-repeat-2.png

悄悄說一句,一些寫得很弱的投票網站,也可以用這個辦法來快速投票。當然,我也拿 Charles 的 Repeat 功能給一些詐騙的釣魚網站喂了不少垃圾數據,上次不小心還把一個釣魚網站的數據庫打掛了,嗯,請叫我雷鋒。

修改服務器返回內容

有些時候我們想讓服務器返回一些指定的內容,方便我們調試一些特殊情況。例如列表頁面為空的情況,數據異常的情況,部分耗時的網絡請求超時的情況等。如果沒有 Charles,要服務器配合構造相應的數據顯得會比較麻煩。這個時候,使用 Charles 相關的功能就可以滿足我們的需求。

根據具體的需求,Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以達到修改服務器返回內容的目的。這三者在功能上的差異是:

  1. Map 功能適合長期地將某一些請求重定向到另一個網絡地址或本地文件。
  2. Rewrite 功能適合對網絡請求進行一些正則替換。
  3. Breakpoints 功能適合做一些臨時性的修改。

Map 功能

Charles 的 Map 功能分 Map Remote 和 Map Local 兩種,顧名思義,Map Remote 是將指定的網絡請求重定向到另一個網址請求地址,Map Local 是將指定的網絡請求重定向到本地文件。

在 Charles 的菜單中,選擇 “Tools”->”Map Remote” 或 “Map Local” 即可進入到相應功能的設置頁面。

charles-map.png

對于 Map Remote 功能,我們需要分別填寫網絡重定向的源地址和目的地址,對于不需要限制的條件,可以留空。下圖是一個示例,我將所有?ytk1.yuanku.ws(測試服務器)的請求重定向到了?www.yuantiku.com(線上服務器)。

charles-map-remote.png

對于 Map Local 功能,我們需要填寫的重定向的源地址和本地的目標文件。對于有一些復雜的網絡請求結果,我們可以先使用 Charles 提供的 “Save Response…” 功能,將請求結果保存到本地(如下圖所示),然后稍加修改,成為我們的目標映射文件。

charles-save-response.png

下圖是一個示例,我將一個指定的網絡請求通過 Map Local 功能映射到了本地的一個經過修改的文件中。

charles-map-local.png

Map Local 在使用的時候,有一個潛在的問題,就是其返回的 Http Response Header 與正常的請求并不一樣。這個時候如果客戶端校驗了 Http Response Header 中的部分內容,就會使得該功能失效。解決辦法是同時使用 Map Local 以下面提到的 Rewrite 功能,將相關的 Http 頭 Rewrite 成我們希望的內容。

Rewrite 功能

Rewrite 功能功能適合對某一類網絡請求進行一些正則替換,以達到修改結果的目的。

例如,我們的客戶端有一個 API 請求是獲得用戶昵稱,而我當前的昵稱是 “tangqiaoboy”,如下所示:

charles-rewrite-1.jpeg

我們想試著直接修改網絡返回值,將 tangqiaoboy 換成成 iosboy。于是我們啟用 Rewrite 功能,然后設置如下的規則:

charles-rewrite-2.png

完成設置之后,我們就可以從 Charles 中看到,之后的 API 獲得的昵稱被自動 Rewrite 成了 iosboy,如下圖所示:

charles-rewrite-3.png

Breakpoints 功能

上面提供的 Rewrite 功能最適合做批量和長期的替換,但是很多時候,我們只是想臨時修改一次網絡請求結果,這個時候,使用 Rewrite 功能雖然也可以達到目的,但是過于麻煩,對于臨時性的修改,我們最好使用 Breakpoints 功能。

Breakpoints 功能類似我們在 Xcode 中設置的斷點一樣,當指定的網絡請求發生時,Charles 會截獲該請求,這個時候,我們可以在 Charles 中臨時修改網絡請求的返回內容。

下圖是我們臨時修改獲取用戶信息的 API,將用戶的昵稱進行了更改,修改完成后點擊 “Execute” 則可以讓網絡請求繼續進行。

charles-breakpoint.png

需要注意的是,使用 Breakpoints 功能將網絡請求截獲并修改過程中,整個網絡請求的計時并不會暫停,所以長時間的暫停可能導致客戶端的請求超時。

反向代理

Charles 的反向代理功能允許我們將本地的端口映射到遠程的另一個端口上。例如,在下圖中,我將本機的 61234 端口映射到了遠程(www.yuantiku.com)的80端口上了。這樣,當我訪問本地的 61234 端口時,實際返回的內容會由 www.yuantiku.com 的 80 端口提供。

charles-reverse-proxy.jpg

設置外部代理,解決與翻墻軟件的沖突

Charles 的原理是把自己設置成系統的代理服務器,但是在中國,由于工作需要,我們常常需要使用 Google 搜索,所以大部分程序員都有自己的翻墻軟件,而這些軟件的基本原理,也是把自己設置成系統的代理服務器,來做到透明的翻墻。

為了使得兩者能夠和平共處,我們可以在 Charles 的?External Proxy Settings?中,設置翻墻的代理端口以及相關信息。同時,我們也要關閉相關翻墻軟件的自動設置,使其不主動修改系統代理,避免 Charles 失效。

總結

通過 Charles 軟件,我們可以很方便地在日常開發中,截取和調試網絡請求內容,分析封包協議以及模擬慢速網絡。用好 Charles 可以極大的方便我們對于帶有網絡請求的 App 的開發和調試。

轉載于:https://my.oschina.net/daxiaLKS/blog/906699

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395680.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395680.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395680.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python每秒20個請求_使用Python每秒百萬個請求

python每秒20個請求by Pawe? Piotr Przeradowski通過Pawe?Piotr Przeradowski 使用Python每秒百萬個請求 (A million requests per second with Python) Is it possible to hit a million requests per second with Python? Probably not until recently.使用Python每秒可以…

iOS開發——處理1000張圖片的內存優化

一、項目需求 在實際項目中,用戶在上傳圖片時,有時會一次性上傳大量的圖片。在上傳圖片前,我們要進行一系列操作,比如:旋轉圖片為正確方向,壓縮圖片等,這些操作需要將圖片加載到內存中&#xff…

jquery ui php,php – 打開帶有動態內容的jQuery UI對話框

我有一個關于jQuery UI對話框的問題,并顯示數據庫中的動態內容.所以我得到了一個web應用程序,我還需要創建一個管理模塊來管理所有用戶和其他信息.我創建了一個頁面,顯示列表中的所有用戶,在每一行中我也創建了一個編輯按鈕.我想這樣做,當你按下用戶的編輯按鈕時,會打開一個對話…

linux shell的單行多行注釋

1.單行注釋&#xff0c;使用符號# echo "123456"echo "test"#echo "comment“ 2. 多行注釋 &#xff08;1&#xff09;使用 :<<! &#xff01; filenametest.txt :<<! fileContentcat $filenamei0 for line in $fileContent dofileList[…

MapReduce Input Split 輸入分/切片

MapReduce Input Split&#xff08;輸入分/切片&#xff09;詳解 public static long getMaxSplitSize(JobContext context) { return context.getConfiguration().getLong(SPLIT_MAXSIZE, Long.MAX_VALUE); } 如果沒有設置這maxsize默認是Long.MAX_VALUE public static long …

win7無損擴大c盤空間_無損網絡導航的空間模型

win7無損擴大c盤空間by Patryk Ada?通過PatrykAda? 無損網絡導航的空間模型 (A Spacial Model for Lossless Web Navigation) In my last post I described the concept of navigation trails as an evolution of the standard tabbed browsing model.在我的上一篇文章中&am…

php訪問者信息,如何通過PHP檢索訪問者的ISP?

我試圖糾正拉姆庫馬爾的答案,但每當我編輯他們的帖子,我將被暫時禁止,我的修改被忽略。(至于為什么,我不知道,這是我第一次也是唯一一次在這個網站上編輯。)由于網站更改和管理員執行基本的bot檢查(檢查標題),他的代碼不再工作:$IP $_SERVER[REMOTE_ADDR];$User_Agent Mozill…

從《在小吃店遇見凱恩斯》初識經濟

最近在看《在小吃店遇見凱恩斯》這本書&#xff0c;算是對經濟和經濟學的初步認識。 那些概念 1. 經濟與經濟學 經濟&#xff1a;經世濟民&#xff0c;經營國家、救贖百姓&#xff0c;發展國家經濟進步、促成人人致富。 經濟學&#xff1a;研究發展國家經濟進步、促成人人致富的…

2pc 3pc_在1990年代如何宣傳PC

2pc 3pcby Ilya Pestov通過伊利亞佩斯托夫(Ilya Pestov) 在1990年代如何宣傳PC (How PCs were advertised in the 1990s) Today, hard drives are boring. You can buy a terabyte hard drive for $50. But back in the day, people would get excited when they saw ads anno…

WPF自定義空心文字

WPF自定義空心文字 原文:WPF自定義空心文字首先創建一個自定義控件&#xff0c;繼承自FrameworkElement&#xff0c;“Generic.xaml”中可以不添加樣式。 要自定義空心文字&#xff0c;要用到繪制格式化文本FormattedText類。FormattedText對象提供的文本格式設置功能比WPF提供…

php默認日志位置,Laravel 修改默認日志文件名稱和位置的例子

修改默認日志位置我們平常的開發中可能一直把laravel的日志文件放在默認位置不會有什么影響&#xff0c;但如果我們的項目上線時是全量部署&#xff0c;每次部署都是git中最新的代碼&#xff0c;那這個時候每次都會清空我們的日志&#xff0c;顯示這不是我們所期望的&#xff0…

【轉】UITableView詳解(UITableViewCell

原文網址&#xff1a;http://www.kancloud.cn/digest/ios-1/107420 上一節中,我們定義的cell比較單一,只是單調的輸入文本和插入圖片,但是在實際開發中,有的cell上面有按鈕,有的cell上面有滑動控件,有的cell上面有開關選項等等,具體參加下面2個圖的對比: 我們可以通過…

Android 最簡單的MVP案例;

隨手擼個發出來&#xff1a; V&#xff1a;界面層 //界面層需要實現P.View方法&#xff0c;然后重寫P.View中的方法&#xff1b;M層給的數據就在這些個方法的參數中&#xff1b; // 還要獲取到P.Provide的實例&#xff0c;使用P.Provide去調用M層的方法&#xff1b; public cla…

c++編碼風格指南_100%正確編碼樣式指南

c編碼風格指南Tabs or spaces? Curly brace on the same line or a new line? 80 character width or 120?制表符或空格&#xff1f; 在同一行或新行上大括號&#xff1f; 80個字符的寬度還是120個字符&#xff1f; Coders love to argue about this kind of stuff. The ta…

Netty源碼注釋翻譯-Channel類

定義為一個通往網絡socket或者一個由I/O讀寫能力的組件。 通道提供&#xff1a; 1&#xff0c;通道的當前狀態&#xff0c;打開&#xff1f;已連接&#xff1f; 2&#xff0c;跟通道關聯的配置信息ChannelConfig&#xff0c;包括buffer大小等。 3&#xff0c;通道支持的I/O操作…

Today is weekend不是應該一定會輸出嗎

判斷語句 If…else塊&#xff0c;請看下面這個例子&#xff1a; <%! int day 3; %>                       //聲明變量感嘆號 <html> <head><title>IF...ELSE Example</title></head> <body> <% if (day …

時間模塊和時間工具

一、time模塊 三種格式 時間戳時間&#xff1a;浮點數 單位為秒 時間戳起始時間&#xff1a; 1970.1.1 0:0:0 英國倫敦時間 1970.1.1 8:0:0 我國(東8區) 結構化時間&#xff1a;元組(struct_time) 格式化時間&#xff1a;str數據類型的 1、常用方法 import timetime.sleep(secs…

redux擴展工具_用鴨子擴展您的Redux App

redux擴展工具How does your front-end application scale? How do you make sure that the code you’re writing is maintainable 6 months from now?您的前端應用程序如何擴展&#xff1f; 您如何確定您正在編寫的代碼從現在起6個月內可維護&#xff1f; Redux took the …

mac下源碼安裝redis

轉載&#xff1a;http://www.jianshu.com/p/6b5eca8d908b 下載安裝包 redis-3.0.7.tar.gz 官網地址&#xff1a;http://redis.io/download 解壓&#xff1a;tar -zvxf redis-3.0.7.tar.gz 將解壓后的文件夾放到 /usr/local目錄下 編譯測試:接下來在終端中切換到/usr/local/red…

代碼掃描工具測試覆蓋率工具

測試覆蓋率工具轉載于:https://www.cnblogs.com/vivian-test/p/5398289.html