python:一个代理流量监控的媒体文件下载脚本

前言

一个mitmproxy代理服务应用,作用是监听系统流量,并自动下载可能的video媒体文件到本地。

如果你没有安装mitmproxy或没有做完准备工作,请参考我的这篇文章:

python:mitmproxy代理服务搭建-CSDN博客

文件架构目录

源码

python 复制代码
import os
import time
import threading
import requests
from mitmproxy import http

SAME_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:
        return
    SAME_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.url
    content_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) + ext
                print(filename, 'downloading')
                a = threading.Thread(target=go_download, args=(url, os.path.join('save/video', filename)))
                a.start()
                break

        return '媒体资源'
    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

运行指令:

python 复制代码
mitmdump -s simply_run.py -p 9099

结果展示:

相关推荐
CodeBlog-star22 分钟前
LLM能力与边界:多模态、幻觉、上下文窗口及开源模型对比
人工智能·python·开源·llm
COOLMO研究AI24 分钟前
Python 如何实现 AI API 的动态路由与多通道负载均衡:多账号与多供应商的高可用调度
人工智能·python·负载均衡
LONGZETECH29 分钟前
无人机组装调试实训高损耗痛点分析与虚拟仿真教学落地方案
c语言·开发语言·架构·无人机
菜冻鱼41 分钟前
Python-sklearn-降维
开发语言·人工智能·python·机器学习·支持向量机·sklearn
OptimizationMaster1 小时前
Python自动重启中国移动光猫(ZXHN G7611V2)
python·自动化工具·重启中国移动光猫
luj_17681 小时前
大航海时代:沉浸式财商实战沙盒
c语言·开发语言·网络·经验分享·算法
赵广陆1 小时前
企业实战:Markdown图片检索
android·java·开发语言
C++、Java和Python的菜鸟1 小时前
第3章 从0开始用若依
java·开发语言
刀锋00012 小时前
从0到1手搓生产级 AI Agent:LangGraph 1.2 + LangChain 1.3 保姆级实战(全部代码已跑通)
人工智能·python·langchain·ai agent·langgraph
夜雪一千2 小时前
Python 如何实现 SHA 加密?SHA1 / SHA256 / SHA512 实战教程
开发语言·python