Mitmproxy 的安裝與使用案例
前言:
上篇文章簡(jiǎn)單介紹了手機(jī)端的抓包工具fiddler的使用,實(shí)現(xiàn)了抓取抖音某用戶“喜歡”的視頻列表的操作。
為了在代碼層面實(shí)現(xiàn)手機(jī)端的抓包,介紹另一款非常便捷的代理工具M(jìn)itmproxy的安裝與使用。本文記于20年10月。
基礎(chǔ)知識(shí):
1) 什么是網(wǎng)絡(luò)代理
通過(guò) 代理服務(wù) 訪問(wèn)目標(biāo)網(wǎng)頁(yè)。類似與淘寶快遞的場(chǎng)景,買家和賣家不會(huì)有直接的接觸,在一場(chǎng)購(gòu)物過(guò)程中,賣家不需要關(guān)心你是誰(shuí)、你住在哪,只需要貼條發(fā)快遞即可。實(shí)際購(gòu)買的五品是通過(guò)快遞小哥觸達(dá)買家的。在這個(gè)過(guò)程中,快遞小哥充當(dāng)?shù)木褪谴矸?wù) 的角色。

代理服務(wù)器(Proxy Server)作為網(wǎng)絡(luò)信息的中轉(zhuǎn)站,其功能是代理網(wǎng)絡(luò)用戶去取得網(wǎng)絡(luò)信息。
2)什么是Mitmproxy
Mitmproxy就是一個(gè)常見的網(wǎng)絡(luò)代理服務(wù),與fiddler、charles類似。
“顧名思義,mitmproxy 就是用于 MITM 的 proxy,MITM(Man-in-the-MiddleAttack) 即”中間人攻擊”,用于中間人攻擊的代理首先會(huì)向正常的代理一樣轉(zhuǎn)發(fā)請(qǐng)求,保障服務(wù)端與客戶端的通信,其次,會(huì)適時(shí)的查、記錄其截獲的數(shù)據(jù),或篡改數(shù)據(jù),引發(fā)服務(wù)端或客戶端特定的行為。
不同于 fiddler 或 wireshark 等抓包工具,mitmproxy 不僅可以截獲請(qǐng)求幫助開發(fā)者查看、分析,更可以通過(guò)自定義腳本進(jìn)行二次開發(fā)?!边@也是Mitmproxy的突出應(yīng)用場(chǎng)景,除了可以實(shí)現(xiàn)類似fiddler的過(guò)濾瀏覽器對(duì)某個(gè)特定 url 的請(qǐng)求、查看 分析數(shù)據(jù),還可以實(shí)現(xiàn)高度的定制化需求,這樣的需求可以通過(guò)載入自定義代碼腳本輕松實(shí)現(xiàn),支持python/java等語(yǔ)言,簡(jiǎn)單易用。
3)Mitmproxy的基本功能有哪些
Mitmproxy是一個(gè)開源項(xiàng)目,github托管地址為https://github.com/mitmproxy/mitmproxy。
其項(xiàng)目中包含4個(gè)最重要的組件,分別為:
a. mitmproxy 是具有SSL / TLS功能的交互式攔截偵聽代理,具有用于HTTP / 1,HTTP / 2和WebSockets的控制臺(tái)界面。
b. mitmdump是mitmproxy的命令行版本。將tcpdump用于HTTP。
c. mitmweb 是用于mitmproxy的基于Web的界面。
d. pathoc并且pathod是錯(cuò)誤的HTTP客戶端和服務(wù)器應(yīng)用程序,旨在讓您制作幾乎所有可能的HTTP請(qǐng)求,包括創(chuàng)造性地違反標(biāo)準(zhǔn)的請(qǐng)求。
簡(jiǎn)單的介紹就到這里,下面分4個(gè)步驟,以windows端為例,講解下Mitmproxy的安裝和使用。
STEP1:下載和安裝Mitmproxy
Windows端Mitmproxy下載地址:https://github.com/mitmproxy/mitmproxy/releases

安裝過(guò)程很簡(jiǎn)單,不贅述,一直下一步即可。

安裝完成后,會(huì)自動(dòng)彈出一個(gè)命令行窗口和一個(gè)web網(wǎng)頁(yè)。
命令行窗口中,標(biāo)明proxy server默認(rèn)運(yùn)行在8080端口上,web界面默認(rèn)運(yùn)行在8081端口上;
Web界面默認(rèn)地址是127.0.0.1:8081,界面用于展示抓包詳情。

成功出現(xiàn)如上界面,說(shuō)明PC端的配置正常。
STEP2:手機(jī)端的配置
與fiddler等其他工具使用過(guò)程中的手機(jī)端配置類似,需要:
1)手機(jī)和PC接入同一WIFI
2)查看PC端的ip地址,如本機(jī)為192.168.0.121

3)在手機(jī)端wifi的高級(jí)設(shè)置中,配置手動(dòng)代理,添加主機(jī)名為PC端ip,端口為Mitmproxy設(shè)置的端口號(hào)(默認(rèn)為8080)

之后手機(jī)瀏覽器訪問(wèn) mitm.it,下載對(duì)應(yīng)終端的證書并安裝即可。
以上便完成了 Mitmproxy 在 手機(jī)端的配置。
STEP3:Mitmproxy界面初識(shí)
Flows界面:

1/2. 每條flow請(qǐng)求的內(nèi)容,GET請(qǐng)求, URL, 狀態(tài)碼, 響應(yīng)類型, 大??;
3. 刷新圖標(biāo)代表重新request;
4. 橙色代表request正在被攔截, enter進(jìn)入,按e可進(jìn)行編輯;
5. 向左的箭頭代表返回的response被攔截,可被編輯;
6. 請(qǐng)求log, EventLog模式下,按e進(jìn)行日志欄打開/關(guān)閉;
7. flow請(qǐng)求的綜述;
8. 當(dāng)前的狀態(tài),包括正在攔截什么樣的請(qǐng)求,是否在運(yùn)行特定腳本;
9. 顯示當(dāng)前綁定的地址、端口號(hào)等;
Web界面:

以安卓手機(jī)模擬器為例展示,web界面中是抓到的請(qǐng)求,點(diǎn)擊可如下圖展開查看詳情?;竟δ芘c其他工具如fiddler類似。

STEP4:如何結(jié)合python代碼實(shí)現(xiàn)簡(jiǎn)單的抓包
上文有提到,“這也是Mitmproxy的突出應(yīng)用場(chǎng)景,除了可以實(shí)現(xiàn)類似fiddler的過(guò)濾瀏覽器對(duì)某個(gè)特定 url 的請(qǐng)求、查看 分析數(shù)據(jù),還可以實(shí)現(xiàn)高度的定制化需求”,能夠輕松結(jié)合代碼實(shí)現(xiàn)定制化需求是Mitmproxy的突出特點(diǎn),下面就放一個(gè)“python打印某用戶抖音“喜歡”列表中視頻元素”的實(shí)現(xiàn)邏輯和簡(jiǎn)單代碼片段:
1)首先要抓到刷某用戶“喜歡”列表的請(qǐng)求:
分析請(qǐng)求過(guò)程,發(fā)現(xiàn)在某條favorite的請(qǐng)求中,有aweme_list值,是我們想要獲取的請(qǐng)求,分析下來(lái),請(qǐng)求返回的json串中包含了相關(guān)視頻的豐富信息,其中'desc'為視頻的描述信息,'aweme_id'為視頻的id信息,'share_url'為視頻的分享連接。

2)根據(jù)抓取到的目標(biāo)請(qǐng)求和響應(yīng),編寫代碼。下面是一個(gè)簡(jiǎn)單的代碼塊,抓取請(qǐng)求并解析打印響應(yīng)字段:
import json
def response(flow):
???print(">>>>>>>>>>>>>>Start<<<<<<<<<<<<<<<<")
???if "aweme/v1/aweme/favorite" in flow.request.url:
???????for video in json.loads(flow.response.text)['aweme_list']:
???????????video_info = {}
???????????video_info['describtion'] = video['desc']
???????????video_info['aweme_id info'] = video['aweme_id']
???????????video_info['share_url info'] = video['share_url']
???????????print(video_info)
在cmd命令行模式下,使用命令mitmdump -s Praser.py -p 8080跑起來(lái),就會(huì)在命令行中持續(xù)打印信息。如下圖,可以看到已經(jīng)成功抓取到了想要的信息。

總結(jié):
什么是Mitmproxy:
Mitmproxy是開源的網(wǎng)絡(luò)代理服務(wù),可以結(jié)合代碼輕松實(shí)現(xiàn)手機(jī)端的抓包需求。
安裝和簡(jiǎn)單的使用步驟:
STEP1:下載和安裝Mitmproxy
STEP2:手機(jī)端的配置
STEP3:Mitmproxy界面初識(shí)
STEP4:結(jié)合python代碼實(shí)現(xiàn)簡(jiǎn)單的抓包