我的编程空间,编程开发者的网络收藏夹
学习永远不晚

移动测试开发Mitmproxy用于测试抓包神器详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

移动测试开发Mitmproxy用于测试抓包神器详解

1.前言

在移动商业广告的测试的工作中,经常会需要对广告请求进行捕获和分析,常使用的有两个测试工具:fiddler,Charles,这两个工具都可以对广告请求进行抓包,断点调试,请求替换,构造请求等,但是这两个工具都有一定的局限性。首先,fiddler 只能在 windows 上运行,charles 虽然可以在 mac,windows 上运行,但是收费。其次,在商业广告请求中经常会对接口协议进行加密处理,使用 fiddler 和 charles 就不容易解决了。最后,商业广告测试中需要对广告请求协议的各种字段进行校验,但业务涉及到多字段修改的情况下,再利用 fiddler 和 charles 逐一校验判断显然很浪费时间。经过调研和实际应用,我们发现 mitmproxy 这个工具非常灵活,它是基于 Python 开发的开源工具,提供了 Python API,可以通过载入自定义 python 脚本轻松控制请求和响应。这是其它工具所不能做到的,通过自定义脚本进行二次开发,能够解决商业广告测试过程中所遇到的问题。

2.Mitmproxy 简介

MITM(Man In The Middle Attack)中间人攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为 “中间人”。mitmproxy 就是用于 MITM 的 proxy,用于中间人攻击的代理。首先会向正常的代理一样转发请求,保障服务端与客户端的通信,其次,会适时的查、记录其截获的数据,或篡改数据,引发服务端或客户端特定的行为。

mitmproxy 有两个关联组件。一个是 mitmdump,它是 mitmproxy 的命令行接口,利用它我们可以对接 Python 脚本,用 Python 实现监听后的处理逻辑。另一个是 mitmweb,它是一个 Web 程序,通过它我们可以清楚观察 mitmproxy 捕获的请求。

3.Mitmproxy 工作原理

mitmproxy 有 5 种代理模式,主要包含:正向代理,透明代理,反向代理,上游代理,socks 代理,在实际使用中经常用到正向代理,mitmproxy 作为正向代理是一个位于客户端和原始服务器 (origin server) 之间的服务器,为了从原始服务器取得内容,客户端向 mitmproxy 代理发送一个请求并指定目标 (原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

我们以 HTTPS 请求为例介绍一下 mitmproxy 作为正向代理抓包的过程:

①. 客户端连接到 mitmproxy,并发出 HTTP 连接请求。

②. mitmproxy 响应建立了一个 200 的连接

③. 客户端认为它正在与远程服务器通信,并启动 SSL 连接。使用 SNI 来指定它连接到的主机名。

④. mitmproxy 使用客户端指定的 SNI 主机名与服务端建立一个 SSL/TLS 连接。

⑤. 服务器使用匹配的证书进行响应,该证书包含生成拦截证书所需的 CN 和 SAN 值。

⑥. mitmproxy 生成拦截证书,并继续跟客户端 SSL/TLS 握手。

⑦. 客户端通过已建立的 SSL/TLS 连接发送请求。

⑧. mitmproxy 通过步骤 ④ 中启动的 SSL/TLS 连接将请求传递到服务器。

4.实践应用

解决多字段校验效率问题:

商业广告测试中有大量的重复性工作在打点校验上,为了节省测试时间和解决易漏测的问题,我们可以利用 mitmproxy 二次开发,自定义业务相关的校验规则,然后通过捕获请求对协议中的各个字段进行自动化校验,这样既可以提高测试效率,又避免了漏测问题。

以所测广告业务为例,首先建立 addons.py 文件,addons 是个列表,每个元素是一个类实例,这些类,称为一个个 addon,这些类有若干方法,这些方法实现了某些 mitmproxy 提供的事件,mitmproxy 会在某个事件发生时调用对应的方法。如下图所示为 addons 文件内容,其中 SemiNativeCSJAd 则为 addon。

SemiNativeCSJAd 类中实现了 mitmproxy 提供的 request 和 response 事件,当触发该事件的时候,就会调用对应的方法。

其中将所有类型的广告打点中的公共字段校验抽取成公共方法 semiNativeCSJfieldCheck 调用。如下图所示:

通过以上方式,简单且有效的解决了多个字段校验问题。

解决商业广告中加解密问题:

商业广告有不同的渲染形态,例如:激励视频类,模板类,在实际测试过程中,需要测试人员 mock 不同的广告进行测试,不仅如此,还会遇到需要对广告进行加解密的情况,那么具体应该怎么解决呢?以所测的广告业务为例需要做以下几个步骤:

①. mitmproxy 拦截客户端发起的请求并获取某字段

②. 利用 RSA 算法根据请求的某字段解密获取到秘钥

③. 利用 AES 算法和 ② 步骤的秘钥,对本地广告内容进行加密

④. mitmproxy 将加密的广告返回给客户端

如下图是实现的代码,此 mockMaxFile 函数还可以根据入参传入不同广告文件即可实现不同广告的 mock。

5.总结

以上就是 mitmproxy 的简单介绍和在商业广告测试中的应用,相比传统的抓包工具,mitmproxy 可以通过载入自定义 python 脚本轻松实现各种定制化需求,提升测试效率和质量,不愧为 “抓包神器”。

更多关于移动测试Mitmproxy抓包的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

移动测试开发Mitmproxy用于测试抓包神器详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

移动测试开发Mitmproxy工具怎么使用

本文小编为大家详细介绍“移动测试开发Mitmproxy工具怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“移动测试开发Mitmproxy工具怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.前言在
2023-07-02

android模拟器开发和测试nfc应用实例详解

从Android2.3开始支持NFC。不过NFC应用只能在Android手机(或平板电脑)上测试和开发,而且Android手机还必须有NFC芯 片。而且如果测试NFC传输文件时至少需要两部支持NFC的手机。当然,如果测试读写NFC标签,还需
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录