今天再为大家介绍下使用这个工具如何监控手机上网,并且通过抓包,把我们想要的数据下载下来。
首先我们通过执行命令 mitmweb 启动 mitmproxy,让它处理监听状态,服务会监听本机 8080 端口,启动后如下:
$ mitmweb
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:8080
不同操作系统,可能展示结果不同,在这里我们可以看到红框里我本机的 IP 地址为 192.168.0.108。
在这里我点 Apple 的图标下载证书,下载后等待安装:
单击上面的安装,可能会出现信任的提示,只要选择信任证书就可以了,下面是安装好的界面如下图:
好了,配置完成下面我们点开个手机 APP 看到电脑 mitmweb 的页面上,已经出现请求内容了。
好了,现在经过分析拦截的请求,我们开始用 Python/ target=_blank class=infotextkey>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,带上这段脚本来运行我们的代理服务,刷新几个视频,会看到如下图所示内容:
其中就包含了我们需要的下载地址信息,接下来我们只需提取视频的 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,启动监听服务。然后打开手机再次下视频,就会看到视频是不是已经都存到本地了。
本文为大家介绍了如何通过 mitmproxy 工具下载手机上浏览的小视频,当然除了视频他还可以下载音乐啊图片啊什么的,只要你能通过拦截工具分析你想要的内容在哪个请求中,然后对这个请求返回内容进行搜索分析,然后再用今天这个工具,再通过简单的 Python 编码实现自动处理完成就可以了。