日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第31讲:抓包利器 Charles 的使用

發(fā)布時(shí)間:2024/4/11 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第31讲:抓包利器 Charles 的使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本課時(shí)我們主要學(xué)習(xí)如何使用 Charles。

Charles 是一個(gè)網(wǎng)絡(luò)抓包工具,我們可以用它來做 App 的抓包分析,得到 App 運(yùn)行過程中發(fā)生的所有網(wǎng)絡(luò)請(qǐng)求和響應(yīng)內(nèi)容,這就和 Web 端瀏覽器的開發(fā)者工具 Network 部分看到的結(jié)果一致。

Charles、Fiddler 等都是非常強(qiáng)大的 HTTP 抓包軟件,功能基本類似,不過 Charles 的跨平臺(tái)支持更好。所以我們選用 Charles 作為主要的移動(dòng)端抓包工具,用于分析移動(dòng) App 的數(shù)據(jù)包,輔助完成 App 數(shù)據(jù)抓取工作。

本節(jié)目標(biāo)

本節(jié)我們以電影示例 App 為例,通過 Charles 抓取 App 運(yùn)行過程中的網(wǎng)絡(luò)數(shù)據(jù)包,然后查看具體的 Request 和 Response 內(nèi)容,以此來了解 Charles 的用法。

同時(shí)抓取到數(shù)據(jù)包之后,我們采用 Python 將請(qǐng)求進(jìn)行改寫,從而實(shí)現(xiàn) App 數(shù)據(jù)的爬取。

準(zhǔn)備工作

請(qǐng)確保已經(jīng)正確安裝 Charles 并開啟了代理服務(wù),另外準(zhǔn)備一部 Android 手機(jī),系統(tǒng)版本最好是在 7.0 以下。

如果系統(tǒng)版本在 7.0 及以上,可能出現(xiàn) SSL Pining 的問題,可以參考第一課時(shí)的思路來解決。

然后手機(jī)連接 Wi-Fi,和 PC 處于同一個(gè)局域網(wǎng)下,另外將 Charles 代理和 Charles CA 證書設(shè)置好,同時(shí)需要開啟 SSL 監(jiān)聽。

此過程的配置流程可以參見:https://cuiqingcai.com/5255.html。

最后手機(jī)上安裝本節(jié)提供的 apk(apk 隨課件一同領(lǐng)取),進(jìn)行接下來的 Charles 抓包操作。

原理

首先將 Charles 運(yùn)行在自己的 PC 上,Charles 運(yùn)行的時(shí)候會(huì)在 PC 的 8888 端口開啟一個(gè)代理服務(wù),這個(gè)服務(wù)實(shí)際上是一個(gè) HTTP/HTTPS 的代理。

確保手機(jī)和 PC 在同一個(gè)局域網(wǎng)內(nèi),我們可以使用手機(jī)模擬器通過虛擬網(wǎng)絡(luò)連接,也可以使用手機(jī)真機(jī)和 PC 通過無線網(wǎng)絡(luò)連接。

設(shè)置手機(jī)代理為 Charles 的代理地址,這樣手機(jī)訪問互聯(lián)網(wǎng)的數(shù)據(jù)包就會(huì)流經(jīng) Charles,Charles 再轉(zhuǎn)發(fā)這些數(shù)據(jù)包到真實(shí)的服務(wù)器,服務(wù)器返回的數(shù)據(jù)包再由 Charles 轉(zhuǎn)發(fā)回手機(jī),Charles 就起到中間人的作用,所有流量包都可以捕捉到,因此所有 HTTP 請(qǐng)求和響應(yīng)都可以捕獲到。同時(shí) Charles 還有權(quán)力對(duì)請(qǐng)求和響應(yīng)進(jìn)行修改。

抓包

好,我們先打開 Charles,初始狀態(tài)下 Charles 的運(yùn)行界面如圖所示。

Charles 會(huì)一直監(jiān)聽 PC 和手機(jī)發(fā)生的網(wǎng)絡(luò)數(shù)據(jù)包,捕獲到的數(shù)據(jù)包就會(huì)顯示在左側(cè),隨著時(shí)間的推移,捕獲的數(shù)據(jù)包越來越多,左側(cè)列表的內(nèi)容也會(huì)越來越多。

可以看到,圖中左側(cè)顯示了 Charles 抓取到的請(qǐng)求站點(diǎn),我們點(diǎn)擊任意一個(gè)條目便可以查看對(duì)應(yīng)請(qǐng)求的詳細(xì)信息,其中包括 Request、Response 等內(nèi)容。

接下來清空 Charles 的抓取結(jié)果,點(diǎn)擊左側(cè)的掃帚按鈕即可清空當(dāng)前捕獲到的所有請(qǐng)求。然后點(diǎn)擊第二個(gè)監(jiān)聽按鈕,確保監(jiān)聽按鈕是打開的,這表示 Charles 正在監(jiān)聽 App 的網(wǎng)絡(luò)數(shù)據(jù)流,如圖所示。

這時(shí)打開 App,注意一定要提前設(shè)置好 Charles 的代理并配置好 CA 證書,否則沒有效果。

打開 App 之后我們就可以看到類似如下的頁面。

這時(shí)候我們就可以發(fā)現(xiàn) Charles 里面已經(jīng)抓取到了對(duì)應(yīng)的數(shù)據(jù)包,出現(xiàn)了類似如圖所示的結(jié)果。


我們?cè)?App 里不斷上拉,可以看到 Charles 捕獲到這個(gè)過程中 App 內(nèi)發(fā)生的所有網(wǎng)絡(luò)請(qǐng)求,如圖所示。

左側(cè)列表中會(huì)出現(xiàn)一個(gè) dynamic1.scrape.cuiqingcai.com 的鏈接,而且在 App 上拉過程它在不停閃動(dòng),這就是當(dāng)前 App 發(fā)出的獲取數(shù)據(jù)的請(qǐng)求被 Charles 捕獲到了。

為了驗(yàn)證其正確性,我們點(diǎn)擊查看其中一個(gè)條目的詳情信息。切換到 Contents 選項(xiàng)卡,這時(shí)我們發(fā)現(xiàn)一些 JSON 數(shù)據(jù),核對(duì)一下結(jié)果,結(jié)果有 results 字段,每一個(gè)條目的 name 字段就是電影的信息,這與 App 里面呈現(xiàn)的內(nèi)容是完全一致的,如圖所示。

這時(shí)可以確定,此請(qǐng)求對(duì)應(yīng)的接口就是獲取電影數(shù)據(jù)的接口。這樣我們就成功捕獲到了在上拉刷新的過程中發(fā)生的請(qǐng)求和響應(yīng)內(nèi)容。

分析

現(xiàn)在分析一下這個(gè)請(qǐng)求和響應(yīng)的詳細(xì)信息。首先可以回到 Overview 選項(xiàng)卡,上方顯示了請(qǐng)求的接口 URL,接著是響應(yīng)狀態(tài) Status Code、請(qǐng)求方式 Method 等,如圖所示。

這個(gè)結(jié)果和原本在 Web 端用瀏覽器開發(fā)者工具內(nèi)捕獲到的結(jié)果形式是類似的。

接下來點(diǎn)擊 Contents 選項(xiàng)卡,查看該請(qǐng)求和響應(yīng)的詳情信息。

上半部分顯示的是 Request 的信息,下半部分顯示的是 Response 的信息。比如針對(duì) Reqeust,我們切換到 Headers 選項(xiàng)卡即可看到該 Request 的 Headers 信息,針對(duì) Response,我們切換到 JSON Text 選項(xiàng)卡即可看到該 Response 的 Body 信息,并且該內(nèi)容已經(jīng)被格式化,如圖所示。

由于這個(gè)請(qǐng)求是 GET 請(qǐng)求,所以我們還需要關(guān)心的就是 GET 的參數(shù)信息,切換到 Query String 選項(xiàng)卡即可查看,如圖所示。

這樣我們就成功抓取到了 App 中的電影數(shù)據(jù)接口的請(qǐng)求和響應(yīng),并且可以查看 Response 返回的 JSON 數(shù)據(jù)。

至于其他 App,我們同樣可以使用這樣的方式來分析。如果我們可以直接分析得到請(qǐng)求的 URL 和參數(shù)的規(guī)律,直接用程序模擬即可批量抓取。

重發(fā)

Charles 還有一個(gè)強(qiáng)大功能,它可以將捕獲到的請(qǐng)求加以修改并發(fā)送修改后的請(qǐng)求。點(diǎn)擊上方的修改按鈕,左側(cè)列表就多了一個(gè)以編輯圖標(biāo)為開頭的鏈接,這就代表此鏈接對(duì)應(yīng)的請(qǐng)求正在被我們修改,如圖所示。

我們可以將參數(shù)中的某個(gè)字段修改下,比如這里將 offset 字段由 0 修改為 10。這時(shí)我們已經(jīng)對(duì)原來請(qǐng)求攜帶的 Query 參數(shù)做了修改,然后點(diǎn)擊下方的 Execute 按鈕即可執(zhí)行修改后的請(qǐng)求,如圖所示。

可以發(fā)現(xiàn)左側(cè)列表再次出現(xiàn)了接口的請(qǐng)求結(jié)果,內(nèi)容變成了第 11~20 條內(nèi)容,如圖所示。

有了這個(gè)功能,我們就可以方便地使用 Charles 來做調(diào)試,可以通過修改參數(shù)、接口等來測(cè)試不同請(qǐng)求的響應(yīng)狀態(tài),就可以知道哪些參數(shù)是必要的哪些是不必要的,以及參數(shù)分別有什么規(guī)律,最后得到一個(gè)最簡(jiǎn)單的接口和參數(shù)形式以供程序模擬調(diào)用使用。

模擬

現(xiàn)在我們已經(jīng)成功完成了抓包操作了,所有的請(qǐng)求一目了然,請(qǐng)求的 URL 就是 https://dynamic1.scrape.cuiqingcai.com/api/movie/,后面跟了兩個(gè) GET 請(qǐng)求參數(shù)。經(jīng)過觀察,可以很輕松地發(fā)現(xiàn) offset 就是偏移量,limit 就是一次請(qǐng)求要返回的結(jié)果數(shù)量。比如 offset 為 20,limit 為 10,就代表獲取第 21~30 條數(shù)據(jù)。另外我們通過觀察發(fā)現(xiàn)一共就是 100 條數(shù)據(jù),offset 從 0 到 90 遍歷即可。

接下來我們用 Python 簡(jiǎn)單實(shí)現(xiàn)一下模擬請(qǐng)求即可,這里寫法一些從簡(jiǎn)了,代碼如下:

import requestsBASE_URL = 'https://dynamic1.scrape.cuiqingcai.com/api/movie?offset={offset}&limit=10' for i in range(0, 10):offset = i * 10url = BASE_URL.format(offset=offset)data = requests.get(url).json()print('data', data)

運(yùn)行結(jié)果如下:

data {'count': 100, 'results': [{'id': 1, 'name': '霸王別姬', 'alias': 'Farewell My Concubine', 'cover': 'https://p0.meituan.net/movie/ce4da3e03e655b5b88ed31b5cd7896cf62472.jpg@464w_644h_1e_1c', 'categories': ['劇情', '愛情'], 'published_at': '1993-07-26', 'minute': 171, 'score': 9.5, 'regions': ['中國(guó)大陸', '中國(guó)香港']}, {'id': 2, 'name': '這個(gè)殺手不太冷', 'alias': 'Léon', 'cover': ... 'published_at': '1995-07-15', 'minute': 89, 'score': 9.0, 'regions': ['美國(guó)']}]}data {'count': 100, 'results': [{'id': 11, 'name': 'V字仇殺隊(duì)', 'alias': 'V for Vendetta', 'cover': 'https://p1.meituan.net/movie/06ec3c1c647942b1e40bca84036014e9490863.jpg@464w_644h_1e_1c', 'categories': ['劇情', '動(dòng)作', '科幻', '驚悚'], 'published_at': '2005-12-11', 'minute': 132, 'score': 8.9, 'regions': ['美國(guó)', '英國(guó)', '德國(guó)']}, ... 'categories': ['紀(jì)錄片'], 'published_at': '2001-12-12', 'minute': 98, 'score': 9.1, 'regions': ['法國(guó)', '德國(guó)', '意大利', '西班牙', '瑞士']}]}data {'count': 100, 'results': [{'id': 21, 'name': '黃金三鏢客', 'alias': 'Il buono, il brutto, il cattivo.', 'cover': ...

可以看到每個(gè)請(qǐng)求都被我們輕松模擬實(shí)現(xiàn)了,數(shù)據(jù)也被爬取下來了。

由于這個(gè) App 的接口沒有任何加密,所以僅僅靠抓包完之后觀察規(guī)律我們就能輕松完成 App 接口的模擬爬取。

結(jié)語

以上內(nèi)容便是通過 Charles 抓包分析 App 請(qǐng)求的過程。通過 Charles,我們成功抓取 App 中流經(jīng)的網(wǎng)絡(luò)數(shù)據(jù)包,捕獲原始的數(shù)據(jù),還可以修改原始請(qǐng)求和重新發(fā)起修改后的請(qǐng)求進(jìn)行接口測(cè)試。

知道了請(qǐng)求和響應(yīng)的具體信息,如果我們可以分析得到請(qǐng)求的 URL 和參數(shù)的規(guī)律,直接用程序模擬即可批量抓取,這當(dāng)然最好不過了。

但是隨著技術(shù)的發(fā)展,App 接

總結(jié)

以上是生活随笔為你收集整理的第31讲:抓包利器 Charles 的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。