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.pswp.cn/diannao/83102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP Business One(B1)打开自定义对象报错【Failed to initialize document numbering:】

业务场景: 新版本的客户端,打开已经注册的自定义单据类型的表的时候,报错【Failed to initialize document numbering:】。 但是注册的自定义主数据类型的表,不会有问题。 解决方案: 打开【管理-系统初始化-常规设置…

计算机网络:WiFi路由器发射的电磁波在空气中的状态是什么样的?

WiFi路由器发射的电磁波是高频无线电波,属于微波频段(2.4GHz或5GHz),在空气中以光速传播(约310⁸米/秒),其传播状态和特性可通过以下维度详细解析: 一、电磁波的物理特性 频率与波长 2.4GHz频段:波长约12.5厘米,穿透力较强但易受干扰(微波炉、蓝牙等共用频段)。5GH…

腾讯云-人脸核身+人脸识别教程

一。产品概述 慧眼人脸核身特惠活动 腾讯云慧眼人脸核身是一组对用户身份信息真实性进行验证审核的服务套件,提供人脸核身、身份信息核验、银行卡要素核验和运营商类要素核验等各类实名信息认证能力,以解决行业内大量对用户身份信息真实性核实的需求&a…

tocmat 启动怎么设置 jvm和gc

在生产环境中部署 Java Web 应用时,我们经常需要给 Tomcat 设置 JVM 参数和 GC 策略,以提高性能、稳定性和可观察性。以下是完整教程: 一、Tomcat 设置 JVM 启动参数的方式 1. 修改 startup 脚本(推荐) 以 Linux 系统…

zuoyyyeee

实验拓扑图 需求分析 1.分配接口ip 2.使用OSPF协议使三台路由器可达 3.在路由器1,2 /4,5 使用直连接口直接配置EBGP ip配置: [R1]: bgp 100 rid 1.1.1.1 peer 12.0.0.2 as-number 200 network 1.1.1.1 32 [R2]: bgp 200 rid 2.2.2.2 p…

‌Element UI 双击事件(@cell-dblclick 与 @row-dblclick)

‌Element UI 双击事件(cell-dblclick 与 row-dblclick) 一、核心双击事件绑定‌ 表格单元格双击‌ ‌事件绑定‌: 通过 cell-dblclick 监听单元格双击,接收四个参数(row, column, cell, event)。 ‌示…

Python爬虫实战:研究decrypt()方法解密

1. 引言 1.1 研究背景与意义 在当今数字化时代,网络数据蕴含着巨大的价值。然而,许多网站为了保护其数据安全和商业利益,会采用各种加密手段对传输的数据进行处理。这些加密措施给数据采集工作带来了巨大挑战。网络爬虫逆向解密技术应运而生,它通过分析和破解网站的加密机…

day014-服务管理

文章目录 1. 提问的方式1.1 注意事项1.2 start法则-提问/面试 2. systemctl 系统服务管理2.1 开启和自启动服务sshd2.2 关闭和永久禁用防火墙2.3 查看服务的状态2.4 重启服务2.5 sshd重启失败案例 3. localectl 字符集管理3.1 临时修改语言3.2 永久修改语言3.3 用脚本修改语言 …

【redis】CacheAside的数据不一致性问题

缓存的合理使用确提升了系统的吞吐量和稳定性,然而这是有代价的,这个代价便是缓存和数据库的一致性带来了挑战。 新增数据时,数据直接写入数据库,缓存中不存在对应记录。首次查询请求会触发缓存回填,即从数据库读取新…

DA14585墨水屏学习

一、do_min_word void do_min_work(void) {timer_used_min app_easy_timer(APP_PERIPHERAL_CTRL_TIMER_DELAY_MINUTES, do_min_work);current_unix_time time_offset;time_offset 60;// if (isconnected 1)// {// GPIO_SetActive(GPIO_LED_PORT, GPIO_LED_PIN);// …

微服务调试问题总结

本地环境调试。 启动本地微服务,使用公共nacos配置。利用如apifox进行本地代码调试解决调试问题。除必要的业务微服务依赖包需要下载到本地。使用mvn clean install -DskipTests进行安装启动前选择好profile环境进行启动,启动前记得mvn clean清理项目。…

C#学习第22天:网络编程

网络编程的核心概念 1. 套接字(Sockets) 定义:套接字是网络通信的基本单元,提供了在网络中进行数据交换的端点。用途:用于TCP/UDP网络通信,支持低级别的网络数据传输。 2.协议 TCP(Transmiss…

TWASandGWAS中GBS filtering and GWAS(1)

F:\文章代码\TWASandGWAS\GBS filtering and GWAS README.TXT 请检查幻灯片“Vitamaize_update_Gorelab_Ames_GBS_filtering_20191122.pptx”中关于阿姆斯(Ames)ID处理流程的详细信息。 文件夹“Ames_ID_processing”包含了用于处理阿姆斯ID的文件和R…

图像处理篇---opencv实现坐姿检测

文章目录 前言一、方法概述使用OpenCV和MediaPipe关键点检测角度计算姿态评估 二、完整代码实现三、代码说明PostureDetector类find_pose()get_landmarks()cakculate_angle()evaluate_posture() 坐姿评估标准(可进行参数调整):可视化功能&…

.Net HttpClient 使用代理功能

HttpClient 使用代理功能 实际开发中,HttpClient 通过代理访问目标服务器是常见的需求。 本文将全面介绍如何在 .NET 中配置 HttpClient 使用代理(Proxy)功能,包括基础使用方式、代码示例、以及与依赖注入结合的最佳实践。 注意…

【学习路线】 游戏客户端开发入门到进阶

目录 游戏客户端开发入门到进阶:系统学习路线与推荐书单一、学习总原则:从底层出发,项目驱动,持续迭代二、推荐学习路线图(初学者→进阶)第一阶段:语言基础与编程思维第二阶段:游戏开…

精益数据分析(57/126):创业移情阶段的核心要点与实践方法

精益数据分析(57/126):创业移情阶段的核心要点与实践方法 在创业的浩瀚征程中,每一个阶段都承载着独特的使命与挑战。今天,我们继续秉持共同进步的理念,深入研读《精益数据分析》,聚焦创业的首…

015枚举之滑动窗口——算法备赛

滑动窗口 最大子数组和 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 原题链接 思路分析 见代码注解 代码 int maxSubArray(vector<int>& num…

微软系统 红帽系统 网络故障排查:ping、traceroute、netstat

在微软&#xff08;Windows&#xff09;和红帽&#xff08;Red Hat Enterprise Linux&#xff0c;RHEL&#xff09;等系统中&#xff0c;网络故障排查是确保系统正常运行的重要环节。 ping、traceroute&#xff08;在Windows中为tracert&#xff09;和netstat是三个常用的网络…

解构认知边界:论万能方法的本体论批判与方法论重构——基于跨学科视阈的哲学-科学辩证

一、哲学维度的本体论批判 &#xff08;1&#xff09;理性主义的坍缩&#xff1a;从笛卡尔幻想到哥德尔陷阱 笛卡尔在《方法论》中构建的理性主义范式&#xff0c;企图通过"普遍怀疑-数学演绎"双重机制确立绝对方法体系。然而哥德尔不完备定理&#xff08;Gdel, 19…