今天再為大家介紹下使用這個工具如何監(jiān)控手機上網(wǎng),并且通過抓包,把我們想要的數(shù)據(jù)下載下來。
啟動 mitmproxy
首先我們通過執(zhí)行命令 mitmweb 啟動 mitmproxy,讓它處理監(jiān)聽狀態(tài),服務(wù)會監(jiān)聽本機 8080 端口,啟動后如下:
$ mitmweb
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:8080
手機網(wǎng)絡(luò)配置
- 保證手機和電腦在同一局域網(wǎng)內(nèi),并查看電腦的局域網(wǎng) IP 地址是多少以備用,查看方式可以用命令查看,如 windows 系統(tǒng)用 ipconfig 命令,mac 或 linux 則用命令 ifconfig,看到如下圖所示,找到本機在局域網(wǎng)的 IP 地址。
不同操作系統(tǒng),可能展示結(jié)果不同,在這里我們可以看到紅框里我本機的 IP 地址為 192.168.0.108。
- 配置手機代理地址,比如以下用 iphone 手機進行配置,打開設(shè)置 -> 無線局域網(wǎng) -> 點現(xiàn)在連接的網(wǎng)絡(luò) -> 點最下面點 HTTP 代理配置,選擇手動后,配置代理地址為我們電腦的 IP地址和 mitmproxy 的監(jiān)聽端口,配置如下圖所示:
- 現(xiàn)在我們就可以讓手機通過電腦上網(wǎng)了,不過目前手機 App 都是通過 HTTPS 加密請求,所以我們需要在手機上安裝個 mitmproxy 的 HTTPS 證書。接下來我們打開手機瀏覽器,輸入網(wǎng)址:mitm.it,打開如下圖所示頁面,選擇對應(yīng)手機的操作系統(tǒng),下載證書并安裝。
在這里我點 Apple 的圖標下載證書,下載后等待安裝:
單擊上面的安裝,可能會出現(xiàn)信任的提示,只要選擇信任證書就可以了,下面是安裝好的界面如下圖:
好了,配置完成下面我們點開個手機 APP 看到電腦 mitmweb 的頁面上,已經(jīng)出現(xiàn)請求內(nèi)容了。
編寫下載腳本
好了,現(xiàn)在經(jīng)過分析攔截的請求,我們開始用 Python/ target=_blank class=infotextkey>Python 編寫代碼,通過解析視頻的 url 將視頻下載到本地。在這里我們先來打印下數(shù)據(jù),新建文件 xiaoshipin.py,然后編寫如下代碼,實現(xiàn)將已編碼的 json 字符串解碼為 python 對象:
# xiaoshipin.py
import json
def response(flow):
url='https://api.amemv.com/aweme/v1/aweme/post/'
#篩選出以上面url為開頭的url
if flow.request.url.startswith(url):
text=flow.response.text
#將已編碼的json字符串解碼為python對象
data=json.loads(text)
print(data)
編輯完后保存,然后執(zhí)行命令:mitmweb -s xiaoshipin.py,帶上這段腳本來運行我們的代理服務(wù),刷新幾個視頻,會看到如下圖所示內(nèi)容:
其中就包含了我們需要的下載地址信息,接下來我們只需提取視頻的 url ,并且緩存視頻到本地就 OK 了。
下面我們就來修改上面的 xiaoshipin.py 的代碼,完善下視頻下載的功能。
#xiaoshipin.py
#引入包
import json,os
import requests
# 只攔截并處理返回請求
def response(flow):
# 請求的 url
url='https://api.amemv.com/aweme/v1/aweme/post/'
#篩選出以上面url為開頭的url
if flow.request.url.startswith(url):
text=flow.response.text
#將已編碼的json字符串解碼為python對象
data=json.loads(text)
# 剛分析看到每一個視頻的所有信息
# 都在aweme_list中
video_url=data['aweme_list']
# 設(shè)置下載路徑
path='/Users/xx/shipin'
# 如果文件夾不存在,則新建
if not os.path.exists(path):
os.mkdir(path)
# 循環(huán)所有視頻 url
for each in video_url:
#視頻描述
desc=each['desc']
url=each['video']['play_addr']['url_list'][0]
# 設(shè)置視頻名稱
filename=path+'/'+desc+'.mp4'
# 用 request 請求視頻流
req=requests.get(url=url,verify=False)
# 保存視頻文件
with open(filename,'ab') as f:
f.write(req.content)
f.flush()
print(filename,'下載完畢')
上面我已經(jīng)把相關(guān)代碼注釋好了,現(xiàn)在我們保存編輯好的代碼,然后再次執(zhí)行命令:mitmweb -s xiaoshipin.py,啟動監(jiān)聽服務(wù)。然后打開手機再次下視頻,就會看到視頻是不是已經(jīng)都存到本地了。
總結(jié)
本文為大家介紹了如何通過 mitmproxy 工具下載手機上瀏覽的小視頻,當然除了視頻他還可以下載音樂啊圖片啊什么的,只要你能通過攔截工具分析你想要的內(nèi)容在哪個請求中,然后對這個請求返回內(nèi)容進行搜索分析,然后再用今天這個工具,再通過簡單的 Python 編碼實現(xiàn)自動處理完成就可以了。