今天為大家介紹使用 mitmproxy 這個抓包工具如何監控手機上網,並且通過抓包,把我們想要的數據下載下來。 啟動 mitmproxy 首先我們通過執行命令 mitmweb 啟動mitmproxy,讓它處理監聽狀態,服務會監聽本機 8080 埠,啟動後如下: Python學習交流Q群:90671 ...
今天為大家介紹使用 mitmproxy 這個抓包工具如何監控手機上網,並且通過抓包,把我們想要的數據下載下來。
啟動 mitmproxy
首先我們通過執行命令 mitmweb 啟動mitmproxy,讓它處理監聽狀態,服務會監聽本機 8080 埠,啟動後如下:
Python學習交流Q群:906715085### $ mitmweb Web server listening at http://127.0.0.1:8081/ Proxy server listening at http://*:8080
手機網路配置
1.保證手機和電腦在同一區域網內,並查看電腦的區域網 IP 地址是多少以備用,查看方式可以用命令查看,如 Windows 系統用
ipconfig 命令,Mac 或 Linux 則用命令 ifconfig,看到如下圖所示,找到本機在區域網的 IP 地址。
不同操作系統,可能展示結果不同,在這裡我們可以看到紅框里我本機的 IP 地址為 192.168.0.108。
2.配置手機代理地址,比如以下用 iphone 手機進行配置,打開設置 -> 無線區域網 -> 點現在連接的網路 -> 點最下麵點 HTTP 代
理配置,選擇手動後,配置代理地址為我們電腦的 IP地址和 mitmproxy 的監聽埠,配置如下圖所示:
3.現在我們就可以讓手機通過電腦上網了,不過目前手機 App 都是通過 HTTPS 加密請求,所以我們需要在手機上安裝個
mitmproxy 的 HTTPS 證書。接下來我們打開手機瀏覽器,輸入網址:mitm.it,打開如下圖所示頁面,選擇對應手機的操作系統,
下載證書並安裝。
下載頁
在這裡我點 Apple 的圖標下載證書,下載後等待安裝:
單擊上面的安裝,可能會出現信任的提示,只要選擇信任證書就可以了,下麵是安裝好的界面如下圖:
好了,配置完成下麵我們點開個手機 APP 看到電腦 mitmweb 的頁面上,已經出現請求內容了。
編寫下載腳本
好了,現在經過分析攔截的請求,我們開始用 Python 編寫代碼,通過解析視頻的 url 將視頻下載到本地。在這裡我們先來列印下
數據,新建文件 xiaoshipin.py,然後編寫如下代碼,實現將已編碼的 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)
編輯完後保存,然後執行命令:mitmweb -s xiaoshipin.py,帶上這段腳本來運行我們的代理服務,刷新幾個視頻,會看到如下圖所示內容:
其中就包含了我們需要的下載地址信息,接下來我們只需提取視頻的 url ,並且緩存視頻到本地就 OK 了。
下麵我們就來修改上面的 xiaoshipin.py 的代碼,完善下視頻下載的功能。
Python學習交流Q群:906715085### #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'] #設置下載路徑 path='/Users/xx/shipin' #如果文件夾不存在,則新建 if not os.path.exists(path): os.mkdir(path) # 迴圈所有視頻 url for each in video_url: #視頻描述 desc=each['desc'] url=each['video']['play_addr']['url_list'][0] # 設置視頻名稱 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,'下載完畢')
上面我已經把相關代碼註釋好了,現在我們保存編輯好的代碼,然後再次執行命令:mitmweb -s xiaoshipin.py,啟動監聽服務。
然後打開手機再次下視頻,就會看到視頻是不是已經都存到本地了。