首页 > 其他分享 >Mitmproxy 常规功能介绍

Mitmproxy 常规功能介绍

时间:2023-07-05 17:34:35浏览次数:50  
标签:示例 flow 接口 介绍 Mitmproxy 过滤 常规 igetcool mitmdump

背景

mitmproxy是一个开源的中间人代理工具,用于拦截、修改和观察HTTP/HTTPS流量,并支持扩展功能。它包含三个功能模块:mitmproxy、mitmweb和mitmdump,每个模块提供不同的界面和功能。

  • mitmproxy:提供命令行界面,使用命令行进行操作和监控。
  • mitmweb:提供浏览器界面,通过Web界面进行操作和监控。
  • mitmdump:提供简单的终端输出,适用于自动化和脚本化的使用场景。

使用mitmproxy可以通过mitmdump模块编写扩展脚本,从而提高工作效率。下面是一些可以使用mitmdump解决的问题示例:

  1. 模拟接口返回数据以验证客户端是否出现UI异常或兼容性问题。
  2. 模拟接口返回数据延迟,验证客户端对接口加载状态的处理。
  3. 录制接口数据信息,用于回归测试接口功能是否正常。

mitmdump

mitmdump是mitmproxy的命令行版本,具有丰富的命令行参数,可以根据需求进行配置。可以使用以下命令查看参数选项:

mitmdump --help

录制与回放

mitmdump提供了录制和回放功能,可以通过规则将请求数据录制到二进制文件中,并使用回放功能对接口进行数据回放。

录制

使用以下命令进行录制,并将请求数据保存到文件中:

mitmdump -w filename

过滤

可以使用过滤规则对录制的数据进行过滤,只录制符合规则的数据:

mitmdump -nr filename -w filename2 "~s keyword"

上述命令将从filename中读取数据,过滤出包含关键字"keyword"的响应数据,并将过滤结果保存到filename2中。

回放

使用以下命令对录制的数据文件进行回放:

mitmdump -nC filename

参数说明

  • -s "script.py --bar":使用双引号命令执行脚本并传递参数。
  • -n:不启动代理,仅回放数据。
  • -r:读取文件内容。
  • -w:写入文件。
  • ~s:过滤响应数据。
  • ~q:过滤请求数据。

示例

下面是一些示例用法:

  1. 使用录制功能,本地开启8999端口代理并过滤响应数据"igetget",将结果保存到本地文件igetget.txt中:
mitmdump -p 8999 -w igetget.txt "~s igetget"
  1. 连接手机到代理端口8999,并操作手机应用程序。

  2. 录制结束后,注意igetget.txt是一个二进制文件,无法直接查看详细的接口信息。

  3. 使用回放功能,回放igetcool.txt文件中的接口数据:

mitmdump -nC igetcool.txt

在回放过程中,您将看到发送请求的信息与第一次录制的数据相同。

  1. 过滤录制的请求,仅保存包含"igetcool"关键字的数据:
mitmdump -nr igetcool.txt -w igetcool-test.txt "~s igetcool"

mitmdump 功能扩展

介绍

常用的 mitmdump 扩展功能,包括修改接口响应状态码、修改接口响应结果、加载本地数据和模拟接口响应延迟。

前提条件

首先,在本地创建 script.py 文件。

修改接口响应状态码

以下示例代码演示了如何使用 mitmdump 修改接口的响应状态码。

def response(flow: http.HTTPFlow):
    if "igetcool-gateway.igetcool.com" in str(flow.request.pretty_url):
        flow.response.status_code = 404

在上述示例中,我们在 response 函数中判断请求的 URL 是否满足特定条件,如果满足,则将响应状态码设置为 404。您可以根据需要修改过滤条件和状态码值。

修改接口响应结果

以下示例代码演示了如何使用 mitmdump 修改接口的响应结果。

import json

def response(flow: http.HTTPFlow):
    if "https://igetcool-gateway.igetcool.com/app-api-user-server/white/app/head/config.json" in str(flow.request.pretty_url):
        data = json.loads(flow.response.content)
        data['data']['isShow'] = 2
        flow.response.set_text(json.dumps(data))

在上述示例代码中,我们通过添加过滤条件来确定要修改响应结果的特定接口。然后,我们加载原始响应数据并进行修改。在示例中,我们修改了数据字段 data['data']['isShow'] 的值为 2。最后,我们将修改后的数据重新设置为响应结果,以确保返回给客户端的数据已被修改。

加载本地数据(Map Local)

以下示例代码演示了如何使用 mitmdump 将指定的网络请求重定向到本地文件,以实现加载本地数据的目的。

import json

def response(flow: http.HTTPFlow):
    if "igetcool" in str(flow.request.pretty_url):
        with open("/Users/xinxi/Documents/zhihu/mitmproxyRecode/igetget.json", 'r') as f:
            resp_info = json.loads(f.read())
        flow.response.set_text(json.dumps(resp_info))

在上述示例代码中,我们使用一个过滤条件来匹配需要加载本地数据的网络请求。例如,在过滤条件中,我们检查请求 URL 中是否包含 "igetcool" 字符串。然后,我们打开本地文件并将文件中的内容加载为 JSON 格式的数据。最后,我们将本地数据作为响应结果返回。

请根据您自己的实际情况,修改文件路径以及过滤条件。

模拟接口响应延迟的方法

在 mitmdump 中没有直接设置接口延迟的方法,但我们可以使用 time.sleep() 函数来实现该效果。以下示例代码可以模拟接口响应延迟。

import time
import random
from mitmproxy import http

def response(flow: http.HTTPFlow):
    if "igetcool" in str(flow.request.pretty_url):
        random_time = random.randint(100, 1000)
        time.sleep(random_time / 1000)

在上述示例代码中,我们添加了一个过滤条件,仅对特定请求进行延迟模拟。如果请求的 URL 中包含 "igetcool" 字符串,我们会生成一个介于 100 到 1000 之间的随机整数,表示延迟的毫秒数。然后,利用 time.sleep() 函数将程序暂停指定的毫秒数,模拟延迟。

标签:示例,flow,接口,介绍,Mitmproxy,过滤,常规,igetcool,mitmdump
From: https://www.cnblogs.com/shukeshu/p/17529344.html

相关文章

  • Jenkins ant介绍(学习笔记五)
    简介: 转载自:https://www.cnblogs.com/pixy/p/4792887.htmlAnt的由来(序)JamesDuncanDavidson当年用纯Java开发Tomcat的时候,不仅想让它跨平台运行,还想要在不同的操作系统上都能够进行开发和构建。转载自:https://www.cnblogs.com/pixy/p/4792887.htmlAnt的由来(序)JamesD......
  • Hadoop版本下载和介绍
    1下载地址1.1官网:官网下载1.2旧版本下载(官方的archive地址):旧版本下载1.3清华大学开源软件镜像站下载(速度较快,只有新版本):清华大学开源软件镜像站2common\core\client的区别2.1Hadoop-commonHadoop-Common是指支持Hadoop模块的常用实用程序和库.2.2Hadoop-core......
  • 介绍6款热门的SpringCloud微服务开源项目,总有适合你的!
    今天介绍六款比较热门的SpringCloud微服务项目,感兴趣的可以clone下来研究一下,相信对你学习微服务架构很有帮助。一、Cloud-Platform介绍Cloud-Platform是国内首个基于SpringCloud微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关AP......
  • 算法竞赛中C++ vector的常规操作
    算法竞赛中C++vector的常规操作对vector的理解vector官方将其翻译为向量,但实际上是变长的动态数组,其可以存放各种类型的对象。vector定义语法大致格式:vector<类型>数组名在初始情况下,vector的大小是0,也就是空的数组。下面都以int型举例。vector<int>v;/......
  • Java集合之Disruptor 介绍
    目录1Disruptor1.1简介1.1.1定义1.1.2Java中线程安全队列1.1.3Disruptor核心概念1.2操作1.2.1坐标依赖1.2.2创建事件1.2.3创建事件工厂1.2.4创建处理事件Handler--消费者1.2.5初始化Disruptor1.2.5.1静态类1.2.5.2配置类1.2.5.3Disruptor构造函数讲解1.2.6发布......
  • 技术分享| 融合通讯的架构介绍
    在融合通讯中,我们经常听到如下一些术语:MCU服务,SFU架构,MESH架构,星形网络等等。很多客户听到这些数据都是一脸雾水,经常说我们就是要一个可以把多种设备拉到同一个会议中,怎么搞这么复杂。今天我们就来聊聊这些术语都从哪来的,分别都应用在什么地方,我们anyRTC又是如何做的。一.Mesh架......
  • Apache HTTP Server 与 Tomcat 的三种连接方式介绍
    首先我们先介绍一下为什么要让Apache与Tomcat之间进行连接。事实上Tomcat本身已经提供了HTTP服务,该服务默认的端口是8080,装好tomcat后通过8080端口可以直接使用Tomcat所运行的应用程序,你也可以将该端口改为80。既然Tomcat本身已经可以提供这样的服务,我们为什么还......
  • superset(二)基本使用详细示例以及superset权限控制介绍
    Superset系列文章superset(一)详细部署步骤(python3.7.15、windows11)及验证异常处理superset(二)基本使用详细示例以及superset权限控制介绍(文章目录)本文简单的介绍了superset的基本使用步骤的示例,以及superset的权限控制。本文部分数据来源于互联网。本文分为2个部分,即通......
  • Java线程池基础介绍
    一、线程池的优点1、线程池能够复用已经创建了的线程来执行任务,从而降低了频繁创建和销毁线程所带来的资源消耗;2、任务创建完成时,不必等待线程的创建,能够立即执行,提高了任务响应的速度。 二、创建线程池的七大核心参数1、corePoorSize核心线程数线......
  • jsjiami.v6加密混淆逆向分析介绍
    在互联网的不断发展的今天,网站的安全性越来越受到重视。JS混淆加密技术是一种常用的保护网站安全的手段。jsjiami.v6是一款常用的JS混淆加密工具,下面我们来详细了解一下。首先,我们来看一下一个使用jsjiami.v6进行混淆加密的案例代码:eval(function(p,a,c,k,e,r){e=function(c){re......