自动化工具 mitmproxy + python 实现游戏协议测试

mitmproxy + python 实现游戏协议测试 本文侧重介绍如何使用 python 和 mitmproxy 实现拦截数据包、重发数据包,以及解析 protobuf 数据内容 阅读详情

目录

前言:

一、游戏协议安全测试内容

二、实现原理

三、开启 mitmproxy 并加载 addon

1、编写 websocket 的 addon

2、编写 socket 的 addon

3、开启 mitmproxy 并完成处理函数

四、总结


前言:

Mitmproxy是一款开源的代理服务器,可以在 Wireshark 等嗅探工具中使用。它可以拦截网络请求,并对请求进行修改、重定向等操作。通过使用Mitmproxy和Python语言,可以实现游戏协议测试的自动化。

一、游戏协议安全测试内容

游戏协议安全测试是一种对游戏系统进行安全性评估的测试方法。它主要针对游戏协议的安全性进行测试,以确保游戏系统的安全性和稳定性。


二、实现原理

想直接使用的同学可以跳到第三部分。

mitmproxy 作为代理,可以获取客户端与服务端通信的数据,并且可以拦截、修改和自主发送数据。当配合其证书使用时,还可以解密 wss 连接中的 websocket 数据。

  • Websotcket 数据处理源码分析

在 http 代理的过程中若发现 upgrade websocket 请求,则创建 WebSocketLayer 实例,并调用其_call_方法。

# mitmproxy/proxy/protocol/http.py
"""以下为Httplayer的_process_flow方法的部分代码"""
if f.response.status_code == 101:
    # Handle a successful HTTP 101 Switching Protocols Response,
    # received after e.g. a WebSocket upgrade request.
    # Check for WebSocket handshake
    is_websocket = (
        websockets.check_handshake(f.request.headers) and
        websockets.check_handshake(f.response.headers)
    )
    if is_websocket and not self.config.options.websocket:
        self.log(
          "Client requested WebSocket connection, but the protocol is disabled.",
          "info"
        )

    if is_websocket and self.config.options.websocket:
        layer = WebSocketLayer(self, f)
    else:
        layer = self.ctx.next_layer(self)
    layer()

WebSocketLayer 初始化时会创建用于此次 websocket 通信的编解码器。

# mitmproxy/proxy/protocol/websocket.py
"""WebSocketLayer类的init方法,省略部分代码"""
def __init__(self, ctx, handshake_flow):
    super().__init__(ctx)
    self.handshake_flow = handshake_flow

    self.connections: dict[object, WSConnection] = {}

    client_extensions = []
    server_extensions = []
    # 判断交互数据是否使用deflate压缩
    if 'Sec-WebSocket-Extensions' in handshake_flow.response.headers:
        if PerMessageDeflate.name in handshake_flow.response.headers['Sec-WebSocket-Extensions']:
            client_extensions = [PerMessageDeflate()]
            server_extensions = [PerMessageDeflate()]
    # self.client_conn和self.server_conn继承自ctx,即原http的client和server,原理为父类的__getattr__(self, name)方法返回的是getattr(self.ctx, name)。WSConnection是一个websocket协议编解码器,实际不会发送任何网络IO,文档地址:https://python-hyper.org/projects/wsproto/en/latest/basic-usage.html
    # 负责和解码server收到信息和编码server发送的信息
    self.connections[self.client_conn] = WSConnection(ConnectionType.SERVER)
    # 负责和解码client收到信息和编码client发送的信息
    self.connections[self.server_conn] = WSConnection(ConnectionType.CLIENT)

    # 构造发送给Server的websocket的握手请求
    request = Request(extensions=client_extensions,host=handshake_flow.request.host,target=handshake_flow.request.path)
    # send()方法只会构造一个适用于对应conn的数据,并不会真正发送数据,recv_data()会将信息解码,需要通过next(conn.events())获取解码后数据
    # 按上所说,下面两行代码的操作是将握手请求按client编码后发送给server编码器,然后让server编码器解码
    data = self.connections[self.server_conn].send(request)
    self.connections[self.client_conn].receive_data(data)

    event = next(self.connections[self.client_conn].events())
    assert isinstance(event, events.Request)
    # 返回给客户端接受连接响应
    data = self.connections[self.client_conn].send(AcceptConnection(extensions=server_extensions))
    self.connections[self.server_conn].receive_data(data)
    assert isinstance(next(self.connections[self.server_conn].events()), events.AcceptConnection)

WebSocketLayer 实例的_call_方法负责处理后续 websocket 通信

# mitmproxy/proxy/protocol/websocket.py
"""WebSocketLayer类的call方法,省略部分代码"""
def __call__(self):
    self.flow = WebSocketFlow(self.client_conn, self.server_conn, self.handshake_flow)
    self.flow.metadata['websocket_handshake'] = self.handshake_flow.id
    self.handshake_flow.metadata['websocket_flow'] = self.flow.id
    # 调用addons中的websocket_start(self, flow)对flow进行处理
    self.channel.ask("websocket_start", self.flow)

    conns = [c.connecti
网络游戏协议测试(接口测试)的一些总结 网络游戏协议测试 阅读详情

相关推荐

游戏接口协议测试

随着对于质量保障和安全性等各方面的要求越来越高,接口测试在测试工作中所占的比重越来越大,不论是web项目、app还是游戏,接口测试都是不可或缺的一环。而在游戏业中,是否做好接口测试格外重要,往小了说影响是单个接口单系统,往大了说可能影响游戏的整体运营。此篇主要以游戏测试作为锚点,重点阐述在游测岗位怎么开展接口测试,协议方面的话以tcp为例,希望能对想了解的同学有一定的帮助。

gameRunner的博客 3136

Python+Mitmproxy实现接口自动化用例自动生成

如果需要更复杂的逻辑(如自动识别鉴权参数、动态关联接口),可以结合 OpenAPI 规范或人工配置规则扩展脚本。的方式,将捕获的 HTTP(S) 请求自动转换为测试用例(如。实现接口自动化用例自动生成,可以通过。

monk all the way 1434

【mitmproxy】python gui工具与mitmproxy的结合使用

mitmproxy在python代码中调用,并结合pyqt调用

zhipengit 3090

基于mitmproxy与Python的接口流量自动化记录与测试方案

接口测试是软件质量保障的关键环节,其核心在于对应用与服务器之间的数据交互进行捕获与验证。传统抓包工具依赖手动操作,效率低下且难以复用。通过中间人代理(MITM)技术,我们可以拦截并解密HTTPS流量,深入理解接口通信原理。结合Python的可编程能力,能够实现流量过滤、结构化存储与实时分析,为自动化测试与监控提供数据基础。这一技术组合尤其适用于持续集成、回归测试及线上问题回溯等场景。本文以mitmproxy和Python为核心,详细阐述了如何构建一个自动化接口流量记录系统,实现从被动抓包到主动数据采集的转变

weixin_34187862的博客 447

使用mitmproxy与Python脚本实现App流量自动化操控

在移动应用开发与测试中,网络流量拦截与操控是解决环境模拟、接口Mock和安全分析等问题的关键技术。其核心原理是通过中间人代理技术,在客户端与服务器之间建立透明代理,实现对HTTP/HTTPS请求与响应的程序化处理。这一技术方案的价值在于将传统手动、临时的调试操作转变为可编程、可复用的自动化流程,极大提升了开发、测试和逆向分析的效率。在应用场景上,它广泛适用于自动化测试中的请求头注入、后端接口Mock、安全漏洞扫描以及网络协议分析等领域。本文聚焦于使用mitmproxy这一高性能代理工具,结合Python脚本

weixin_30530339的博客 425

Python Mitmproxy实战指南:打造高效流量拦截与分析工具

本文是一份Python Mitmproxy实战指南,详细介绍了如何利用这款强大的HTTPS代理工具进行流量拦截与分析。文章从环境搭建、证书配置入手,逐步深入核心功能,包括通过Python API实现流量实时修改、数据持久化以及自动化测试用例生成,并探讨了在性能监控、数据脱敏等真实场景下的进阶应用,帮助开发者打造高效的网络流量处理工具。

weixin_29065791的博客 1064

uiautomator2+mitmproxy+weditor+Python3抖音数据抓取

一、uiautomator2 UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于Accessibility服务。功能很强,可以对第三方App进行测试,获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:1. 测试脚本只能使用Java语言 2. 测试脚本要打包成jar或者apk包上传到设备上才能运行。 我们希望测试逻辑能够用Python编写,能够在电脑上运行的时候就控制手机。这里要非常感谢 Xiaocong He (@xiaocong),他将这个

wywinstonwy的专栏 1万+

游戏协议测试

玩家挖掘游戏漏洞,造成严重线上事故,比如刷奖励 测试通过工具绕过客户端直接向服务端发送请求,挖掘服务端代码漏洞,也叫游戏协议安全测试

漫步云端的博客 2507

FPGA实战:用DDR3和乒乓操作解决视频帧撕裂问题(附Verilog代码)

本文详细介绍了如何利用DDR3内存和乒乓操作架构解决FPGA视频处理中的帧撕裂问题。通过多帧缓存原理、AXI接口配置和自适应乒乓操作设计,有效隔离读写操作,确保视频流稳定传输。文章包含Verilog代码实现和性能优化技巧,适用于工业相机、医疗影像等高速视频处理场景。

m2n3b4v5c6的博客 282

PAM4信号测试实战:从眼图分析到误码率测量的技术演进

在高速数字系统设计中,信号完整性测试是确保数据传输可靠性的核心环节。其基本原理在于通过时域和频域分析,精确评估信号在传输过程中的质量衰减与失真。随着数据速率向56Gbps及以上演进,传统的NRZ编码面临带宽瓶颈,而PAM4调制技术通过在每个符号周期内承载更多比特信息,成为提升信道效率的关键路径。这项技术的工程价值在于,它允许在相同带宽下实现翻倍的数据吞吐量,这对于数据中心互联、PCIe 6.0及800G以太网等高速接口至关重要。然而,PAM4信号电平间距更小,对噪声和抖动极为敏感,导致其原始误码率显著升高,

weixin_42522817的博客 647

Docker “docker login“ 失败? 登录阿里云镜像仓库仓库 unauthorized: authentication required

文章目录听说你 login fail?来,让我们解决一下!登录,撒花 听说你 login fail? 美滋滋的在服务器上安装完成Docker应用,开始配置阿里云镜像加速?然后被阿里云官方文档蹂躏?别急别急,让我来拯救你。 我们先来看看 阿里云官方文档 Docker镜像基本操作: 好家伙,emmm… 上来直接就Login Succeeded,这不简直so easy?我们也来照着操作操作: docker@default-online:~$ docker login registry.cn-hangzhou.a

zhuzicc的博客 1万+

U盘安装单系统ubuntu10.04之全过程&拔掉U盘后系统无法启动

借助U盘把电脑装成ubuntu单系统之过程记录,以及遇到拔掉U盘后系统无法启动问题,电脑就显示: Non-System disk or disk error, replace and strike any key when ready

CXHPLY的专栏 8673

YOLOv5改进有效涨点目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

Hello,各位读者们好本专栏自开设两个月以来已经更新改进教程60余篇其中包含C2f、主干、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新。同时本人一些讲解视频和包含我所有创新的YOLOv8文档并不能在CSDN上传(所有的创新点都经过我的测试是可用的,得到该文件之后大家可以随意组合使用),所以会建立群的形式在内上传我的文件和视频我也会在群内不定期和大家交流回答大家问题,同时定期会更新一些文章的创新点(经过我融合测试后的,先到先得)。本专栏持续更新网络上的所有前沿文章。

Snu77的博客 3万+

【yolo】YOLOv8模型导出完全指南:从PT到ONNX及其他格式的完整实践

摘要:本文全面介绍了YOLOv8模型从PT格式导出为ONNX等部署格式的完整流程与最佳实践。重点解析了关键参数(如format、imgsz、simplify)的作用机制,特别强调输入尺寸imgsz会自动继承训练尺寸的特性,并提供了ONNX、TensorRT等格式的典型导出配置方案。文章还总结了常见问题解决办法,推荐使用simplify优化模型性能,同时分享了通过C#实现模型重命名的实用技巧。最后指出"训练决定能力,导出定义接口"的核心原则,帮助开发者高效完成模型部署转换。

songhuangong123的博客 1912

运放实现阶梯波发生器-总结报告

实验目的: 学习、理解、掌握方波电路、限幅电路积分累加电路、反馈电路 课程条件: 电脑仿真软件Multisim 原理框图和实验思路: 方波电路通过微分电路可以形成正负脉冲,在通过限幅电路后变为单脉冲,最后在积分电路中形成阶梯波。微分电路存在的意义就是为了防止方波频率过大,从而导致在经过限幅电路的方波,在一个周期内将电容的电充满,这样就不会产生阶梯波。如果方波的频率比较小,可以近似认为是正负脉冲,这样就可以跳过微分电路。 ...............

0 1万+

Python实现FFT、小波变换和数据压缩

小波变换是一种分析信号的方法,可以分解信号成为多个尺度和频率的分量,从而更好地理解和处理信号。在Python中,我们可以使用pywt库来实现小波变换。在Python中,我们可以使用numpy库中的fft模块来实现FFT。数据压缩是一种将数据表示成更紧凑的形式的方法,可以减少存储空间和传输带宽。综上所述,Python提供了很多方便的工具来实现各种信号处理和数据压缩的方法。本文将介绍Python中如何实现傅里叶变换(FFT)、小波变换以及如何使用它们来进行数据压缩。Python实现FFT、小波变换和数据压缩。

学习使你进步。 687

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: 一个测试老兵眼里的测试用例
下一篇: 接口自动化全量字段校验
星河绛橘色的日落
博客等级 码龄4年 29粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值