Python使用mitmproxy工具监控手机 下载手机小视频


Posted in Python onApril 18, 2022

今天为大家介绍使用 mitmproxy 这个抓包工具如何监控手机上网,并且通过抓包,把我们想要的数据下载下来。

启动 mitmproxy

首先我们通过执行命令 mitmweb 启动mitmproxy,让它处理监听状态,服务会监听本机 8080 端口,启动后如下:

$ mitmweb
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:8080

手机网络配置

1.保证手机和电脑在同一局域网内,并查看电脑的局域网 IP 地址是多少以备用,查看方式可以用命令查看,如 Windows 系统用

ipconfig 命令,Mac 或 Linux 则用命令 ifconfig,看到如下图所示,找到本机在局域网的 IP 地址。

Python使用mitmproxy工具监控手机 下载手机小视频

不同操作系统,可能展示结果不同,在这里我们可以看到红框里我本机的 IP 地址为 192.168.0.108。

2.配置手机代理地址,比如以下用 iphone 手机进行配置,打开设置 -> 无线局域网 -> 点现在连接的网络 -> 点最下面点 HTTP 代

理配置,选择手动后,配置代理地址为我们电脑的 IP地址和 mitmproxy 的监听端口,配置如下图所示:

Python使用mitmproxy工具监控手机 下载手机小视频

3.现在我们就可以让手机通过电脑上网了,不过目前手机 App 都是通过 HTTPS 加密请求,所以我们需要在手机上安装个

mitmproxy 的 HTTPS 证书。接下来我们打开手机浏览器,输入网址:mitm.it,打开如下图所示页面,选择对应手机的操作系统,

下载证书并安装。

Python使用mitmproxy工具监控手机 下载手机小视频

下载页

在这里我点 Apple 的图标下载证书,下载后等待安装:

Python使用mitmproxy工具监控手机 下载手机小视频

Python使用mitmproxy工具监控手机 下载手机小视频

单击上面的安装,可能会出现信任的提示,只要选择信任证书就可以了,下面是安装好的界面如下图:

Python使用mitmproxy工具监控手机 下载手机小视频

好了,配置完成下面我们点开个手机 APP 看到电脑 mitmweb 的页面上,已经出现请求内容了。

Python使用mitmproxy工具监控手机 下载手机小视频

编写下载脚本

好了,现在经过分析拦截的请求,我们开始用 Python 编写代码,通过解析视频的 url 将视频下载到本地。在这里我们先来打印下

数据,新建文件 xiaoshipin.py,然后编写如下代码,实现将已编码的 json 字符串解码为 python 对象:

#xiaoshipin.py
import json
def response(flow):    
url='https://api.amemv.com/aweme/v1/aweme/post/'    
#筛选出以上面url为开头的url    
if flow.request.url.startswith(url):        
text=flow.response.text       
 #将已编码的json字符串解码为python对象        
 data=json.loads(text)        
 print(data)

编辑完后保存,然后执行命令:mitmweb -s xiaoshipin.py,带上这段脚本来运行我们的代理服务,刷新几个视频,会看到如下图所示内容:

Python使用mitmproxy工具监控手机 下载手机小视频

其中就包含了我们需要的下载地址信息,接下来我们只需提取视频的 url ,并且缓存视频到本地就 OK 了。

下面我们就来修改上面的 xiaoshipin.py 的代码,完善下视频下载的功能。

#xiaoshipin.py

#引入包
import json,os
import requests

#只拦截并处理返回请求
def response(flow):    
#请求的 url    
url='https://api.amemv.com/aweme/v1/aweme/post/'    
#筛选出以上面url为开头的url    
if flow.request.url.startswith(url):        
text=flow.response.text        
#将已编码的json字符串解码为python对象        
data=json.loads(text)        
#刚分析看到每一个视频的所有信息        
#都在aweme_list中        
video_url=data['aweme_list']        
#设置下载路径        
path='/Users/xx/shipin'        
#如果文件夹不存在,则新建        
if not os.path.exists(path):            
os.mkdir(path)
        # 循环所有视频 url        
        for each in video_url:            
 #视频描述            
 desc=each['desc']            
 url=each['video']['play_addr']['url_list'][0]           
  # 设置视频名称            
  filename=path+'/'+desc+'.mp4'            
  # 用 request 请求视频流            
  req=requests.get(url=url,verify=False)            
  # 保存视频文件            
  with open(filename,'ab') as f:                
  f.write(req.content)                
  f.flush()                
  print(filename,'下载完毕')

上面我已经把相关代码注释好了,现在我们保存编辑好的代码,然后再次执行命令:mitmweb -s xiaoshipin.py,启动监听服务。

然后打开手机再次下视频,就会看到视频是不是已经都存到本地了。

到此这篇关于Python 下载手机小视频的文章就介绍到这了,更多相关Python 下载手机小视频内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python解析命令行读取参数--argparse模块使用方法
Jan 23 Python
python3.x上post发送json数据
Mar 04 Python
解决python升级引起的pip执行错误的问题
Jun 12 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
Jul 04 Python
Python设计模式之适配器模式原理与用法详解
Jan 15 Python
Python中函数的基本定义与调用及内置函数详解
May 13 Python
python3.6中@property装饰器的使用方法示例
Aug 17 Python
Python如何使用内置库matplotlib绘制折线图
Feb 24 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
Nov 26 Python
python使用numpy中的size()函数实例用法详解
Jan 29 Python
用基于python的appium爬取b站直播消费记录
Apr 17 Python
使用Python通过企业微信应用给企业成员发消息
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 #Python
python在package下继续嵌套一个package
Apr 14 #Python
Github 使用python对copilot做些简单使用测试
使用Python拟合函数曲线
Apr 14 #Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
python中 .npy文件的读写操作实例
Apr 14 #Python
You might like
php HandlerSocket的使用
2011/05/02 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
php获取系统变量方法小结
2015/05/29 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
Node.js的特点详解
2017/02/03 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
Vue Cli与BootStrap结合实现表格分页功能
2017/08/18 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
node.js遍历目录的方法示例
2018/08/01 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
2019/08/23 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python整数对象实现原理详解
2019/07/01 Python
Python列表切片常用操作实例解析
2019/12/16 Python
Python编写万花尺图案实例
2021/01/03 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
Java的for语句中break, continue和return的区别
2013/12/19 面试题
自我鉴定书范文
2013/10/02 职场文书
财政专业求职信范文
2014/02/19 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
委托书怎么写
2014/07/31 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js