【mitmproxy 用法】

简介

mitmproxy是一组工具,可为HTTP/1,HTTP/2WebSockets提供交互式的,具有SSL/TLS功能的拦截代理(可以对Web、Mobile进行抓包)。
mitmproxy 相比Charlesfiddler的优点在于它可以命令行方式或脚本的方式进行mock数据,还可以对请求数据进行二次开发,进入高度二次定制。
详情可参考:mitmproxy 官网mitmproxy 官方文档

安装

Mac 安装

直接命令行安装:brew install mitmproxy

或者直接下载二进制文件进行安装 mitmproxy.org

Windows 安装

直接下载exe文件进行安装 mitmproxy.org

安装好后查看是否配置成功:mitmproxy --version
请添加图片描述

安装证书

安装证书之前首先要启动mitmproxy: mitmproxy -p 8899

浏览器代理配置
Chrome 已安装插件(没有VPN可能安装不了,推荐使用Firefox) Proxy SwitchyOmega
Firefox 已经安装插件 Proxy SwitchyOmega

添加新的代理(端口要与上边的启动的端口一致):
请添加图片描述

配置后的浏览器打开mitm.it,根据提示安装相对应的证书并且要信任证书

请添加图片描述

用法

mitmproxy工具有以下三部分组成:

mitmproxy是具有SSL/TLS功能的交互式拦截侦听代理,具有用于HTTP/1HTTP/2WebSockets的控制台界面。
mitmweb是用于mitmproxy的基于Web的界面。
mitmdumpmitmproxy的命令行版本。将tcpdump用于HTTP

常用参数
-h 帮助信息
-p 修改监听端口,默认监听端口8080
-s 加载 python 脚本

mitmproxy

mitmproxy是一个控制台工具,它允许交互式检查和修改HTTP流量
启动代理:mitmproxy -p 8899
请添加图片描述
通过鼠标点击查看请求详情:
请添加图片描述
通过q返回到主界面,可通过f添加过滤条件,最后可以通过q关掉代理,详情操作可参考: doc

mitmweb

mitmwebmitmproxy基于Web的用户界面
启动代理:mitmweb -p 8899
请添加图片描述
具体功能根据页面自己摸索吧!

mitmdump

mitmdump是mitmproxy的命令行伴侣。它提供了类似tcpdump的功能,可让您查看,记录和以编程方式转换HTTP流量,即可对接 python 对请求进行处理,因此就不用手动截获和分析 http 请求和响应,只需要写好请求和响应的处理逻辑即可。请参阅–help标志输出以获取完整的文档。

录制与回放

录制:mitmdump -w 文件名
过滤:mitmdump -nr 文件名 -w 文件名2 "~s chenshifeng"
回放:mitmdump -nc 文件名

参数

-s test.py # 加载脚本
-n 不启动代理
-r 读取文件内容
-w 写入文件
~s 过滤响应数据

详情可参考:mitmdump -h

录制请求数据并保存到result.txt文件:mitmdump -p 8999 -w result.txt

过滤保存的请求: mitmdump -nr result.txt -w filter_result.txt "~s kewords"

mitmdump 加载脚本拦截更改请求信息

例1:脚本(update_request.py)更改response coderesponse text

from mitmproxy import http
import json

def response(flow: http.HTTPFlow):
	# flow.request.pretty_url,整个url
    if flow.request.path == '你要拦截的url的path':
        # flow.response.text = json.dumps(results)
        flow.response.text = json.dumps([])
        flow.response.status_code = 500

启动:mitmdump -p 8899 -s update_request.py

例2: 脚本(update.py)修改返回特定的内容

from mitmproxy import http
import json

def response(flow: http.HTTPFlow):
	# flow.request.pretty_url,整个url
    if flow.request.path == '你要拦截的url的path':
        data = json.loads(flow.response.content)
        # update data
        data['key1']['key2'][0] = "some thing"
        flow.response.text = json.dumps(data)

例3:脚本(test.py)构造请求,拦截一个请求并调用你构造的请求

from mitmproxy import http
 
def request(flow: http.HTTPFlow):
   
    if flow.request.path == '你要拦截的url的path':
        # 修改请求头
	    flow.request.headers["my_headers"] = "headers"
	    print(flow.request.headers)
        # 更新请求的path
        flow.request.path = '要更改的path'
        
        # 构造请求的body
        body = {
            "key": "",
            "key1": "123"
        }
        flow.request.content = json.dumps(body).encode('ascii')
		# 构造请求的method
        flow.request.method = b'PUT'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值