Mitmproxy的使用

目录

1.背景

2.Mitmproxy

       1)Windows安装

        2)定制开发

        3)启动

3.使用

4.问题

5.参考资料


1.背景

        简单来说,背景就两个字“偷懒”,一个字“”。在API自动化脚本的开发中,一般都需要封装一下接口。如果没有swagger等接口文档,常见做法就是人工操作页面,然后通过F12去查看这些API,再copy到脚本里面做处理。这个过程挺繁琐的,费时费力,还容易出错,尤其有特殊headers时,经常只有在调试才发现。当然,也可以通过工具录制这些API,jmeter/ badboy/ fiddler/ charles等等都行。可现实是,要么因为环境特殊录制不了,就算能录制也是一通复杂的配置;要么就是没有办法直接得到脚本,需要人工做导出操作。实在不符合“懒”的气质~~~于是,一直在思考有没有更“懒”的方法呢?

        找了不少方法,中间过程就不赘述了,最后选择了mitmproxy,能用还能定制,就它了。

2.Mitmproxy

        MITM(Man-in-the-middle,中间人)简而言之就是个代理,可以拦截诸如HTTP/ SMTP/ SSL/ SOCK4/5协议类型的信息。区别于fiddler/ charles这样的工具,可以命令行或者脚本对数据做一些定制处理。

       1)Windows安装

        第一步:pip install mitproxy(这里安装的是v5.3.0)

        第二步(可能有):配置环境变量。这里自己没有配置好像也能用,不明所以。。。

        第三步(可能有):安装证书。下载对应版本的证书,导入到浏览器。证书下载地址:

Downloads (mitmproxy.org)。因为不是管理员身份另外也因为是自己测试环境,所以没有安装证书,而是在启动时做了一点小改动也能使用。

        第四步:校验是否安装成功。在windows上无法使用mitmproxy,只能用mitmweb

        如果上面步骤有不对,请看官移步度娘问问,然后不吝赐教~~

        2)定制开发

        这里是为了将被测环境上操作时的请求都保留下来,所以需要在这里做一些修改,直接上代码:

import json

from mitmproxy import http

class CaptureProxy:
    def request(self, flow: http.HTTPFlow) -> None:
        request_info = {
            "method": flow.request.method,
            "url": flow.request.pretty_url,
            "headers": dict(flow.request.headers),
            "content": flow.request.content.decode()
      }

        with open("requests.json", "a") as f:
            json.dump(request_info, f)
            f.write("\n")

addons = [
    CaptureProxy()
]

     还可以在这里过滤指定的host或者api。前置条件:

fixed_host = "www.baidu.com"  # 只抓取baidu的请求
fixed_url = "/api/"        # 只抓取API请求,那些css/ html/ json/ js等等都不考虑
class CaptureProxy:
    def request(self, flow: http.HTTPFlow) -> None:
        global fixed_host, fixed_url

        if flow.request.host != fixed_host:
            return
        
        if fixed_url not in flow.request.pretty_url:
            return

        3)启动

mitmweb -s my_proxy.py --ssl-insecure

        启动后,在默认浏览器会启动这样的页面。mitmproxy默认的监听端口是8080,如果需要修改端口,可以使用 -p <新端口>。--ssl-insecure是因为被测环境是HTTPS,这里不想认证。这种方式有风险,如果是公共环境或者生产环境,慎用!!!

3.使用

        第一步:在浏览器的设置中,将代理设置为http://localhost,端口:8080。这是因为mitmproxy是启动在本地的,端口号与mitmproxy一致。

        第二步:打开被测环境,一通操作之后,在该脚本的工程目录下会生成“requsts.json”文件,里面记录了所有http请求,注意,是包含.css/ .js/ .json/ api等的所有请求。

4.问题

1)502 Bad Gateway。TlsProtocolException("Cannot establish TLS with xxx.xxx.xxx.xxx:443"(sni: None): TlsException('Cannot validate certificate hostname without SNI')")

        启动代理并配置浏览器,由于mitmproxy默认只监听http请求,对被测环境这种https的请求,要么安装证书,要么就如同前面步骤里面那样,启动的时候增加参数--ssl-secure

5.参考资料

mitmproxy · GitHub

mitmproxy - an interactive HTTPS proxy

mitmproxy抓包原理_怪兽N的博客-CSDN博客

MitmProxy介绍以及使用_Cjingger_mounce的博客-CSDN博客

mitmproxy的安装与使用_mitmproxy安装_默默前行的虫虫的博客-CSDN博客

mitmproxy 的安装使用 与 模拟器上的证书配置_mitmproxy证书_Yy_Rose的博客-CSDN博客

 使用mitmweb抓包教程_feiyu361的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值