引言 mitmproxy拥有强大的addOns(扩展)机制,可以通过python代码自定义实现对http、https数据包的mock等功能。 学习目标

  • mitmProxy的环境搭建及证书配置
  • mitmProxy(web、手机模拟器)抓包
  • mitmProxy录制脚本
  • mitmProxy(mock)

【解决方案】Android7+(Ca证书不信任)无法抓包 mitmproxy官网

https://docs.mitmproxy.org/stable/concepts-filters/
java-mock

1.mitmProxy介绍

网络抓包(packet capture) (定义)将网络传输中的发送与接收的数据包进行:

  • 截获(利用“中间代理服务器”:fiddler、charles、mitmproxy、anyproxy等)
  • 重发
  • 编辑(类似mock)
  • 转存….

mitmproxy为“man in the middle(中间人攻击)”的缩写。

4.mitmProxy - 图1

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

image.png

4.mitmweb指定代理端口号

  1. mitmweb -p 端口号(8898) # 指定代理端口号为8898

image.png

5.mitmproxy的命令集

参数 说明 示例
-s 允许编写扩展文件(xxx.py)——> 加载扩展
- mitmweb -s xxx.py
- mitmdump -s xxx.py

2.mitmProxy环境搭建及证书配置

1.环境搭建

1.安装mitmproxy

mitmproxy可以使用 pip或pipenv进行安装,如下所示:

  1. # 使用pip进行安装
  2. pip install mitmproxy
  3. # 使用pipenv进行安装
  4. pipenv install mitmproxy

2.验证mitmproxy是否安装成功

  1. 由于mitmproxy(命令行工具 )无法在windows下使用“**mitmproxy --version**”进行验证是否成功安装。因此,可以在windows下输入:“**mitmweb --version**”来进行相应的验证操作,如下图所示:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/247346/1623481436128-c2cb200f-8e4d-46d6-82d3-28121e79aba9.png#height=121&id=oswd0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=241&originWidth=991&originalType=binary&ratio=1&size=22790&status=done&style=none&width=495.5)

2.证书配置

1.windows下证书配置

1.启动mitmweb

  • 在windows的CMD中,输入:mitmweb

2.png

2.下载Ca证书

  • 【step2】浏览器访问web页面(http://127.0.0.1:8081),并进入”安装Ca证书页面(mitm.it)”及下载对应OS的Ca证书

image.png

3.安装CA证书

image.pngimage.png
image.png
image.png

2.android下证书配置

1.配置代理连接

mitmproxy(默认端口) 8080
hostname mitmproxy运行的ip地址
0.png

2.下载并安装(android)CA证书

m1.png

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 | 响应信息 | | | 待其他补充 | |

https://blog.csdn.net/u014578907/article/details/88258002