欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

移動(dòng)測(cè)試開(kāi)發(fā)Mitmproxy用于測(cè)試抓包神器詳解

 更新時(shí)間:2022年06月21日 11:33:28   作者:opentest-oper@#  
這篇文章主要為大家介紹了python移動(dòng)測(cè)試開(kāi)發(fā)Mitmproxy抓包神器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1.前言

在移動(dòng)商業(yè)廣告的測(cè)試的工作中,經(jīng)常會(huì)需要對(duì)廣告請(qǐng)求進(jìn)行捕獲和分析,常使用的有兩個(gè)測(cè)試工具:fiddler,Charles,這兩個(gè)工具都可以對(duì)廣告請(qǐng)求進(jìn)行抓包,斷點(diǎn)調(diào)試,請(qǐng)求替換,構(gòu)造請(qǐng)求等,但是這兩個(gè)工具都有一定的局限性。首先,fiddler 只能在 windows 上運(yùn)行,charles 雖然可以在 mac,windows 上運(yùn)行,但是收費(fèi)。其次,在商業(yè)廣告請(qǐng)求中經(jīng)常會(huì)對(duì)接口協(xié)議進(jìn)行加密處理,使用 fiddler 和 charles 就不容易解決了。最后,商業(yè)廣告測(cè)試中需要對(duì)廣告請(qǐng)求協(xié)議的各種字段進(jìn)行校驗(yàn),但業(yè)務(wù)涉及到多字段修改的情況下,再利用 fiddler 和 charles 逐一校驗(yàn)判斷顯然很浪費(fèi)時(shí)間。經(jīng)過(guò)調(diào)研和實(shí)際應(yīng)用,我們發(fā)現(xiàn) mitmproxy 這個(gè)工具非常靈活,它是基于 Python 開(kāi)發(fā)的開(kāi)源工具,提供了 Python API,可以通過(guò)載入自定義 python 腳本輕松控制請(qǐng)求和響應(yīng)。這是其它工具所不能做到的,通過(guò)自定義腳本進(jìn)行二次開(kāi)發(fā),能夠解決商業(yè)廣告測(cè)試過(guò)程中所遇到的問(wèn)題。

2.Mitmproxy 簡(jiǎn)介

MITM(Man In The Middle Attack)中間人攻擊,這種攻擊模式是通過(guò)各種技術(shù)手段將受入侵者控制的一臺(tái)計(jì)算機(jī)虛擬放置在網(wǎng)絡(luò)連接中的兩臺(tái)通信計(jì)算機(jī)之間,這臺(tái)計(jì)算機(jī)就稱(chēng)為 “中間人”。mitmproxy 就是用于 MITM 的 proxy,用于中間人攻擊的代理。首先會(huì)向正常的代理一樣轉(zhuǎn)發(fā)請(qǐng)求,保障服務(wù)端與客戶(hù)端的通信,其次,會(huì)適時(shí)的查、記錄其截獲的數(shù)據(jù),或篡改數(shù)據(jù),引發(fā)服務(wù)端或客戶(hù)端特定的行為。

mitmproxy 有兩個(gè)關(guān)聯(lián)組件。一個(gè)是 mitmdump,它是 mitmproxy 的命令行接口,利用它我們可以對(duì)接 Python 腳本,用 Python 實(shí)現(xiàn)監(jiān)聽(tīng)后的處理邏輯。另一個(gè)是 mitmweb,它是一個(gè) Web 程序,通過(guò)它我們可以清楚觀察 mitmproxy 捕獲的請(qǐng)求。

3.Mitmproxy 工作原理

mitmproxy 有 5 種代理模式,主要包含:正向代理,透明代理,反向代理,上游代理,socks 代理,在實(shí)際使用中經(jīng)常用到正向代理,mitmproxy 作為正向代理是一個(gè)位于客戶(hù)端和原始服務(wù)器 (origin server) 之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶(hù)端向 mitmproxy 代理發(fā)送一個(gè)請(qǐng)求并指定目標(biāo) (原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶(hù)端??蛻?hù)端必須要進(jìn)行一些特別的設(shè)置才能使用正向代理。

我們以 HTTPS 請(qǐng)求為例介紹一下 mitmproxy 作為正向代理抓包的過(guò)程:

①. 客戶(hù)端連接到 mitmproxy,并發(fā)出 HTTP 連接請(qǐng)求。

②. mitmproxy 響應(yīng)建立了一個(gè) 200 的連接

③. 客戶(hù)端認(rèn)為它正在與遠(yuǎn)程服務(wù)器通信,并啟動(dòng) SSL 連接。使用 SNI 來(lái)指定它連接到的主機(jī)名。

④. mitmproxy 使用客戶(hù)端指定的 SNI 主機(jī)名與服務(wù)端建立一個(gè) SSL/TLS 連接。

⑤. 服務(wù)器使用匹配的證書(shū)進(jìn)行響應(yīng),該證書(shū)包含生成攔截證書(shū)所需的 CN 和 SAN 值。

⑥. mitmproxy 生成攔截證書(shū),并繼續(xù)跟客戶(hù)端 SSL/TLS 握手。

⑦. 客戶(hù)端通過(guò)已建立的 SSL/TLS 連接發(fā)送請(qǐng)求。

⑧. mitmproxy 通過(guò)步驟 ④ 中啟動(dòng)的 SSL/TLS 連接將請(qǐng)求傳遞到服務(wù)器。

4.實(shí)踐應(yīng)用

解決多字段校驗(yàn)效率問(wèn)題:

商業(yè)廣告測(cè)試中有大量的重復(fù)性工作在打點(diǎn)校驗(yàn)上,為了節(jié)省測(cè)試時(shí)間和解決易漏測(cè)的問(wèn)題,我們可以利用 mitmproxy 二次開(kāi)發(fā),自定義業(yè)務(wù)相關(guān)的校驗(yàn)規(guī)則,然后通過(guò)捕獲請(qǐng)求對(duì)協(xié)議中的各個(gè)字段進(jìn)行自動(dòng)化校驗(yàn),這樣既可以提高測(cè)試效率,又避免了漏測(cè)問(wèn)題。

以所測(cè)廣告業(yè)務(wù)為例,首先建立 addons.py 文件,addons 是個(gè)列表,每個(gè)元素是一個(gè)類(lèi)實(shí)例,這些類(lèi),稱(chēng)為一個(gè)個(gè) addon,這些類(lèi)有若干方法,這些方法實(shí)現(xiàn)了某些 mitmproxy 提供的事件,mitmproxy 會(huì)在某個(gè)事件發(fā)生時(shí)調(diào)用對(duì)應(yīng)的方法。如下圖所示為 addons 文件內(nèi)容,其中 SemiNativeCSJAd 則為 addon。

SemiNativeCSJAd 類(lèi)中實(shí)現(xiàn)了 mitmproxy 提供的 request 和 response 事件,當(dāng)觸發(fā)該事件的時(shí)候,就會(huì)調(diào)用對(duì)應(yīng)的方法。

其中將所有類(lèi)型的廣告打點(diǎn)中的公共字段校驗(yàn)抽取成公共方法 semiNativeCSJfieldCheck 調(diào)用。如下圖所示:

通過(guò)以上方式,簡(jiǎn)單且有效的解決了多個(gè)字段校驗(yàn)問(wèn)題。

解決商業(yè)廣告中加解密問(wèn)題:

商業(yè)廣告有不同的渲染形態(tài),例如:激勵(lì)視頻類(lèi),模板類(lèi),在實(shí)際測(cè)試過(guò)程中,需要測(cè)試人員 mock 不同的廣告進(jìn)行測(cè)試,不僅如此,還會(huì)遇到需要對(duì)廣告進(jìn)行加解密的情況,那么具體應(yīng)該怎么解決呢?以所測(cè)的廣告業(yè)務(wù)為例需要做以下幾個(gè)步驟:

①. mitmproxy 攔截客戶(hù)端發(fā)起的請(qǐng)求并獲取某字段

②. 利用 RSA 算法根據(jù)請(qǐng)求的某字段解密獲取到秘鑰

③. 利用 AES 算法和 ② 步驟的秘鑰,對(duì)本地廣告內(nèi)容進(jìn)行加密

④. mitmproxy 將加密的廣告返回給客戶(hù)端

如下圖是實(shí)現(xiàn)的代碼,此 mockMaxFile 函數(shù)還可以根據(jù)入?yún)魅氩煌瑥V告文件即可實(shí)現(xiàn)不同廣告的 mock。

5.總結(jié)

以上就是 mitmproxy 的簡(jiǎn)單介紹和在商業(yè)廣告測(cè)試中的應(yīng)用,相比傳統(tǒng)的抓包工具,mitmproxy 可以通過(guò)載入自定義 python 腳本輕松實(shí)現(xiàn)各種定制化需求,提升測(cè)試效率和質(zhì)量,不愧為 “抓包神器”。

更多關(guān)于移動(dòng)測(cè)試Mitmproxy抓包的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論