当前位置: 首页 > news >正文

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

前言

        一个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

        结果展示: 

 

http://www.dtcms.com/a/190418.html

相关文章:

  • Docker使用经验-从Image导出dockerfile并进行修改
  • Spark处理过程--案例数据清洗
  • Unity引擎源码-物理系统详解-其二
  • 智能体制作学习笔记1——智能体
  • 软件设计师-下午题-试题4(15分)
  • 深入掌握 Python 切片操作:解锁数据处理的高效密码
  • 基于 Kubernetes 部署容器平台kubesphere
  • 基于网关实现不同网段S7-1200 CPU的通信方法
  • 【Spark分析HBase数据】Spark读取并分析HBase数据
  • 互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-6
  • Python 之 selenium 打开浏览器指定端口进行接续操作
  • 机器人示教操作
  • excel使用笔记
  • 【2025版】Spring Boot面试题
  • Flutter 开发入门:从一个简单的计数器应用开始
  • Problem E: List练习
  • Linux架构篇、第五章_02git2.49.0分支管理与Gitee的部署
  • 《实现模式》以Golang视角解读 价值观和原则 day 1
  • 【PSINS工具箱】基于工具箱的单独GNSS导航、单独INS导航、两者结合组合导航,三种导航的对比程序。附完整的代码
  • 计算机网络:什么是计算机网络?它的定义和组成是什么?
  • 记录一次git提交失败解决方案
  • 模糊数学方法之模糊贴近度
  • 解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- OpenAI AGI 五阶段
  • 实验六:按键模拟控制实现
  • 浏览器相关
  • FPGA: Xilinx Kintex 7实现PCIe接口
  • 几种运放典型应用电路
  • OracleLinux7.9-ssh问题
  • Windows10安装WSA
  • 涨薪技术|0到1学会性能测试第64课-SQL监控之Trace选项