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

简介: 游戏客户端通常是与服务器直接进行通信,如何通过工具来进行协议的修改和创建呢?第一种就是直接在客户端代码里面增加一些类似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和网络层包捕获做介绍,其实如果仅满足需求的话,采用镜像服务器就可以了。如果读者有更好的实现技术欢迎分享


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

相关文章
|
9天前
|
前端开发 JavaScript 测试技术
前端测试技术中,如何提高集成测试的效率?
前端测试技术中,如何提高集成测试的效率?
|
9天前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
8天前
|
监控 网络协议 Java
一些适合性能测试脚本编写和维护的工具
一些适合性能测试脚本编写和维护的工具
|
8天前
|
安全 网络协议 关系型数据库
最好用的17个渗透测试工具
渗透测试是安全人员为防止恶意黑客利用系统漏洞而进行的操作。本文介绍了17款业内常用的渗透测试工具,涵盖网络发现、无线评估、Web应用测试、SQL注入等多个领域,包括Nmap、Aircrack-ng、Burp Suite、OWASP ZAP等,既有免费开源工具,也有付费专业软件,适用于不同需求的安全专家。
13 2
|
9天前
|
数据采集 前端开发 安全
前端测试技术
前端测试是确保前端应用程序质量和性能的重要环节,涵盖了多种技术和方法
|
16天前
|
前端开发 JavaScript 测试技术
前端小白逆袭之路:如何快速掌握前端测试技术,确保代码质量无忧!
【10月更文挑战第30天】前端开发技术迭代迅速,新手如何快速掌握前端测试以确保代码质量?本文将介绍前端测试的基础知识,包括单元测试、集成测试和端到端测试,以及常用的测试工具如Jest、Mocha、Cypress等。通过实践和学习,你也能成为前端测试高手。
35 4
|
19天前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
20 1
|
7天前
|
安全 测试技术 持续交付
云计算时代的软件开发与测试:高效、灵活、可扩展
云计算时代的软件开发与测试:高效、灵活、可扩展
|
10天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
42 3
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
63 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)