游戏协议测试二:协议工具开发技术介绍

简介: 游戏客户端通常是与服务器直接进行通信,如何通过工具来进行协议的修改和创建呢?第一种就是直接在客户端代码里面增加一些类似GM指令的测试接口,来达到对每个接口的测试目的。第二种就是从外部对双方的通讯网络下手,通过第三方将协议截获修改后再发送给对方,从而达到协议测试的目的如图1,本篇文章就是针对第二种方式来做介绍。

游戏协议测试二:协议工具开发技术介绍


系列目录


游戏协议测试一:协议测试介绍


一、前言


   上一期对协议测试作了简单介绍,在了解如何做协议测试之后,就需要有对应的工具来支持测试。本期就协议测试工具开发进行简单介绍,希望对读者有帮助。



二、协议工具功能介绍


   游戏客户端通常是与服务器直接进行通信,如何通过工具来进行协议的修改和创建呢?第一种就是直接在客户端代码里面增加一些类似GM指令的测试接口,来达到对每个接口的测试目的。第二种就是从外部对双方的通讯网络下手,通过第三方将协议截获修改后再发送给对方,从而达到协议测试的目的如图1,本篇文章就是针对第二种方式来做介绍。


640 (5).png

图1


   在开发工具前需要先了解工具需要实现哪些功能,从而更好的设计出使用方便,通用的工具来。下面主要列举了协议工具需要提供的5个功能:


       1. 协议修改。通过将捕获的协议内容进行部分修改,再发送出去测试接收方的响应行为。例如捕获领取任务A的奖励协议,修改为领取未完成的任务B的奖励,达到测试服务器是否有做检查判断。


       2. 协议重发。 直接将捕获的协议再发送出去,例如捕获领取奖励的协议,重复发送看是否可以再次获得奖励。


       3. 修改顺序。将捕获的协议打乱顺序后发送出去,测试接收方的响应行为。这种主要是测试有依赖顺序的业务,确保业务流程的正确性。


       4. 协议解析。 工具捕获的协议是二进制流数据,然后转换成十六进制显示。但是如果能够知道每条协议的具体内容,就可以方便测试人员使用。


       5. 其他接口。 其他因不同项目所需的接口提供,以支持不同使用场景下的功能需求。


   针对上面的功能需求进行初步总结,首先是需要能够捕获通信中的协议,其次是能够修改捕获的协议,最后就是需要对捕获的协议提供扩展接口方便其他需求。其实这里面还有一个隐含需求就是需要能够伪造新的协议,且必须能够验证通过。


三、协议工具技术开发


640 (6).png

图2


   图2所展示的是我目前已经开发使用过的技术,从上到下难度逐步加深,可以适用不同的场景和需求,下面就来简单的介绍下这几个的原理实现。


   1) 镜像服务器


       在协议工具内部创建一个服务器,并绑定到某个端口上。然后修改客户端连接的服务器地址为工具的地址,连接到工具后,再由工具连接服务器进行协议转发,类似服务器架构中的网关服务器。这样就达到了截获双方协议的目的,而且可以很方便的发送协议。


       缺点:需要修改客户端连接服务器的地址,这个一般不会造成什么问题,除非无法修改客户端。


   2) HOOK技术


       我们知道客户端与服务器进行通讯利用的是socket,在Windows下可以使用钩子去修改send,recv,sendto,recvfrom函数接口地址,从而达到协议数据先被协议工具截获(这里暂不说其他系统)。


       缺点:采用钩子编写难点较高,另一个问题就是如果客户端做了反注入这些防范后,工具实现就更难。


   3) 系统网络层


       通过网络层捕获原始网络包,以及伪造网络包可以很方便的实现协议工具,目前的技术有TDI、NDIS,WFP等等。我是在发现WinDivert之后,开始尝试使用的。这是一个非常好用的抓包网络框架,而且支持win7,win10系统。由于直接捕获的是网络层的协议包,因此适用范围很大。而且掌握了这项技术后,是可以搞大事的哦。


       难点:抓取的是网络原始包,需要更高层面的理解网络包的结构,UDP协议包可以很好的修改和创建包发送,但是TCP就很麻烦,主要是需要维护Seq序列号/Ack确认号。具体可以百度一篇叫做《基于TCP协议的网络数据实时篡改》的文章,我仅能实现功能,原理讲解还是看专业的文章更明白点。


四、后记


   这篇文章也只是对这些技术进行了简单的介绍,后续有时间的时候会专门对HOOK和网络层包捕获做介绍,其实如果仅满足需求的话,采用镜像服务器就可以了。如果读者有更好的实现技术欢迎分享


欢迎微信搜索"游戏测试开发"关注一起沟通交流。

相关文章
|
12天前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
138 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
19天前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
65 6
|
17天前
|
消息中间件 运维 应用服务中间件
“企业微信iPad协议”凌晨断链:当最后一台测试机决定集体沉默
凌晨1:12,三连报警突响:“实例心跳超时”“消息队列堆积”“老板提刀赶来”。问题源于企业微信iPad协议迁移私有化后,因新旧CA根证书不兼容,触发TLS握手失败,导致全量会话中断。苹果严苛的证书校验机制将请求判定为中间人攻击,直接断连。排查抓包定位:客户端内置证书Pin仅认旧根。解决方案简单却关键:F5重导旧根证书,Nginx配置`ssl_trusted_certificate`指向旧链并reload。2:58,系统恢复,演练数据零丢失。教训深刻:文档未提CA白名单,真实逻辑藏于客户端二进制。部署前务必比对证书指纹,否则警报先于用户消息抵达。
130 1
|
19天前
|
人工智能 Java 测试技术
单元测试覆盖率的自动控制技术
Jacoco是Java程序覆盖率工具,可以在pom.xml通过配置来自动控制程序的覆盖率
45 5
|
2月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
514 10
|
25天前
|
存储 测试技术 API
数据驱动开发软件测试脚本
今天刚提交了我的新作《带着ChatGPT玩转软件开发》给出版社,在写作期间跟着ChatGPT学到许多新知识。下面分享数据驱动开发软件测试脚本。
29 0
|
2月前
|
人工智能 资源调度 jenkins
精准化回归测试:大厂实践与技术落地解析
在高频迭代时代,全量回归测试成本高、效率低,常导致关键 bug 漏测。精准化测试通过代码变更影响分析,智能筛选高价值用例,显著提升测试效率与缺陷捕获率,实现降本增效。已被阿里、京东、腾讯等大厂成功落地,成为质量保障的新趋势。
|
2月前
|
搜索推荐 Devops 测试技术
避免无效回归!基于MCP协议的精准测试影响分析实践
本文揭示传统测试的"孤岛困境",提出MCP(Model Context Protocol)测试新范式,通过模型抽象业务、上下文感知环境和协议规范协作,实现从机械执行到智能测试的转变。剖析MCP如何颠覆测试流程,展示典型应用场景,并提供团队落地实践路径,助力测试工程师把握质量效率革命的新机遇。
|
4月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
751 23
|
9月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。