抓包工具Charles從入門到入土

前言

更多內容,請訪問個人 我的博客git


簡介

image
Charles 是在 Mac 下經常使用的網絡封包截取工具,經過將本身設置成系統的網絡訪問代理服務器,使得全部的網絡訪問請求都經過它來完成,從而實現了網絡封包的截取和分析。

Charles 是收費軟件,能夠免費試用 30 天。試用期事後,未付費的用戶仍然能夠繼續使用,可是每次使用時間不能超過 30 分鐘,而且啓動時將會有 10 秒種的延時。所以,該付費方案對廣大用戶仍是至關友好的,即便你長期不付費,也能使用完整的軟件功能。只是當你須要長時間進行封包調試時,會由於 Charles 強制關閉而遇到影響。github

主要功能

  • 截取 Http 和 Https 網絡封包;
  • 支持重發網絡請求,方便後端調試;
  • 支持修改網絡請求參數;
  • 支持網絡請求的截獲並動態修改;
  • 支持流量控制,能夠模擬慢速網絡以及等待時間(latency)較長的請求;
  • 支持AJAX調試,能夠自動將json或xml數據格式化,方便查看;
  • 支持AMF調試,能夠將Flash Remoting 或 Flex;
  • Remoting信息格式化,方便查看;
  • 檢查HTML,CSS和RSS內容是否符合W3C標準。

安裝

設置系統代理

image

緊接着,軟件中就會出現抓取的網頁信息:json

image

Charles 主要提供兩種查看封包的視圖,分爲 Structure 和 Sequence:後端

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

獲取手機上的網絡封包

  • 打開代理功能

    在 Charles 的菜單欄上選擇 「Proxy」->」Proxy Settings」,填入代理端口 8888,而且勾上 「Enable transparent HTTP proxying」 就完成了在 Charles 上的設置。以下圖: 瀏覽器

    image

    image

  • 獲取電腦IP

    Charles 頂部菜單的 「Help」->」Local IP Address」,便可在彈出的對話框中看到 IP 地址,以下圖:服務器

    image

    image

  • 手機設置代理鏈接

    必定必定,手機和電腦要處於同一局域網下。 在手機的網絡設置中,填入剛纔獲取到的電腦IP和 Charles 上設置的端口,以下圖:網絡

    image

    image

    完事以後,打開手機上任意須要聯網的程序,就能夠在 Charles 上看到請求鏈接的確認提示,點擊確認,以下:併發

    image

截獲 HTTPS

必須安裝Charles的CA證書,否則 HTTPS 的返回結果會是一堆亂碼。工具

首先咱們須要在 Mac 電腦上安裝證書。點擊 Charles 的頂部菜單,選擇 「Help」 -> 「SSL Proxying」 -> 「Install Charles Root Certificate」,而後輸入系統的賬號密碼,便可在 KeyChain 看到添加好的證書。以下圖:測試

image

若是咱們須要在手機上截取 Https 的內容,還須要在手機上安裝相應的證書。點擊 Charles 的頂部菜單,選擇 「Help」 -> 「SSL Proxying」 -> 「Install Charles Root Certificate on a Mobile Device or Remote Browser」,而後就能夠看到 Charles 彈出的安裝教程。以下圖:

image

image

在設備上設置好 Charles 爲代理後,在手機瀏覽器中訪問地址:chls.pro/ssl ,便可打開證書安裝的界面,安裝完證書後,就能夠截取手機上的 Https 內容了。

模擬低速網絡

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

在 Charles 的菜單上,選擇 「Proxy」->」Throttle Setting」 項,在以後彈出的對話框中,咱們能夠勾選上 「Enable Throttling」,而且能夠設置 Throttle Preset 的類型。以下圖:

image
image

若是咱們只想模擬指定網站的慢速網絡,能夠再勾選上圖中的 「Only for selected hosts」 項,而後在對話框的下半部分設置中增長指定的 hosts 項便可。

給服務器作壓力測試

咱們可使用 Charles 的 Repeat 功能來簡單地測試服務器的併發處理能力,咱們在想打壓的網絡請求上(POST 或 GET 請求都可)右擊,而後選擇 「Repeat Advanced」菜單項,以下圖:

image

接着咱們就能夠在彈出的對話框中,選擇打壓的併發線程數以及打壓次數,肯定以後,便可開始打壓。

image

反向代理

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

image
image

修改服務器返回內容

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

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

Map 功能

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

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

image

對於 Map Remote 功能,咱們須要分別填寫網絡重定向的源地址和目的地址,對於不須要限制的條件,能夠留空。下圖是一個示例,我將全部 www.baidu.com 的請求重定向到了 pangao1990.github.io 。

image

對於 Map Local 功能,咱們須要填寫的重定向的源地址和本地的目標文件。對於有一些複雜的網絡請求結果,咱們能夠先使用 Charles 提供的 「Save Response…」 功能,將請求結果保存到本地(以下圖),而後稍加修改,成爲咱們的目標映射文件。

image

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

image

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

Rewrite 功能

Rewrite 功能功能適合對某一類網絡請求進行一些正則替換,以達到修改結果的目的。 例如,我博客返回的暱稱是「潘高」,我如今要改爲「大帥哥」,以下圖:

image
image

Breakpoints 功能

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

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

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

相關文章
相關標籤/搜索