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

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.xdnf.cn/news/6103.html

相关文章:

  • 518本周总结(30)Steam过审+Epic提审
  • Vue3指令(二)--v-text、v-html数据渲染,计算属性
  • TNNLS-2020《Autoencoder Constrained Clustering With Adaptive Neighbors》
  • 【DRAM存储器五十一】LPDDR5介绍--CK、WCK、RDQS单端模式、Thermal Offset、Temperature Sensor
  • 近期搬了个家,停更了几天,明天继续哈~
  • 学会使用ai作图
  • 腾讯 IMA 工作台升级:新增知识库广场与 @提问功能
  • 标签部件(lv_label)
  • 企业数字化转型背景下的企业知识管理挑战与经验杂谈
  • 如何迁移 WSL 卸载 Ubuntu WSL
  • 数据库常见故障排查
  • 网络协议分析 实验六 TCP和端口扫描
  • web第三次课后作业--基于JDBC对mysql数据库的增删查改操作
  • 51单片机——交通指示灯控制器设计
  • 前端安全:XSS、CSRF 防御与最佳实践
  • JavaSwing之-JDialog
  • C++类和对象练习:Date类实现日期的差,比较日期的大小,日期的前置后置++,--,输入输出Date类,对默认函数的练习。
  • 数据科学和机器学习的“看家兵器”——pandas模块 之一
  • Docker Compose 的安装方法
  • 使用mermaid 语言绘画时序图和链路图
  • 基于 TensorFlow 框架的联邦学习可穿戴设备健康数据个性化健康管理平台研究
  • Tensorflow2保存和加载模型
  • 2025年PMP 学习十二 第9章 项目资源管理
  • 02_Servlet
  • .Net HttpClient 使用代理功能
  • Leetcode (力扣)做题记录 hot100(62,64,287,108)
  • C#调用C++dll 过程记录
  • 技术债务积累,如何进行有效管理
  • C++ 日志输出(宏定义)
  • 无人机数据处理与特征提取技术分析!