最佳网络数据抓包工具mitmproxy

2022-06-21 16:23:25 浏览数 (1)

介绍

日常测试客户端需求,经常会使用Fiddler、Charles工具,抓取网络请求内容。Fiddler、Charles也有使用上的不足,比如Fiddler仅支持winsows、Charles是收费的,另外Fiddler、Charles在扩展开发脚本上都比较薄弱。

今天就来介绍兼容性强、扩展性强并且免费的代理工具mitmproxy。mitmproxy是一款免费、开放的基于Python开发的交互式HTTPS代理工具。

工作原理如下:

特性:

  • 1、支持Web
  • 2、支持终端
  • 3、支持Python脚本
  • 4、可以记录和重放

官方文档:

https://docs.mitmproxy.org/stable/

githu地址:

https://github.com/mitmproxy/mitmproxy.git

mitmproxy与Fiddler、Charles对比

安装

在mac环境下安装命令如下:

代码语言:javascript复制
pip3 install mitmproxy

brew install mitmproxy

mitmproxy提供了三个命令,启动模式不同:

  • mitmproxy: 提供一个命令行界面。
  • mitmweb:提供一个浏览器界面。
  • mitmdump: 提供一个简单的终端输出。

运行命令

mitmproxy

命令行终端执行mitmproxy命令,会出现一个命令行页面,展示请求列表:请求、响应、详情三个部分,可以通过上下键切换tab。

mitmweb

命令行终端执行mitmweb命令,会自动打开浏览器,http://127.0.0.1:8081,手机或者PC连接代理地址:http://*:8080。

mitmweb页面和Charles的页面基本上功能差不多,可以进行查看数据包请求、请求重试、过滤等。

mitmdump

mitmdump是mitmprxoy的命令行接口,可以实时监控请求,可以对接Python对请求进行处理,有了它我们可以不用手动截获和分析HTTP请求和响应,只需要写好请求和响应的处理逻辑即可。

另外mitmdump可以实现数据的解析、存储等工作,这些过程都可以通过Python实现。

先准备一个py文件如scripts.py,修改请求和响应。

修改请求

修改请求头的agent字段值是MitmProxy。

代码语言:javascript复制
from mitmproxy import flow

def request(flow):
    flow.request.headers["agent"] = "MitmProxy"
    print(flow.request.headers["agent"])

修改响应

修改响应结果的状态码为418。

代码语言:javascript复制
from mitmproxy import http

def request(flow: http.HTTPFlow):
    if flow.request.path.endswith("/brew"):
         flow.response = http.HTTPResponse.make(
            418, b"I'm a teapot",
        )

编写完成脚本后,执行命令: mitmdump -s script.py

结语

本文介绍了mitmproxy代理工具的简单介绍,后续会介绍mitmproxy的高阶功能和在工作中的一些实践。

0 人点赞