mitmproxy + python 实现游戏协议测试
发布网友
发布时间:2022-11-18 15:39
我来回答
共1个回答
热心网友
时间:2024-11-07 13:40
本文侧重介绍如何使用 python 和 mitmproxy 实现拦截数据包、重发数据包,以及解析 protobuf 数据内容,对于相关依赖的安装不做介绍。
参考 https://testerhome.com/topics/29053 ,这篇文章讲的很清楚。
想直接使用的同学可以跳到第三部分。
mitmproxy 作为代理,可以获取客户端与服务端通信的数据,并且可以拦截、修改和自主发送数据。当配合其证书使用时,还可以解密 wss 连接中的 websocket 数据。
在 http 代理的过程中若发现 upgrade websocket 请求,则创建 WebSocketLayer 实例,并调用其 <u style="box-sizing: border-box; outline-style: none; --tw-border-opacity:1; border-color: rgb(229 231 235/var(--tw-border-opacity));">call</u> 方法。
WebSocketLayer 初始化时会创建用于此次 websocket 通信的编解码器。
WebSocketLayer 实例的 <u style="box-sizing: border-box; outline-style: none; --tw-border-opacity:1; border-color: rgb(229 231 235/var(--tw-border-opacity));">call</u> 方法负责处理后续 websocket 通信
WebSocketLayer 实例中处理 Message Event 的方法
TCP 数据处理触发条件
TCP 信息处理 RawTCPLayer 类源码
首先需要安装两个库:mitmproxy 和 mitmmp
对于想实现开头文中所提到的功能还需要实现客户端,以及对于 protobuf 协议的编解码,这里限于篇幅不再讨论,后续有机会再更新。
另外,之所以 mitmproxy 选择 socks5 模式,是因为 socks 协议支持代理除了 http、https 以外更多种类的协议,windows 开启 socks5 代理的工具:proxifer,android 开启 socks5 代理工具:postern。