Charles簡介:
Charles是一款抓包神器,因為他是基于 java 開發的,是以跨平台,Mac、Linux、Window下都是可以使用的,確定安裝之前已經安裝了JDK。Charles官網位址:https://www.charlesproxy.com
破解:
因為這款軟體是收費的,隻有30天的免費使用期限,不過不付費使用者仍然可以繼續使用,隻是每次使用時間不能超過30分鐘,且啟動會有10秒的延時,但是還是可以湊合使用的。當然你也可以參照下面的方法進行破解,可能是新版本的原因,我親自測試多次未成功,期待新的破解方式。
以下附上之前版本的破解方法:(要下載下傳對應版本的 .jar 檔案,網上百度下即可)
基本使用:
一. 抓取 HTTP 請求
-
Mac上抓取
-
将 Charles 設定成系統代理
打開Charles之後。預設就對系統設定了代理,點選Charles菜單欄,選中 Proxy 菜單,勾選上 macOS Proxy ,已經勾選就不再設定,如下圖所示:
-
設定支援 http 請求抓取
在Proxy 菜單,選中Proxy Settings ,打開對話框,設定端口号(預設是8888,也可以自定義),并選中 Enable transparent Http proxying 選項,如下圖所示:
-
發起HTTP請求
此時就能在Charles中看見效果:
Filter 可以對請求進行過濾,并且支援通配符,下面會講到
-
-
手機上抓取
-
找到Mac的IP位址
系統偏好設定->網絡 即可找到目前的IP位址:
或者使用Charles,選中Charles,在“Help”菜單中選擇“Local IP Addess”,即可: -
在iPhone中設定
在你的iPhone->設定->無線區域網路,選中目前使用的WIFI,下拉至 HTTP代理處,選擇手動,伺服器行輸入Mac上的IP位址,端口填8888即可,具體如下:
- 打開iPhone中的APP(有網絡請求的),這時會看見Charles中已經攔截到資料了
注意:
當我們不抓包的時候,會将Charles關閉,這時候iPhone裝置是通路不到網絡的,因為設定了代理(就是Charles),這時候要将iPhone的代理關閉
-
二. 抓取 HTTPS 請求
Charles不僅能夠抓取http協定的包,也能抓取https協定的包,但是由于https是經過加密的,因為抓取的包中的内容是以密文方式展現的,通過配置Charles的SSL可以友善的以明文檢視https協定傳輸的内容
-
安裝證書
-
Mac上安裝證書
選中Charles,在“Help”菜單中選擇—>“SSL Proxying”—>“Install Charles Root Certificate”會自動打開鑰匙串通路視窗:
-
iPhone上安裝證書
iPhone上也要安裝SSL證書,可以通過連結https://www.charlesproxy.com/documentation/additional/legacy-ssl-proxying/ 下載下傳傳到iPhone上,或者使用iPhone的Safari直接通路連結,下載下傳對應的證書,然後安裝即可。
點選紅色部分下載下傳:
最後點選完成即可!
-
-
配置SSL
選中Charles,在“Proxy”菜單中選擇—>“SSL Proxying Settings ”即可彈出頁面: 添加要通路的位址的域名,預設https端口号為:443,并勾選上“Enable SSL Proxying”選項: 也可以在host中輸入: ” * ” 比對所有,預設https端口号為:443, 如下所示: 然後就能以明文方式檢視https傳輸的詳情了:
過濾網絡請求
-
通過Filter過濾
在 Filter 欄中輸入想要過濾出來的關鍵字,比如隻想檢視包含關鍵字:baidu 的請求,隻需要在 Filter 欄中輸入關鍵字:baidu 即可;當然也支援通配符,比如我們想要檢視包含關鍵字:itunes,并且以 .com 結尾的請求,隻需要在 Filter 欄中輸入 itunes.*.com 即可,如下圖所示: -
通過Include過濾
可以通過 “Proxy”->“Recording Settings”,選中 Include 欄,添加一項, 設定需要抓取的包,比如我隻想抓取 www.baidu.com 域名下的請求,可以按照如下設定: 就能隻去抓取符合規則的目标請求,目前也可以在 Exclude 中設定排除的請求。 -
總結
Filter 和 Include 的差別就是: Include 是隻抓取符合要求的請求,不符合的請求就不再抓取,而 Filter 隻是将先要抓取的請求篩選出來,但是還是去抓取了所有的請求;綜合兩者我們可以按照自己的需求進行設定如何篩選
模拟慢速網絡
有時候開發中需要測試使用者在網絡情況比較的差的時候應用的表現情況,可以使用Charles限流設定,”Proxy” -> “Thorttle Settings” 中設定如下:
或者隻針對某些域名進行設定,如下針對特定Hosts的設定:
重放和編輯
點選一個請求,右擊彈出菜單欄,我們可以進行各種操作,比如複制、儲存、編輯、重複請求等等,我們可以編輯修改任意請求資訊,比如URL位址、端口、參數等等,點選“Execute”按鈕即可發送修改後的請求:
通過 Repeat Advanced 進階重放功能可以作為簡單的性能測試,可以設定重複次數、并發數以及延時等:
其他功能(待完善)
-
Breakpoints - 斷點功能
有時候對于一些特殊請求在發往伺服器之前想要修改一些參數,或者在伺服器響應完成之後修改響應資訊,此時可以使用Charles的斷點功能,類似Xcode中的斷點調試,設定斷點之後,當有網絡請求的時候Charles會自動跳轉到斷點處,此時我們就能進行相關的修改,斷點設定步驟:”Proxy” -> “Breakpoints Settings”,彈出設定欄,選中 “Enable Breakpoints”,添加需要調試的請求即可調試: -
Rewrite功能
Rewrite功能适合對網絡請求進行一些正則替換。
通過“Tools”->”Rewrite “,進入設定頁面,
比如有這樣一個需求,我們通路接口:http://httpbin.org/get,将傳回的資料參數名“X-Request-Id”,修改成“X_id”,具體操作如下:
原始的資料結構如圖:
設定Rewrite: 設定之後重新請求接口,檢視截取的請求結果,發現已經修改成了“X_id”,效果如下: -
DNS Spoofing Settings
DNS欺騙,就是把域名解析到一個假的IP上。一般的開發流程中,在上線之前都需要在測試環境中先行進行驗證,而此時手機用戶端請求的域名是不太容易改變的,可以通過設定 DNS 方式把域名轉發到測試機上,通過“Tools”->”DNS Spoofing”,進入設定頁面
比如要把所有 www.baidu.com 的域名轉到 test.com 的伺服器上,可以設定如下:
此時再通路百度,會發現通路不了了!! -
Map功能
通過“Tools”-> “Map Remote” 或者 “Tools”-> “Map Local”,進入相應的頁面設定-
Map Remote
作用:将指定的網絡請求重定向到另一個網址。
應用:當我們請求某個接口 A ,假設 A 的位址為:http://abc.com/user?user_id=100, 但是由于背景還沒有寫好,這時候為了調試,我們可以将請求臨時轉到位址 B 上面;假設 B 的位址為 : http://10.1.1.111/user.json
具體設定如下圖:
-
Map Local
作用:将指定的網絡請求重定向到本地檔案。
應用:當我們把一個請求傳回的資料直接映射到本地,例如上面說的把請求 A 位址傳回的資料内容映射到本地檔案* user.json* 内,如下圖所示:
-
參考連結:
http://tech.365rili.com/?p=57
http://blog.devtang.com/2013/12/11/network-tool-charles-intr/
http://blog.csdn.net/holemole/article/details/51383513
http://www.cocoachina.com/ios/20161116/18079.html
http://blog.csdn.net/jiangwei0910410003/article/details/41620363/
https://www.charlesproxy.com/download/
http://www.jianshu.com/p/4a6eb5aad398
總結:
還有 緩存功能、設定黑名單 等等,在此就不再寫了,都還是很簡單的;
還有待研究的就是 socket 請求的抓取!!!
至此:結束2天的Charles學習