Charles 抓包工具

Charles 簡介

Charles 是在 PC 端常用的網絡封包截取工具,在做移動開發時,我們爲了調試與服務器端的網絡通訊協議,常常需要截取網絡封包來分析。除了在做移動開發中調試端口外,Charles 也可以用於分析第三方應用的通訊協議。配合 Charles 的 SSL 功能,Charles 還可以分析 Https 協議。

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

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

Charles 主要的功能包括:

下載安裝 Charles

https://www.charlesproxy.com/latest-release/download.do

Charles 支持的操作系統包括:

打開瀏覽器訪問 Charles 官網 ,下載相應系統的 Charles 安裝包,然後安裝即可:

如果使用 Firefox,也可以下載 Firefox 插件。參考 Firefox Add-On

Charles 主界面介紹

工具導航欄

Charles 頂部爲菜單導航欄,菜單導航欄下面爲工具導航欄。

工具導航欄中提供了幾種常用工具:

主界面視圖

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

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

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

Charles 菜單介紹

Charles 的主菜單包括:File、Edit、View、Proxy、Tools、Window、Help。用的最多的主菜單分別是 Proxy 和 Tools。

Proxy 菜單

Charles 是一個 HTTP 和 SOCKS 代理服務器。代理請求和響應使 Charles 能夠在請求從客戶端傳遞到服務器時檢查和更改請求,以及從服務器傳遞到客戶端時的響應。下面主要介紹 Charles 提供的一些代理功能。Proxy 菜單的視圖如下圖所示:

Proxy 菜單包含以下功能:

Recording Settings(記錄會話設置)

Recording Settings 和 Start/Stop Recording 配合使用,在 Start Recording 的狀態下,可以通過 Recording Settings 配置 Charles 的會話記錄行爲。Recording Settings 的視圖如下圖所示:

Recording Settings 有 Options、Include、Exclude 三個選項卡:

Include 和 Exclude 選項卡的操作相同,選擇 Add,然後填入需要監控的 Procotol、Host 和 Port 等信息,這樣就達到了過濾的目的。如下圖所示:

還有一種方法就是在一個請求網址上右擊選擇 Focus,然後其他的請求就會被放到一個叫 Other Host 的分類裏面,這樣也達到了過濾的目的。

Throttle Settings(節流設置)

Throttle Settings 和 Start/Stop Throttling 配合使用,在 Start Throttling 的狀態下,可以通過 Throttle Settings 配置 Charles 的網速模擬配置。Throttle Settings 的視圖如下圖所示:

勾選 Enable Throttling 啓用網速模擬配置,在 Throttle Preset 下選擇網絡類型即可,具體設置可以根據實際情況自行設置。如果只想模擬指定網站的慢速網絡,可以再勾選上圖中的 Only for selected hosts 項,然後在對話框的下半部分設置中增加指定的 hosts 項即可。

Throttle Settings 視圖中的選項含義如下:

Breakpoint Settings(斷點設置)

Breakpoint Settings 和 Enable/Disable Breakpoints 配合使用,在 Enable Breakpoints 的狀態下,可以通過 Breakpoint Settings 配置 Charles 的斷點模式。Breakpoint Settings 的視圖如下圖所示:

勾選 Enable Breakpoints 啓用斷點模式,選擇 Add,然後填入需要監控的 Scheme、Procotol、Host 和 Port 等信息,這樣就達到了設置斷點的目的。然後可以來觀察或者修改請求或者返回的內容,但是在這過程中需要注意請求的超時時間問題。或者可以在某個想要設置斷點的請求網址上右擊選擇 Breakpoints 來設置斷點。

Reverse Proxies Settings(反向代理設置)

反向代理在本地端口上創建 Web 服務器,該端口透明地將請求代理給遠程 Web 服務器。反向代理上的所有請求和響應都可以記錄在 Charles 中。

如果您的客戶端應用程序不支持使用 HTTP 代理,或者您希望避免將其配置爲使用代理,那麼反向代理很有用。創建原始目標 Web 服務器的反向代理,然後將客戶端應用程序連接到本地端口;反向代理對客戶端應用程序是透明的,使您可以查看 Charles 以前可能無法訪問的流量。

有關反向代理的更多信息,請訪問 Reverse proxy

Port Forwarding Settings(端口轉發)

可以將任何 TCP/IP 或 UDP 端口配置爲使用 Port Forwarding 工具從 Charles 轉發到遠程主機。這樣可以調試 Charles 中的任何協議。

在 Macromedia Flash 中調試 XMLSocket 連接時,這尤其有用。

還可以使用 Charles 作爲 SOCKS 代理,因此無需設置端口轉發。

Windows Proxy(記錄計算機上的所有請求)

如果想要抓取電腦端的請求,勾選 Windows Proxy 選項即可;如果只需要抓取手機請求,則取消勾選這個選項。

Proxy Settings(代理設置)

Proxy Settings 的視圖如下圖所示:

代理端口默認爲 8888(可以修改),並且勾上 Enable transparent HTTP proxying 就完成了在 Charles 上的代理設置。

SSL Proxy Settings(SSL 代理設置)

SSL Proxy Settings 的視圖如下圖所示:

勾上 Enable SSL proxying 就完成了在 Charles 上的 SSL 代理設置。之後也可以選擇 Add,然後填入需要監控的 Host 和 Port 信息,這樣就達到了針對某個域名啓用 SSL 代理的目的。

Access Control Settings(訪問控制設置)

Access Control Settings 表示訪問控制設置。訪問控制列表確定誰可以使用此 Charles 實例。通常,您在自己的計算機上運行 Charles,並且您只打算自己使用它,因此 localhost 始終包含在訪問控制列表中。也可以選擇 Add,然後填入允許訪問的 IP,這樣就達到了允許某個 IP 訪問 Charles 的目的。

External Proxy Settings(外部代理設置)

External Proxy Settings 表示外部代理設置。可能在網絡上有一個代理服務器,必須使用該代理服務器才能訪問 Internet。在這種情況下,需要將 Charles 配置爲在嘗試訪問 Internet 時使用現有代理。

可以配置單獨的代理地址和端口:

如果您有 SOCKS 代理,Charles 將把它用於所有非 HTTP(S) 流量,例如端口轉發。

Web Interface Settings(Web 界面設置)

Web Interface Settings 表示 Web 界面設置。Charles 有一個 Web 界面,可以讓您從瀏覽器控制 Charles,或使用 Web 界面作爲 Web 服務使用外部程序。

在 External Proxy Settings 視圖中勾選 Enable the web interface 選項啓用 Web 界面。可以允許匿名訪問,也可以配置用戶名和密碼。還可以通過在配置使用 Charles 作爲其代理的 Web 瀏覽器中訪問 http://control.charles/ 來訪問 Web 界面。

Web 界面提供對以下功能的訪問:

通過檢查 Web 界面 HTML ,您可以推導出如何將其用作 Web 服務來自動化 Charles。

Tools 菜單

Charles 是一個 HTTP 和 SOCKS 代理服務器,所有的請求都會經過 Charles。下面主要介紹 Charles 提供的一些實用工具。Tools 菜單的視圖如下圖所示:

Tools 菜單包含以下功能:

No Caching Settings(禁用緩存)

No Caching 工具可防止客戶端應用程序(如 Web 瀏覽器)緩存任何資源。因此,始終向遠程網站發出請求,您始終可以看到最新版本。

適用範圍

該工具可以作用於每個請求 (選中 Enable No Caching 即可),也可以僅對你配置的請求啓用 (啓用 No Caching 的同時,請選中 Only for selected locations)。當用於選定的請求時,可以使用簡單但功能強大的模式匹配將工具的效果限制爲指定的主機和路徑。

工作原理

No Caching 工具通過操縱控制響應緩存的 HTTP 請求頭來防止緩存。從請求中刪除 If-Modified-Since 和 If-None-Match 請求頭,添加 Pragma:no-cache 和 Cache-control:no-cache。從響應中刪除 Expires,Last-Modified 和 ETag 請求頭,添加 Expires:0 和 Cache-Control:no-cache。

Block Cookies Settings(禁用 Cookie)

Block Cookies 工具阻止了 Cookie 的發送和接收。它可用於測試網站,就像在瀏覽器中禁用了 Cookie 一樣。請注意,網絡爬蟲(例如 Google)通常不支持 Cookie,因此該工具還可用於模擬網絡爬蟲網站的視圖。

適用範圍

該工具可以作用於每個請求 (選中 Enable Block Cookies 即可),也可以僅對你配置的請求啓用 (啓用 Block Cookies 的同時,請選中 Only for selected locations)。當用於選定的請求時,可以使用簡單但功能強大的模式匹配將工具的效果限制爲指定的主機和路徑。

工作原理

Block Cookies 工具通過操縱控制響應 Cookies 的 HTTP 請求頭來禁用 Cookies。從請求中移除 Cookie 請求頭,防止 Cookie 值從客戶端應用程序(例如 Web 瀏覽器)發送到遠程服務器。從響應中刪除 Set-Cookie 請求頭,防止請求設置客戶端應用程序從遠程服務器接收的 Cookie。

Map Remote Settings(遠程映射)

Map Remote 工具根據配置的映射更改請求站點,以便從新站點透明地提供響應,就好像這是原始請求一樣。

通過此映射,您可以從另一個站點提供全部或部分站點。例如:

使用建議

如果您擁有站點的開發版本並且希望能夠通過開發提供的某些請求瀏覽實時站點,則 Map Remote 非常有用。例如,您可能希望從開發服務器提供 css 和 images 目錄。使用 live.com/css/ 等映射到 dev.com/css/ 或 live.com/*.css 到 dev.com 。

映射類型

HTTPS

Map Remote 工具可以將 HTTP 請求映射到 HTTPS 目標,反之亦然,因此您可以將 HTTP 或 HTTPS 站點映射到其對立面。

站點匹配

每個站點匹配可能包含協議、主機、端口和路徑模式,以匹配特定的 URL。站點可能包括通配符。當您向此工具添加新站點時,可能會找到有關創建站點匹配的更多幫助。

Map Local Settings(本地映射)

Map Local 工具使您可以使用本地文件,就像它們是遠程網站的一部分一樣。您可以在本地開發文件,並像在線上一樣測試它們。本地文件的內容將返回給客戶端,就像它是正常的遠程響應一樣。

Map Local 可以大大加快開發和測試速度,否則您必須將文件上傳到網站以測試結果。使用 Map Local,您可以在開發環境中安全地進行測試。

動態文件

動態文件(例如包含服務器端腳本的文件)不會由 Map Local 執行,因此如果文件中有任何腳本,腳本將按原樣返回到瀏覽器,這可能不是預期的結果。如果您想使用動態文件,就好像它們是遠程網站的一部分一樣,請參閱 Map Remote 工具。

工作原理

當請求與 Map Local 映射匹配時,它會檢查與路徑匹配的本地文件。它不包括查詢字符串(如果有)。如果在本地找到所請求的文件,則將其作爲響應返回,就好像它是從遠程站點加載的一樣,因此它對客戶端是透明的。如果在本地找不到所請求的文件,那麼該請求會像平常一樣由網站提供,返回由真正的服務器提供的數據。

站點匹配

每個站點匹配可能包含協議、主機、端口和路徑模式,以匹配特定的 URL。站點可能包括通配符。當您向此工具添加新站點時,可能會找到有關創建站點匹配的更多幫助。

Rewrite Settings(重寫)

Rewrite 工具允許創建請求和響應在通過 Charles 時修改他們的規則。如:添加或更改頭信息、搜索和替換響應內容中的某些文本等。

重寫集

重寫集可以單獨激活和停用。每個集合包含站點和規則的列表。這些站點選擇規則將要運行的請求和響應。

重寫規則

每個規則都描述了一次重寫操作。規則可能會影響請求 URL 的 Header,正文或部分內容;它可以根據請求或響應來操作;它可以定義搜索、替換或者僅替換樣式重寫。

站點匹配

每個站點匹配可能包含協議、主機、端口和路徑模式,以匹配特定的 URL。站點可能包括通配符。當您向此工具添加新站點時,可能會找到有關創建站點匹配的更多幫助。

調試

當重寫操作未按預期工作時,重寫工具可能難以調試。如果您遇到問題,請嘗試添加一個非常基本的規則,例如添加明顯頭信息的規則,以便您可以查看規則是否與請求完全匹配。同時打開錯誤日誌中的調試,以獲取從 Charles 中的 Window 菜單訪問的錯誤日誌中打印的一些調試信息。

Black List Settings(黑名單)

Black List 工具允許輸入應該被阻止的域名。當 Web 瀏覽器嘗試從被列入黑名單的域名請求任何頁面時,該請求將被 Charles 阻止。您還可以輸入通配符來阻止其子域名。

White List Settings(白名單)

Black List 工具允許輸入僅僅被允許的域名。Black List 工具將阻止除被列入白名單的域名之外的所有請求。

白名單工具用於僅允許指定的域名;黑名單工具,用於僅屏蔽指定的域名。

如果一個請求與 “黑名單” 和“白名單”都匹配,則該請求會被阻止。

DNS Spoofing Settings(DNS 欺騙)

DNS Spoofing 工具允許通過將自己的主機名指定給遠程地址映射來欺騙 DNS 查找。當請求通過 Charles 時,您的 DNS 映射將優先。

Charles 包含配置的域名到 IP 地址映射的列表。當針對列出的域名發出請求時,Spoof DNS 插件會發現欺騙 IP 將請求重定向到該地址。主機 HTTP 標頭保持不變,因此就像您的 DNS 服務器返回欺騙性 IP 一樣。

虛擬主機

虛擬主機是指單個 IP 地址上有多個站點,Web 服務器根據瀏覽器中鍵入的名稱確定要請求的站點。更準確地說,它查看請求中發送的主機頭。

如果沒有爲您的站點設置 DNS,那麼您通常無法測試它,因爲您不能只輸入 IP 地址,因爲服務器無法獲取名稱,因此無法將請求與網站。使用 DNS 欺騙工具來克服此問題。

Mirror Settings(鏡像)

Mirror 工具會在瀏覽指定站點時,把接收到的響應內容克隆一份,並保存在磁盤上指定的路徑下。

保存文件的路徑會與瀏覽站點的目錄結構相同,並且 Charles 會爲主機名創建一個根目錄。文件名從 URL 導出並轉換爲適合的數據進行保存。查詢字符串包含在文件名中。如果收到相同 URL 的兩個響應,則後面一個文件會覆蓋前面的同名文件,因此保存在鏡像中在的響應內容將始終爲最新的。

選定站點

可以爲每個請求啓用該工具,也可以僅爲指定站點啓用該工具。當用於選定的站點時,可以使用簡單但功能強大的模式匹配將工具的效果限制爲指定的主機和 / 或路徑。

副作用

如果爲請求啓用鏡像工具,它將導致任何壓縮或編碼的響應被解碼。因此,如果服務器提供了壓縮響應,Charles 將在傳遞給客戶端之前對其進行解壓縮,這通常不會產生任何影響。但是如果您已經構建了自己的客戶端,或者客戶端希望得到壓縮響應,此時將會產生影響。使用 web 瀏覽器則沒有任何影響。

Auto Save Settings(自動保存)

Auto Save 工具會按設定的時間間隔自動保存和清除記錄會話。

如果您讓 Charles 長時間監控網絡活動,並希望將記錄分解爲可管理的單元,或者避免因數據量過大而可能出現的內存不足情況,這將非常有用。

輸入以分鐘爲單位的保存間隔以及保存會話文件的目錄。您可以選擇是否在每次運行 Charles 時啓動 Auto Save 工具,否則在 Charles 啓動時將始終禁用 Auto Save 工具。

會話文件的名稱中保存時間戳,格式爲 yyyyMMddHHmm,即年月日時分,以便按字母順序排序時,它們以正確的順序顯示。

Client Process Settings(客戶端進程)

Client Process 工具顯示負責發出每個請求的本地客戶端進程的名稱。客戶端進程通常是您的 Web 瀏覽器 (例如 firefox.exe),但客戶端進程工具可以幫助您發現許多可能未知的 HTTP 客戶端。

客戶端進程名稱顯示在每個請求的 Notes 區域中。

如果您可以在 Charles 中看到不確定原始進程的請求,則客戶端進程工具很有用。它僅適用於在運行 Charles 的計算機上發出的請求。

在 Charles 接受每個連接之前,該工具將引入一個短暫的延遲。延遲通常不明顯或不顯著。

選定站點

可以爲每個請求啓用該工具,也可以僅爲指定站點啓用該工具。當用於選定的站點時,可以使用簡單但功能強大的模式匹配將工具的效果限制爲指定的主機和 / 或路徑。

Compose(編輯修改)

Compose 工具允許在原有的請求基礎上修改。

Repeat(重複)

Repeat 工具允許選擇一個請求並重復它。Charles 將請求重新發送到服務器,並將響應顯示爲新請求。如果您正在進行後端更改並希望在瀏覽器 (或其他客戶機) 中重複請求的情況下測試這些更改,那麼這將非常有用。特別是如果重新創建請求需要花費一些精力,例如在遊戲中獲得分數,這將節省大量精力。

重複請求是在 Charles 內部完成的,因此無法在瀏覽器或其他客戶端中查看響應,響應只能在 Charles 中查看。

Repeat Advanced(高級重複)

Repeat Advanced 工具擴展了 Repeat 工具,提供了迭代次數和併發數的選項。這對於負載測試非常有用。

Validate(驗證)

Validate 工具允許 Charles 通過將它們發送到 W3C HTML 驗證器、W3C CSS 驗證器和 W3C Feed 驗證器來驗證記錄的響應。

驗證報告在 Charles 中顯示,其中包含與響應源中相應行相關聯的任何警告或錯誤(雙擊錯誤消息中的行號可以切換到源視圖)。

因爲 Charles 測試它記錄的響應,所以它可以測試不易測試的場景,例如在提交表單後呈現錯誤消息。

重新驗證

驗證後,可以從驗證結果中選擇響應並 Repeat,重複原始請求,然後重新驗證結果。

Publish Gist(發佈要點)

Publish Gist 工具可以將將所選請求和響應作爲要點發布。默認情況下,這個要點將匿名發佈,這意味着你將無法做到
刪除它。可以在 Tools 菜單的 Publish Gist Settings 中授權 Charles 使用您的 GitHub 帳戶進行發佈。

Import/Export Settings(導入 / 導出)

Import/Export 工具允許導入 / 導出 Charles 的 Proxy、Tools、Preferences 等設置。

Profiles(配置)

Profiles 包含所有配置設置的完整副本。

每次更改當前設置時,系統都會更新當前活動的配置文件,當您更改活動配置文件時,所有設置都將恢復爲上次使用該配置文件時的狀態。

請注意,如果導入已保存的配置,則會覆蓋當前配置文件的設置。建議使用導入 / 導出來備份或創建當前配置和配置文件的快照,以維護多個並行工作區。

Charles 使用教程

通過 Charles 進行 PC 端抓包

Charles 會自動配置瀏覽器和工具的代理設置,所以說打開工具直接就已經是抓包狀態了。只需要保證一下幾點即可:

  1. 確保 Charles 處於 Start Recording 狀態。

  2. 勾選 Proxy | Windows ProxyProxy | Mozilla FireFox Proxy

通過 Charles 進行移動端抓包

手機抓包的原理,和 PC 類似,手機通過把網絡委託給 Charles 進行代理與服務端進行對話。具體步驟如下:

  1. 使手機和電腦在一個局域網內,不一定非要是一個 IP 段,只要是在同一個路由器下即可。

  2. 電腦端配置:

  3. 關掉電腦端的防火牆(這點很重要)。

  4. 打開 Charles 的代理功能:通過主菜單打開 Proxy | Proxy Settings 彈窗,填入代理端口 (端口默認爲 8888,不用修改),勾選 Enable transparent HTTP proxying。

  5. 如果不需要抓取電腦上的請求,可以取消勾選 Proxy | Windows ProxyProxy | Mozilla FireFox Proxy

  6. 手機端配置:通過 Charles 的主菜單 Help | Local IP Address 或者通過命令行工具輸入 ipconfig 查看本機的 IP 地址。設置代理:打開手機端的 WIFI 代理設置,輸入電腦 IP 和 Charles 的代理端口。

  7. 設置好之後,我們打開手機上的任意需要網絡請求的程序,就可以看到 Charles 彈出手機請求連接的確認菜單(只有首次彈出),點擊 Allow 即可完成設置。

  8. 完成以上步驟,就可以進行抓包了。

通過 Charles 進行 HTTPS 抓包

HTTPS 的抓包需要在 HTTP 抓包基礎上再進行設置。需要完成一下步驟:

  1. 完成 HTTP 抓包配置。

  2. 電腦端安裝 Charles 證書:通過 Charles 的主菜單 Help | SSL Proxying | Install Charles Root Certificate 安裝證書。

  3. 設置 SSL 代理:通過主菜單打開 Proxy | SSL Proxy Settings 彈窗,勾選 Enable SSL proxying。

  4. 移動端安裝 Charles 證書:通過 Charles 的主菜單 Help | SSL Proxying | Install Charles Root Certificate on a Mobile Device or Remote Browser 安裝證書。

  5. 設置好之後,我們打開手機上的任意需要網絡請求的程序,就可以看到 Charles 彈出手機請求連接的確認菜單(只有首次彈出),點擊 Allow 即可完成設置。

  6. 完成以上步驟,就可以進行 HTTPS 抓包了。

Charles License

註冊碼來自於網絡,註冊碼 Windows 和 Mac 通用。

source:  //henleylee.github.io/posts/2018/da575840.html
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/WmFHCUFQheyC0imSRUnAOg