zoukankan      html  css  js  c++  java
  • MitmProxy使用:mitmproxy、mitmweb、mitmdump

    介绍

    mitmproxy是Python编写的一款功能完善的代理工具,mitmproxy是一款支持拦截HTTP和HTTPS请求和响应并即时修改它们的交互式中间人代理工具。同时它提供了Python API给开发者编写插件用来自定义对流量进行处理和修改。

    为什么选择 mitmproxy

    • 相对于我们常用的 fiddle 代理工具,它是可以跨平台;
    • 相对于跨平台的 charles 代理工具,它是开源免费的;
    • 最重要的一点,也是为什么我们采用 mitmproxy 来进行做 Mock,它支持使用 Python 进行二次开发,这样就可以结合业务进行灵活拓展了。

    mitmproxy 构成

    • mitmproxy:是一个控制台工具,允许交互式检查和修改 HTTP 流量;
    • mitmweb:mitmproxy 是基于 Web 的用户界面,它允许交互式检查和修改 HTTP 流量;
    • mitmdump:mitmproxy 的命令行版本。它提供了类似 tcpdump 的功能,可查看、记录和以编程方式转换 HTTP 流量。

    安装

    pip3 install mitmproxy

    启动

    mitmproxy
    #或者指定端口
    mitmproxy -p 8888

    启动 mitmproxy 之后,默认开启8080端口, mitmproxy 命令不支持Windows平台,需要使用 mitmdump 或者 mitmweb 命令代替。Windows系统也可以在官网下载它的EXE文件进行安装。

    快速部署

    设置本地代理

    export http_proxy="127.0.0.1:8080"

    拉取mitmproxy镜像

    docker pull mitmproxy/mitmproxy

    运行镜像

    docker run --rm -it -p 8080:8080 mitmproxy/mitmproxy mitmproxy

    mitmproxy 控制台

    快速测试

    curl http://readtest.cn/

    访问结果:

     注意:现在访问https无法劫持,需要访问http://mitm.it 来安装证书,选择匹配的平台,下载 HTTPS 证书。并按照对应的步骤进行安装

    mitmproxy 快捷键

    ? 帮助文档  
    q 返回/退出程序 
    b 保存response body 
    f 进入编辑模式,可在最下面输入过滤条件,ESCEnter退出编辑
    • !(~c 200) #显示所有返回不是200的请求
    • !(~c 200) & ~d safecode #显示域名包含safecode,返回不是200的请求
    • ~m post & ~u safe #显示请求的链接里面包含safe的post请
    k 上
    j 下
    h 左
    l 右
    space 翻页
    enter 进入接口详情
    z 清屏
    e 编辑
    r 重新请求

    mitmweb

    $ mitmweb
    

    启动 mitmweb 命令后,会有一个类似Chrome开发者工具的Web页面,功能上类似mitmroxy,一样可以查看每个请求的详情,包括请求、响应,还可以对请求和响应内容进行修改,包括过滤、重新发送请求等常用功能。

    mitmdump

    $ mitmdump -s script.py
    

    mitmdump 命令最大的特点就是可以自定义脚本,你可以在脚本中对请求或者响应内容通过编程的方式来控制,实现数据的解析、修改、存储等工作

    # script.py
    from mitmproxy import http
    
    def request(flow: http.HTTPFlow) -> None:
        # 将请求新增了一个查询参数
        flow.request.query["mitmproxy"] = "rocks"
    
    def response(flow: http.HTTPFlow) -> None:
        # 将响应头中新增了一个自定义头字段
        flow.response.headers["newheader"] = "foo"
        print(flow.response.text)

    官网: https://mitmproxy.org
    文档:http://docs.mitmproxy.org/en/v0.18.2/introduction.html

  • 相关阅读:
    linux下用shell删除三天前或者三天内的文件
    linux在shell中获取时间
    mongodb_修改器($inc/$set/$unset/$push/$pop/upsert......)
    java List<Map> 排序问题
    linux crontab定时执行shell脚本
    MongoDB 基础命令——数据库表的增删改查——遍历操作表中的记录
    Windows7下安装MongoDB
    JavaWeb学习总结(十二)——Session
    javaweb学习总结(十一)——使用Cookie进行会话管理
    iOS10 SiriKit QQ适配详解
  • 原文地址:https://www.cnblogs.com/-wenli/p/13939265.html
Copyright © 2011-2022 走看看