在接口测试中,会用到抓包工具或者代理工具,常用代理工具包括charles、 burpsuite、 fiddler、mitmproxy等,ssh -D参数 可实现socks5代理。网络嗅探工具可以使用tcpdump 和 wireshark。

Charles工具可以实现mock测试(参考 接口测试代理工具charles mock测试),如果要自动化实现这些功能,mitmproxy工具是个不错的选择。

本文主要内容包括简要介绍mitmproxy代理工具、mitmproxy安装、SSL 证书安装以及实现和charles一样的功能:rewrite和map local。

mitmproxy简介

mitm(man-in-the-middle) 即中间人攻击,mitmproxy是主要基于Python平台开发的代理工具,功能强大,可满足高度定制化需求。它是一个用于跟踪流量的中间代理工具,具有截获、篡改、重放等功能。

插件是mitmproxy非常强大的一部分,提供了一系列API,mitmproxy扩展:https://docs.mitmproxy.org/stable/addons-overview/

插件例子:https://docs.mitmproxy.org/stable/addons-examples/

mitmproxy支持5种代理模式:

  1. 正向代理(regular proxy)
  2. 反向代理(reverse proxy)
  3. 上行代理(upstream proxy)
  4. 透明代理(transparent proxy)
  5. socks5代理(socks Proxy)

本文主要介绍mitmproxy的正向代理使用过程

mitmproxy套装包括3个工具:

  • mitmproxy:命令行交互工具
  • mitmdump:命令行非交互工具,提供类似 tcpdump的功能
  • mitmweb:基于Web的用户界面

mitmproxy的代理流程:

图片来源:https://docs.mitmproxy.org/stable/concepts-howmitmproxyworks/

mitmproxy安装

mitmproxy官网:https://mitmproxy.org/

mitmproxy安装方法参考:https://docs.mitmproxy.org/stable/overview-installation/

macOS:

brew install mitmproxy

Linux和Windows:在官网mitmproxy.org下载安装

检查是否安装成功

mitmdump --version

C:\Users\10287>mitmdump --version
Mitmproxy: 5.1.1 binary
Python: 3.7.6
OpenSSL: OpenSSL 1.1.1f 31 Mar 2020
Platform: Windows-10-10.0.18362-SP0
C:\Users\10287>

python包安装:

注意python版本 >= 3.6

python3 -m pip install --user pipx
python3 -m pipx ensurepath
pipx install mitmproxy

docker 安装方法:

https://hub.docker.com/r/mitmproxy/mitmproxy/

docker pull mitmproxy/mitmproxy

SSL 证书安装

和charles代理工具一样,如果要抓取HTTPs报文,客户端(APP 或浏览器)需要安装SSL证书。

  1. 启动服务
C:\Users\10287>mitmdump -p 8999
Proxy server listening at http://*:8999
  1. 浏览器设置代理

    使用SwitchyOmega插件添加mitmproxy代理,代理服务器地址设置为主机IP地址,代理端口8999

    SwitchyOmega插件下载地址:https://github.com/FelisCatus/SwitchyOmega/releases

  2. 浏览器输入 mitm.it

    选择对应系统的证书安装

  3. 手机证书安装方法同charles(地址为mitm.it)

    参考 charles SSL证书安装

手机浏览器访问百度,命令行窗口显示https报文解析成功

mitmproxy录制回放

录制回放参考:https://docs.mitmproxy.org/stable/tute-clientreplay/

  1. 开始录制,保存到文件baidusearch中
D:\ProgramWorkspace\TestingDemo\test_mitmproxy>mitmdump -p 8999 -w baidusearch
  1. 手机浏览baidu,进行百度搜索
  2. 停止录制:Ctrl+c 停止
  3. 回放

    cmd命令行输入如下命令:
mitmweb -p 8999

打开生成的baidusearch文档,可以查看报文交互过程

Rewrite

要求:和charles一样,修改招商银行名称及股票价格。见接口测试代理工具charles mock测试

  1. 启动 mitmproxy 服务
C:\Users\10287>mitmdump -p 8999
Proxy server listening at http://*:8999
  1. 手机(或者模拟器)安装ssl证书,设置代理

    charles SSL证书安装

  2. 抓取雪球APP行情页面数据包

C:\Users\10287>mitmweb -p 8999
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:8999

开启抓包后,刷新雪球APP行情页面,找到行情页面报文,查看URL特征,用于下一步写脚本来找到它。

  1. 写一个脚本处理响应数据:

test_mitmproxy_response.py

#!/usr/bin/python3
#-*-coding:utf-8-*-
import json def response(flow):
"""
1. 找到行情页面相关URL
2. 修改第一条记录(招商银行)的名称和股票价格
3. 将数据写入响应数据中
"""
if "quote.json" in flow.request.pretty_url and "x=" in flow.request.pretty_url:
data = json.loads(flow.response.content)
data['data']['items'][0]['quote']['name'] = data['data']['items'][0]['quote']['name'] + "test"
data['data']['items'][0]['quote']['current'] = '50'
flow.response.text = json.dumps(data)
  1. 运行脚本
D:\ProgramWorkspace\TestingDemo\test_mitmproxy>mitmdump -p 8999 -s test_mitmproxy_response.py

  1. 刷新雪球APP行情页面

修改成功

Map Local

要求和接口测试代理工具charles mock测试一样,我们直接使用数据倍增后的数据stock2.json,如果要实现自动化,可以使用python脚本对响应数据进行处理。

股票数据可以在上一节Rewrite 第3步中直接保存,或者通过charles获取数据。

参考官方文档提供的mitmproxy插件http-reply-from-proxy.py:https://docs.mitmproxy.org/stable/addons-examples/#http-reply-from-proxy

  1. 编写响应数据处理脚本test_request.py
#!/usr/bin/python3
#-*-coding:utf-8-*- """Send a reply from the proxy without sending any data to the remote server."""
from mitmproxy import http def request(flow: http.HTTPFlow) -> None:
if "quote.json" in flow.request.pretty_url and "x=" in flow.request.pretty_url:
with open("D:/ProgramWorkspace/TestingDemo/test_mitmproxy/stock2.json",encoding="utf-8") as f:
flow.response = http.HTTPResponse.make(
200, # (optional) status code
f.read(), # (optional) content
{"Content-Type": "application/json"} # (optional) headers
)
  1. 开启服务,运行脚本
D:\ProgramWorkspace\TestingDemo\test_mitmproxy>mitmdump -p 8999 -s test_request.py
Loading script test_request.py
Proxy server listening at http://*:8999
  1. 刷新雪球APP行情页面

修改成功

开启服务后,可以直接修改stock2.json内容,不需要重新拉起。

--THE END--

文章标题:mitmproxy 代理工具介绍:rewrite和map local实现

本文作者:hiyo

本文链接:https://www.cnblogs.com/hiyong/p/14288354.html

欢迎关注公众号:「测试开发小记」及时接收最新技术文章!

mitmproxy 代理工具介绍:rewrite和map local实现的更多相关文章

  1. charles技能之修改请求参数/返回数据(map Local、Rewrite、Breakpoints)

    之前一直用postman调接口比较多,但有时候想要去修改APP的页面展示,造数据又会比较麻烦,此时可以用以下三种方法修改请求参数或修改响应: map Local(本地映射).Breakpoints(打 ...

  2. 代理工具--mitmproxy

    #代理工具 mitmproxy 指令:mitmproxy -b ip -p port(代理ip设置为:ip,端口设置为:port) 拦截request: 输入字母“i”(代表Intercept fil ...

  3. Charles学习(四)之使用Map local代理本地静态资源以及配置移动端代理在真机上调试iOS和Android客户端

    前言 问题一:我们在App内嵌H5开发的过程中,肯定会遇到一个问题就是我不想在chrome的控制台中调试也不想在模拟器中调试,我想要在真机上调试,那么如何解决这个问题呢? 问题二:我们期待调试时达到的 ...

  4. Charles学习(三)之使用Map local代理本地静态资源以及配置网页代理在Mac模拟器调试iOS客户端

    前言 问题一:我们在App内嵌H5开发的过程中,肯定会遇到一个问题就是我不想在chrome的控制台中调试,我想要在手机上调试,那么如何解决这个问题呢? 问题二:我们期待调试时达到的效果就是和Charl ...

  5. Charles学习(二)之使用Map local代理本地静态资源以及配置网页代理在Mac浏览器上调试移动端

    前言 我们在开发的过程肯定是一边写代码,一边查看自己的代码写的是否存在问题,那么问题来了,有两种情况 情况一:我们可以本地起服务,那么我们就可以在本地检查自己的代码,查看运行结果 情况二:本地无法起服 ...

  6. mitmproxy 代理介绍及入门

    转载请注明出处 https://www.cnblogs.com/majianming/p/11823669.html mitmproxy 是一个python 写成的代理工具,可以代理https.htt ...

  7. 代理工具Charles使用

    代理工具Charles使用 分类: MAC 2014-03-27 20:41 7810人阅读 评论(2) 收藏 举报 手机开发 一.跟踪HTTPS 1.下载官方的证书ssl.zip证书,解压成*.cr ...

  8. Redis集群维护、运营的相关命令与工具介绍

    Redis集群的搭建.维护.运营的相关命令与工具介绍 一.概述 此教程主要介绍redis集群的搭建(Linux),集群命令的使用,redis-trib.rb工具的使用,此工具是ruby语言写的,用于集 ...

  9. kali下一些代理工具的简单描述

    前言 最近几天了解了kali中一些代理工具的基本使用,做一个小小的总结,kali操作系统的官网为 www.kali.org,感兴趣的可以去官网下载镜像,如何安装这里就不在讲解了,百度有很多教程.新手这 ...

随机推荐

  1. 如何在 Blazor WebAssembly中 使用 功能开关

    微软Azure 团队开发的 功能管理 (Feature Management) 包 Microsoft.FeatureManagement可用于实现 功能开关,可以通过 功能开关 特性动态的改变应用程 ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-国际化,本地化,多语言应用

    开篇 早年写过一篇多语言的应用 :   本地化(多语言)   讲述了如何创建多语言的资源文件,并利用资源文件来获得页面和请求的语言属性 本次补充这篇文章,的原因是在实际项目中,有多种需要多语言的情况 ...

  3. 【9k字+】第二篇:进阶:掌握 Redis 的一些进阶操作(Linux环境)

    九 Redis 常用配置文件详解 能够合理的查看,以及理解修改配置文件,能帮助我们更好的使用 Redis,下面按照 Redis 配置文件的顺序依次往下讲 1k 和 1kb,1m 和 1mb .1g 和 ...

  4. Soul API 网关源码解析 03

    目标 使用 soul 代理 dubbo 服务 dubbo 服务如何注册到网关的? dubbo 插件是如何工作的? 理清 http --> 网关--> dubbo provider 整条链路 ...

  5. MySQL之谓词下推

    MySQL之谓词下推 什么是谓词 在SQL中,谓词就是返回boolean值即true或者false的函数,或是隐式转换为boolean的函数.SQL中的谓词主要有 LKIE.BETWEEN.IS NU ...

  6. 提取一个int类型数最右侧的1

    提取一个int类型数最右侧的1 算法描述 把一个int类型的数,提取出最右侧的1来,例如: 6 对应的二进制位 0000 0110,那么取出来的应该是0000 0010 算法思路 对原数0000 01 ...

  7. Java并发组件一之CountDownLatch

    使用场景: 一个或N个线程,等待其它线程完成某项操作之后才能继续往下执行.CountDownLatch描述的是,一个或N个线程等待其他线程的关系. 使用方法: 设CountDownLatch个数:Co ...

  8. 在这个应用中,我使用了 MQ 来处理异步流程、Redis 缓存热点数据、MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ、MySQL 持久化的数据也会存在于一个分布式文件系统中,他们之间的调用也是需要用 RPC 来完成数据交互的。

    在这个应用中,我使用了 MQ 来处理异步流程.Redis 缓存热点数据.MySQL 持久化数据,还有就是在系统中调用另外一个业务系统的接口,对我的应用来说这些都是属于 RPC 调用,而 MQ.MySQ ...

  9. 从输入URL到页面展示,这中间都发生了什么?

    前言 在浏览器里,从用户输入URL到页面展示,这中间都发生了什么?这是一道非常经典的面试题.这里边涉及很多知识点,比如:网络协议.页面渲染.操作系统等.所以这是很好很全面的考察一个前端的知识.下面我将 ...

  10. LOJ10096掠夺计划

    题目传送门:https://loj.ac/problem/10096 ----------------------------------------------------------------- ...