引言 mitmproxy拥有强大的addOns(扩展)机制,可以通过python代码自定义实现对http、https数据包的mock等功能。 学习目标:
- mitmProxy的环境搭建及证书配置
- mitmProxy(web、手机模拟器)抓包
- mitmProxy录制脚本
- mitmProxy(mock)
https://docs.mitmproxy.org/stable/concepts-filters/
java-mock
1.mitmProxy介绍
网络抓包(packet capture) (定义)将网络传输中的发送与接收的数据包进行:
- 截获(利用“中间代理服务器”:fiddler、charles、mitmproxy、anyproxy等)
- 重发
- 编辑(类似mock)
- 转存….
mitmproxy为“man in the middle(中间人攻击)”的缩写。
request 拦截(itercept)—> 修改(modify)—> 回放(replay)
1.mitmproxy的特性
- Client-side replay
- Map Local
- Map Remote
- Modify Body
- Modify Headers
- Proxy Authentication
- Server-side replay
- Sticky Auth
- Sticky Cookies
- Streaming
-
2.mitmproxy的代理方式
mitmproxy提供的代理方式:
反向代理(reverse proxy)
- 穿透代理(transparent proxy)
- 正常代理(regular proxy)【默认】
3.mitmproxy组件
mitmproxy是一个python的第3方库,它由3个组件组成:mitmproxy=mitmproxy+mitmdump+mitmweb。
组件 | 作用 | 说明 |
---|---|---|
mitmproxy | 【交互式】 命令行工具 | windows下无法使用 |
mitmdump | 【非交互式】命令行工具(类似tcpdump) | 跨平台 |
mitmweb | 【web页面】代理工具(类似Chrome-NetWorks) |
说明
- 【mitmweb抓包】务必确保:PC上的代理配置为:127.0.0.1 port:8080
4.mitmweb指定代理端口号
mitmweb -p 端口号(8898) # 指定代理端口号为8898
5.mitmproxy的命令集
参数 | 说明 | 示例 |
---|---|---|
-s | 允许编写扩展文件(xxx.py)——> 加载扩展 | - mitmweb -s xxx.py - mitmdump -s xxx.py |
2.mitmProxy环境搭建及证书配置
1.环境搭建
1.安装mitmproxy
mitmproxy可以使用 pip或pipenv进行安装,如下所示:
# 使用pip进行安装
pip install mitmproxy
# 使用pipenv进行安装
pipenv install mitmproxy
2.验证mitmproxy是否安装成功
由于mitmproxy(命令行工具 )无法在windows下使用“**mitmproxy --version**”进行验证是否成功安装。因此,可以在windows下输入:“**mitmweb --version**”来进行相应的验证操作,如下图所示:<br />
2.证书配置
1.windows下证书配置
1.启动mitmweb
- 在windows的CMD中,输入:mitmweb
2.下载Ca证书
- 【step2】浏览器访问web页面(http://127.0.0.1:8081),并进入”安装Ca证书页面(mitm.it)”及下载对应OS的Ca证书
3.安装CA证书
2.android下证书配置
1.配置代理连接
mitmproxy(默认端口) 8080
hostname mitmproxy运行的ip地址
2.下载并安装(android)CA证书
3.mitmProxy(Python-API)
1.常用的方法
分类 | 方法 | 说明 |
---|---|---|
request | host flow.request.host |
http请求的host |
method flow.request.method |
请求方法 | |
scheme flow.request.scheme |
请求协议 | |
url flow.request.url |
pettry_url
flow.request.pettry | 请求url地址 |
| | pettry_url
flow.request.scheme | 请求协议 |
| | path
flow.request.path | 请求url的路径 |
| | headers
flow.request.headers | 请求headers
- flow.request.headers[key]=value # [新增]request的header新增指定的key
- flow.request.headers.get(key) # 查看request_header中的指定key
|
| | 【post】urlencode_form
flow.request.urlencode_form | post请求 |
| | 待其他补充 | |
| response | status_code
flow.response.status_code | 状态码 |
| | headers
flow.response.headers | 响应headers
- flow.response.headers.get(key) # 指定取值
|
| | text
flow.response.get_text | 响应信息 |
| | 待其他补充 | |