前言
? ? ? ? 一個mitmproxy代理服務應用,作用是監聽系統流量,并自動下載可能的video媒體文件到本地。
? ? ? ? 如果你沒有安裝mitmproxy或沒有做完準備工作,請參考我的這篇文章:
????????python:mitmproxy代理服務搭建-CSDN博客?
文件架構目錄
源碼
import os
import time
import threading
import requests
from mitmproxy import httpSAME_DOWNLOADS = []# 設置代理
proxies = {'http': 'http://127.0.0.1:9099','https': 'http://127.0.0.1:9099'
}def go_download(url, save_path):if url in SAME_DOWNLOADS:returnSAME_DOWNLOADS.append(url)r = requests.get(url, proxies=proxies, verify=False)with open(save_path, 'wb') as f:f.write(r.content)print(save_path, 'saved')# 定義資源類型分類函數
def classify_resource(flow: http.HTTPFlow):url = flow.request.urlcontent_type = flow.response.headers.get('Content-Type', '')# 媒體資源if any(ext in url for ext in ['.mp4', '.avi', '.mov', '.mkv', '.mp3', '.wav']):extensions = ['.mp4', '.avi', '.mov', '.mkv', '.mp3', '.wav']for ext in extensions:if ext in url:filename = str(int(time.time()) * 1000) + extprint(filename, 'downloading')a = threading.Thread(target=go_download, args=(url, os.path.join('save/video', filename)))a.start()breakreturn '媒體資源'elif 'video/' in content_type or 'audio/' in content_type:filename = str(int(time.time()) * 1000) + '.' + content_type.split('/')[-1]print(filename, 'downloading')a = threading.Thread(target=go_download, args=(url, os.path.join('save/video', filename)))a.start()return '媒體資源'# 圖片資源if any(ext in url for ext in ['.jpg', '.jpeg', '.png', '.gif', '.bmp']):return '圖片資源'elif 'image/' in content_type:return '圖片資源'# 頁面資源if 'text/html' in content_type:return '頁面資源'# CSS 資源if any(ext in url for ext in ['.css']):return 'CSS 資源'elif 'text/css' in content_type:return 'CSS 資源'# JS 資源if any(ext in url for ext in ['.js']):return 'JS 資源'elif 'application/javascript' in content_type:return 'JS 資源'# API 接口資源if '/api/' in url.lower() or 'application/json' in content_type:return 'API 接口資源'return '其他資源'# 請求處理函數
def response(flow: http.HTTPFlow) -> None:if flow.response:resource_type = classify_resource(flow)print(f"URL: {flow.request.url}")print(f"Resource Type: {resource_type}")print("-" * 50)# 將資源類型添加到請求的注釋中flow.request.comment = resource_type
? ? ? ? 運行指令:
mitmdump -s simply_run.py -p 9099
? ? ? ? 結果展示:?
?