Charles簡(jiǎn)介:
Charles是一款抓包神器,因?yàn)樗腔? java 開(kāi)發(fā)的,所以跨平臺(tái),Mac、Linux、Window下都是可以使用的,確保安裝之前已經(jīng)安裝了JDK。Charles官網(wǎng)地址:https://www.charlesproxy.com
破解:
因?yàn)檫@款軟件是收費(fèi)的,只有30天的免費(fèi)使用期限,不過(guò)不付費(fèi)用戶仍然可以繼續(xù)使用,只是每次使用時(shí)間不能超過(guò)30分鐘,且啟動(dòng)會(huì)有10秒的延時(shí),但是還是可以湊合使用的。當(dāng)然你也可以參照下面的方法進(jìn)行破解,可能是新版本的原因,我親自測(cè)試多次未成功,期待新的破解方式。
以下附上之前版本的破解方法:(要下載對(duì)應(yīng)版本的 .jar 文件,網(wǎng)上百度下即可)


基本使用:
一. 抓取 HTTP 請(qǐng)求
-
Mac上抓取
-
將 Charles 設(shè)置成系統(tǒng)代理
打開(kāi)Charles之后。默認(rèn)就對(duì)系統(tǒng)設(shè)置了代理,點(diǎn)擊Charles菜單欄,選中 Proxy 菜單,勾選上 macOS Proxy ,已經(jīng)勾選就不再設(shè)置,如下圖所示:
2017-03-21 下午4.00.55.png-
設(shè)置支持 http 請(qǐng)求抓取
在Proxy 菜單,選中Proxy Settings ,打開(kāi)對(duì)話框,設(shè)置端口號(hào)(默認(rèn)是8888,也可以自定義),并選中 Enable transparent Http proxying 選項(xiàng),如下圖所示:
2017-03-21 下午4.06.47.png2017-03-21 下午4.06.52.png -
發(fā)起HTTP請(qǐng)求
此時(shí)就能在Charles中看見(jiàn)效果:8BD82F6A-3C1A-4B6F-A270-3FEA8F69E342.png3333.png
Filter 可以對(duì)請(qǐng)求進(jìn)行過(guò)濾,并且支持通配符,下面會(huì)講到
-
-
手機(jī)上抓取
-
找到Mac的IP地址
系統(tǒng)偏好設(shè)置->網(wǎng)絡(luò) 即可找到當(dāng)前的IP地址:BEC42872-FAD9-4471-A84A-C3FD1DE31107.png或者使用Charles,選中Charles,在“Help”菜單中選擇“Local IP Addess”,即可:5854198A-F3D2-4BEB-8F70-60AC2822E46A.png2017-03-21 下午4.32.09.png2017-03-21 下午4.32.18.png -
在iPhone中設(shè)置
在你的iPhone->設(shè)置->無(wú)線局域網(wǎng),選中當(dāng)前使用的WIFI,下拉至 HTTP代理處,選擇手動(dòng),服務(wù)器行輸入Mac上的IP地址,端口填8888即可,具體如下:
97929803-C237-4AEC-BA9C-A199020F5D77.png -
打開(kāi)iPhone中的APP(有網(wǎng)絡(luò)請(qǐng)求的),這時(shí)會(huì)看見(jiàn)Charles中已經(jīng)攔截到數(shù)據(jù)了
屏幕快照 2017-03-21 下午5.10.28.png
注意:
當(dāng)我們不抓包的時(shí)候,會(huì)將Charles關(guān)閉,這時(shí)候iPhone設(shè)備是訪問(wèn)不到網(wǎng)絡(luò)的,因?yàn)樵O(shè)置了代理(就是Charles),這時(shí)候要將iPhone的代理關(guān)閉
-
二. 抓取 HTTPS 請(qǐng)求
Charles不僅能夠抓取http協(xié)議的包,也能抓取https協(xié)議的包,但是由于https是經(jīng)過(guò)加密的,因?yàn)樽ト〉陌械膬?nèi)容是以密文方式展現(xiàn)的,通過(guò)配置Charles的SSL可以方便的以明文查看https協(xié)議傳輸?shù)膬?nèi)容
-
安裝證書(shū)
-
Mac上安裝證書(shū)
選中Charles,在“Help”菜單中選擇—>“SSL Proxying”—>“Install Charles Root Certificate”會(huì)自動(dòng)打開(kāi)鑰匙串訪問(wèn)窗口:676E2647-22D4-4C21-AEC3-D7DC9964242B.png
2017-03-21 下午5.14.01.png2017-03-21 下午5.15.01.png2017-03-21 下午5.15.15.png2017-03-21 下午5.15.39.png0FD746DA-84BB-460E-89FB-B5BEDD83B491.png-
iPhone上安裝證書(shū)
iPhone上也要安裝SSL證書(shū),可以通過(guò)鏈接https://www.charlesproxy.com/documentation/additional/legacy-ssl-proxying/ 下載傳到iPhone上,或者使用iPhone的Safari直接訪問(wèn)鏈接,下載對(duì)應(yīng)的證書(shū),然后安裝即可。
點(diǎn)擊紅色部分下載:
F2D9E8E6-6833-493C-947F-74983CBA4DB1.png19C31D21422B0AF12F11269FF3C9F744.png2139C62B3ED8223E2B7DBFB8E8AD980B.png06F7E9DCA3434F51B3D6B1E7ED785D5B.png
最后點(diǎn)擊完成即可!
-
-
配置SSL
選中Charles,在“Proxy”菜單中選擇—>“SSL Proxying Settings ”即可彈出頁(yè)面:
添加要訪問(wèn)的地址的域名,默認(rèn)https端口號(hào)為:443,并勾選上“Enable SSL Proxying”選項(xiàng):2017-03-21 下午5.37.30.png2017-03-21 下午5.19.07.png也可以在host中輸入: " * " 匹配所有,默認(rèn)https端口號(hào)為:443, 如下所示:
1479259184165591.jpg1479259195476646.jpg然后就能以明文方式查看https傳輸?shù)脑斍榱?
D539596D-83E8-4C3A-B833-B987415738FB.png
過(guò)濾網(wǎng)絡(luò)請(qǐng)求
-
通過(guò)Filter過(guò)濾
在 Filter 欄中輸入想要過(guò)濾出來(lái)的關(guān)鍵字,比如只想查看包含關(guān)鍵字:baidu 的請(qǐng)求,只需要在 Filter 欄中輸入關(guān)鍵字:baidu 即可;當(dāng)然也支持通配符,比如我們想要查看包含關(guān)鍵字:itunes,并且以 .com 結(jié)尾的請(qǐng)求,只需要在 Filter 欄中輸入 itunes..com* 即可,如下圖所示:
FB6F6B0C-A1A0-4CF1-B1A1-0FBD1461CFA4.png -
通過(guò)Include過(guò)濾
可以通過(guò) “Proxy”->“Recording Settings”,選中 Include 欄,添加一項(xiàng), 設(shè)置需要抓取的包,比如我只想抓取 www.baidu.com 域名下的請(qǐng)求,可以按照如下設(shè)置:
就能只去抓取符合規(guī)則的目標(biāo)請(qǐng)求,當(dāng)前也可以在 Exclude 中設(shè)置排除的請(qǐng)求。屏幕快照 2017-03-22 上午10.47.14.png -
總結(jié)
Filter 和 Include 的區(qū)別就是: Include 是只抓取符合要求的請(qǐng)求,不符合的請(qǐng)求就不再抓取,而 Filter 只是將先要抓取的請(qǐng)求篩選出來(lái),但是還是去抓取了所有的請(qǐng)求;綜合兩者我們可以按照自己的需求進(jìn)行設(shè)置如何篩選
模擬慢速網(wǎng)絡(luò)
有時(shí)候開(kāi)發(fā)中需要測(cè)試用戶在網(wǎng)絡(luò)情況比較的差的時(shí)候應(yīng)用的表現(xiàn)情況,可以使用Charles限流設(shè)置,"Proxy" -> "Thorttle Settings" 中設(shè)置如下:

或者只針對(duì)某些域名進(jìn)行設(shè)置,如下針對(duì)特定Hosts的設(shè)置:

重放和編輯
點(diǎn)擊一個(gè)請(qǐng)求,右擊彈出菜單欄,我們可以進(jìn)行各種操作,比如復(fù)制、保存、編輯、重復(fù)請(qǐng)求等等,我們可以編輯修改任意請(qǐng)求信息,比如URL地址、端口、參數(shù)等等,點(diǎn)擊“Execute”按鈕即可發(fā)送修改后的請(qǐng)求:


通過(guò) Repeat Advanced 高級(jí)重放功能可以作為簡(jiǎn)單的性能測(cè)試,可以設(shè)置重復(fù)次數(shù)、并發(fā)數(shù)以及延時(shí)等:

其他功能(待完善)
-
Breakpoints - 斷點(diǎn)功能
有時(shí)候?qū)τ谝恍┨厥庹?qǐng)求在發(fā)往服務(wù)器之前想要修改一些參數(shù),或者在服務(wù)器響應(yīng)完成之后修改響應(yīng)信息,此時(shí)可以使用Charles的斷點(diǎn)功能,類(lèi)似Xcode中的斷點(diǎn)調(diào)試,設(shè)置斷點(diǎn)之后,當(dāng)有網(wǎng)絡(luò)請(qǐng)求的時(shí)候Charles會(huì)自動(dòng)跳轉(zhuǎn)到斷點(diǎn)處,此時(shí)我們就能進(jìn)行相關(guān)的修改,斷點(diǎn)設(shè)置步驟:"Proxy" -> "Breakpoints Settings",彈出設(shè)置欄,選中 “Enable Breakpoints”,添加需要調(diào)試的請(qǐng)求即可調(diào)試:

-
Rewrite功能
Rewrite功能適合對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行一些正則替換。
通過(guò)“Tools”->"Rewrite ",進(jìn)入設(shè)置頁(yè)面,
比如有這樣一個(gè)需求,我們?cè)L問(wèn)接口:http://httpbin.org/get,將返回的數(shù)據(jù)參數(shù)名“X-Request-Id”,修改成“X_id”,具體操作如下:
原始的數(shù)據(jù)結(jié)構(gòu)如圖:
8CFD2F63-F030-4309-9019-383B2A0C1334.png設(shè)置Rewrite:
039D6FDC-16D6-4E16-BCB0-C168416CC645.png63F2D39D-5C92-4EE4-875A-D976AE78075C.png設(shè)置之后重新請(qǐng)求接口,查看截取的請(qǐng)求結(jié)果,發(fā)現(xiàn)已經(jīng)修改成了“X_id”,效果如下:
18F07852-8B99-44B9-9EF8-4496942D13A9.png
-
DNS Spoofing Settings
DNS欺騙,就是把域名解析到一個(gè)假的IP上。一般的開(kāi)發(fā)流程中,在上線之前都需要在測(cè)試環(huán)境中先行進(jìn)行驗(yàn)證,而此時(shí)手機(jī)客戶端請(qǐng)求的域名是不太容易改變的,可以通過(guò)設(shè)置 DNS 方式把域名轉(zhuǎn)發(fā)到測(cè)試機(jī)上,通過(guò)“Tools”->"DNS Spoofing",進(jìn)入設(shè)置頁(yè)面
比如要把所有 www.baidu.com 的域名轉(zhuǎn)到 test.com 的服務(wù)器上,可以設(shè)置如下:
BA5435ED-5B57-4380-8B26-D9D436E99AE3.pngF023784A-15E4-4399-AAB6-9295E7F9DACF.png此時(shí)再訪問(wèn)百度,會(huì)發(fā)現(xiàn)訪問(wèn)不了了??!
-
Map功能
通過(guò)“Tools”-> “Map Remote” 或者 “Tools”-> “Map Local”,進(jìn)入相應(yīng)的頁(yè)面設(shè)置
-
Map Remote
作用:將指定的網(wǎng)絡(luò)請(qǐng)求重定向到另一個(gè)網(wǎng)址。
應(yīng)用:當(dāng)我們請(qǐng)求某個(gè)接口 A ,假設(shè) A 的地址為:http://abc.com/user?user_id=100, 但是由于后臺(tái)還沒(méi)有寫(xiě)好,這時(shí)候?yàn)榱苏{(diào)試,我們可以將請(qǐng)求臨時(shí)轉(zhuǎn)到地址 B 上面;假設(shè) B 的地址為 : http://10.1.1.111/user.json
具體設(shè)置如下圖:
BDFE0957-D197-45F8-B617-68EF6CF6353C.png
497B5FFA-8B14-4BCF-8759-B3D187A2E8B2.png-
Map Local
作用:將指定的網(wǎng)絡(luò)請(qǐng)求重定向到本地文件。
應(yīng)用:當(dāng)我們把一個(gè)請(qǐng)求返回的數(shù)據(jù)直接映射到本地,例如上面說(shuō)的把請(qǐng)求 A 地址返回的數(shù)據(jù)內(nèi)容映射到本地文件** user.json** 內(nèi),如下圖所示:
70C7371E-3F78-42FA-924B-B3DF3CA6B84C.png908EE54D-4A73-4D49-9F96-2D7E300EF4F5.pngMap功能適用于長(zhǎng)期的將某些請(qǐng)求重定向到另一個(gè)網(wǎng)絡(luò)地址或者本地文件。
-
Map Remote
參考鏈接:
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.itdecent.cn/p/4a6eb5aad398
總結(jié):
還有 緩存功能、設(shè)置黑名單 等等,在此就不再寫(xiě)了,都還是很簡(jiǎn)單的;還有待研究的就是 socket 請(qǐng)求的抓取?。?!
至此:結(jié)束2天的Charles學(xué)習(xí)





































