• 【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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    启动: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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    例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'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    tiup cluster clean
    spring cron表达式源码分析
    文档查重,论文查重,相似度算法,pdf文档操作
    Nginx listen 监听端口详解
    开发平台模块化重构之实现
    MybatisPlus的基础使用
    Redis相关概念
    ChunJun Meetup演讲分享 | 基于袋鼠云开源框架的数仓一体化建设探索
    C/C++问题:一个指针的大小是多少?怎么理解指针变量的存在
    微型导轨可用在哪些设备上?
  • 原文地址:https://blog.csdn.net/lb245557472/article/details/126195971