中文官网 [mitmproxy中文文档] mitmproxy选项 - pytorch中文网
mitmproxy抓包工具
1. mitmproxy 介绍与安装
需要安装python环境
1. mitmproxy 是什么
mitmproxy是一组工具,可为HTTP/1,HTTP/2和WebSockets提供交互式的,具有SSL/TLS功能的拦截代理。
拦截HTTP和HTTPS请求和响应并即时修改它们;
保存完整的HTTP对话以供以后重播和分析;
重播HTTP对话的客户端;
重播先前记录的服务器的HTTP响应;
反向代理模式将流量转发到指定的服务器;
macOS和Linux上的透明代理模式;
使用Python对HTTP流量进行脚本化更改;
即时生成用于拦截的SSL/TLS证书
2. 安装
直接开始安装
mitmproxy 命令不支持在 windows 系统中运行,所以可以选择linux虚拟机来完成
在 linux 中:
在 windows 中,以管理员身份运行 cmd 或 power shell:
安装结束。
完成后,可以执行 mitmproxy 、 mitmdump 、 mitmweb 三个命令,我们可以拿 mitmdump 测试一下安装是否成功,执行:
| PS D:\kyls_working> mitmdump --version
Mitmproxy: 8.0.0
Python: 3.9.6
OpenSSL: OpenSSL 1.1.1m 14 Dec 2021
运行
要启动 mitmproxy 用
mitmproxy 、
mitmdump 、
mitmweb
这三个命令中的任意一个即可,这三个命令功能一致,且都可以加载自定义脚本,唯一的区别是交互界面的不同。!!!!在运行过程需要安装mitmproxy 的安全证书http://mitm.it/ 点击这个链接去选择安装安全证书
然后选择响应的系统去下载安装即可
安装过程如下
然后下一步确定即可
记得一定要重启浏览器1. mitmproxy
![mitmproxy-list.png](../../_resources/2022-03-22 17-32-12屏幕截图.png)
使用
来设置代理服务器
然后在浏览器上设置好 就可以使用mitmproxy
在mitmproxy 命令行中 通过
- 上下键 来选择包
- 回车是进入
- tab 是切换 request response 和detail
- ESC+q 是退出
2. mitmdump
mitmdump -w test.txt
将抓到的数据 存入test.txt
然后就会发现 自己的文件一堆乱码
没关系 我们之后用python去读取 就行了3.mitmweb
直接在终端输入 mitmweb 会发现会直接进入浏览器
然后刷新你的网站 就会发现在web端抓到你的数据包了
和fidder一样是一个展示窗口
2. mitmproxy 手机端抓包
mitmproxy
mitmdump
mitmweb设置mitmproxy
在linux上启动mitmproxy
会启动8080端口
如果要改变端口号 使用如下命令
mitmproxy -p 8888
监听的端口号就变成了8888设置手机模拟器
在 夜神模拟器的手机中
长按wifi 修改 手机的代理服务器的ip地址
修改为你的mitmproxy 的服务器地址和设置的端口号
| 然后返回浏览器
输入 mitm.it 安装 安卓的证书
查看证书
设置——> 安全——>受信任的凭据——>用户
清除数据包
按键盘上的 z
1. 功能键
访问浏览器
然后在我们的手机浏览器中输入http://www.baidu.com
即可完成抓包查看某个数据包
上下键 选择数据包 回车进入详细数据包退出某个数据包
q清除数据包
z退出
按下 q 然后再使用y完成退出
2. 数据包的过滤
启动mitmproxy 并且启动手机
打开网址 www.baidu.com
就会发现我们抓到了很多数据包
然后我们 输入字母 f
查看流选择器
在交互式上下文中,mitmproxy具有一组在当前视图上运行的便捷流选择器:
| @all 所有流量
@focus 当前关注的流程
@shown 当前显示的所有流
@hidden 当前隐藏所有流
@marked 所有标记的流
@unmarked 所有未标记的流
例子
- 筛选出非200的请求
set viewer_filter '!~c 200'
- 筛选出百度这个域名的所有请求
set viewer_filter '~d baidu.com'
- 筛选post请求且是百度的请求
set viewer_filter '~m post & ~d baidu.com'
set viewer_filter '~m post & ~u baidu.com'
3. mitm 设置断点拦截
输入字母 i 以此来 写断点条件请求篡改
例:
- 断点 百度域名且是 get的
set intercept '~d baidu.com & ~m get'
![断点 百度域名且是 get的.png](../../_resources/断点 百度域名且是 get的.png)
然后选择红色的数据包 点击回车进入
断点输入E修改详细数值
然后修改 我们的url 修改为
https:xw.qq.com 并且删除掉我们headers里的hosts
然后按q退出到列表页
按下 a 进行重新载入 即可完成请求篡改响应篡改
进入 调试界面 进入
我们进入 response.body 即可 完成响应篡改
3. mitmdump 的使用
!!!注意更换设备就要再安装一台证书
mitmdump 非常重要 他可以和python脚本进行交互
在windows下直接输入
mitmdump更换端口号
mitmdump -p 8888载入自定义python脚本
mitmdump -p 8888 -s test.py
脚本有固定格式
| # 必须这么写
def request(flow):
我们设置好代理 安装好安全证书后 访问 http://httpbin.org/get
就会发现我们的服务端显示 headers的全部内容
第一个是我们需要的信息
然后我们会可以使用 mitmproxy 的ctx中的log日志模块 来记录我们的内容
from mitmproxy import ctx
# 必须这么写
def request(flow):
# print(flow.request.headers)
# # 请求头
# ctx.log.info(str(flow.request.headers))
# ctx.log.warn(str(flow.request.headers))
# ctx.log.error(str(flow.request.headers))
# # 请求的链接地址
# ctx.log.error(str(flow.request.url))
# # 请求的主机头
# ctx.log.error(str(flow.request.host))
# # 请求的方法
ctx.log.error(str(flow.request.method))
# # 请求的路径
# ctx.log.error(str(flow.request.path))
重新启动我们的mitmproxy 并且重新访问一下url就会得到……
这样就能对颜色进行区分
也可以对响应内容进行访问
def response(flow):
# 响应的状态码
ctx.log.error(str(flow.response.status_code))
# 响应的内容
ctx.log.error(str(flow.response.text))
使用mitmdump 代理
mitmdump -s test.py -p 8889 --mode upstream:XXX: Find all XXX sites at your fingertips! - XXX.xxx --stream-auth 通行证书+密码 -p 8889