一种服务器与客户端的测试方法及系统
技术领域
本发明涉及一种服务器与客户端的测试方法及系统,属于游戏技术领域。
背景技术
目前在游戏的测试领域上,为了查看TCP的游戏服务器与客户端的交互,在市场上,通常是2种处理方案:
1、使用wireshark抓包工具来完成此项工作,但是这样只能读取二进制数据,没办法让用户直接了解协议原型与具体数据的具体数据;
2、通过自己写一个代理工具,在本机运行,然后修改游戏客户端让其先连接到代理工具上,再由代理工具进行中转到真实的游戏服务器上,然后在代理工具上进行协议的二进制数据解析,打印,供用户阅读,但是这样每个用户都需要自己编写代理工具,和为了成功运行代理工具,还需要在机器上安装、配置一系列的运行语言库环境等,对于一个只是想快速阅读的使用者来说,过于烦琐。
发明内容
为解决上述问题,本发明的目的在于提供一种服务器与客户端的测试方法及系统,客户端向服务器发送创建代理请求;服务器根据接收到的代理请求,通过生成对应文件并向指定机器传输该文件,创建代理服务器;服务器将代理服务器信息发送给客户端,其中代理服务器信息包括代理服务器运行机器的IP地址以及该机器未被占用的端口号;客户端根据代理服务器信息,修改通信目标,与代理服务器建立通信连接;客户端通过代理服务器与服务器建立双向通讯连接,代理服务器截取二者的通讯包进行解析,并将解析数据发送给用户进行后续的分析。
本发明解决其问题所采用的技术方案一方面是:一种服务器与客户端的测试方法,其特征在于,包括:S100、客户端向服务器发送创建代理请求;S200、服务器根据接收到的代理请求,通过生成对应文件并向指定机器传输该文件,创建代理服务器;S300、服务器将代理服务器信息发送给客户端,其中代理服务器信息包括代理服务器运行机器的IP地址以及该机器未被占用的端口号;S400、客户端根据代理服务器信息,修改通信目标,与代理服务器建立通信连接;S500、客户端通过代理服务器与服务器建立双向通讯连接,代理服务器截取二者的通讯包进行解析,并将解析数据发送给用户进行后续的分析。
进一步的,所述S100包括:S101、客户端向服务器获取解码模块,根据解码模块开放对应的解码接口;S102、根据获取的解码模块生成解码文件,并与创建代理请求一同发送给服务器。
进一步的,所述S200包括:S201、服务器根据接收到的创建代理请求,在预定义的机器列表里,抽取一台机器;S201、将编码文件导入到抽取的机器中,并以docker加载预定义镜像;S301、启动加载后的预定义镜像,得到代理服务器。
进一步的,所述S300包括:S301、代理服务器检查本机端口占用情况,选取一个未被占用的端口作为与客户端通信的通信端口;S302、获取代理服务器运行机器的IP地址,将通信端口号与IP地址返回给客户端。
进一步的,所述S400包括:S401、客户端根据服务器返回的通信端口号与IP地址,更改客户端的通信设置;S402、修改客户端的连接IP和端口为服务器返回的通信端口号与IP地址,并启动客户端,进行常规的客户端操作。
进一步的,所述S500包括:S501、客户端将产生的通讯包发送给代理服务器,代理服务器将通讯包转发给服务器,并将通讯包通过解码接口解析,得到二进制数据,并以明文方式返回给用户。
本发明解决其问题所采用的技术方案另一方面是:一种服务器与客户端的测试系统,其特征在于,包括:客户端,用于与服务器建立通信连接并执行客户端的常规操作服务;服务器,用于与客户端建立通信连接并提供对应服务,同时调用代理服务器模块生成代理服务器;代理服务器模块,用于创建代理服务器;通信模块,用于执行客户端与服务器、客户端与代理服务器以及代理服务器与客户端的通信连接;检测模块,用于获取代理服务器信息,其中代理服务器信息包括代理服务器运行机器的IP地址以及该机器未被占用的端口号;解码模块,用于截取客户端与代理服务器的通讯包进行解析,并将解析数据发送给用户进行后续的分析。
进一步的,所述服务器包括:接口管理模块,用于根据解码模块开放对应的解码接口;生成模块,用于根据获取的解码模块生成解码文件,并与创建代理请求一同发送给服务器;列表模块,用于记录可用作代理服务器的机器信息。
进一步的,所述代理服务器模块包括:导入单元,用于编码文件导入到抽取的机器中;镜像加载单元,用于根据编码文件加载预定义镜像;启动单元,用于启动加载后的预定义镜像,完成代理服务器的创建。
进一步的,所述客户端包括:检查模块,用于检查本机端口占用情况,选取一个未被占用的端口作为与客户端通信的通信端口;通信设置模块,用于修改客户端的连接IP和端口为服务器返回的通信端口号与IP地址。
本发明的有益效果是:对于使用者来说,完全脱离使用门槛,随时随地可用,不再需要开发者的帮助安装一系列的工具环境等,对于开发接入者来讲,不再需要关心网络库是如何实现中转的,只需要上传按项目规则实现的打包和解包方法即可,极大的降低使用门槛、成本,加快了项目的测试进度。
附图说明
图1所示为本发明优选实施例的方法流程示意图;
图2所示为本发明优选实施例的系统结构示意图。
具体实施方式
以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。
需要说明的是,如无特殊说明,当某一特征被称为“固定”、“连接”在另一个特征,它可以直接固定、连接在另一个特征上,也可以间接地固定、连接在另一个特征上。此外,本公开中所使用的上、下、左、右等描述仅仅是相对于附图中本公开各组成部分的相互位置关系来说的。在本公开中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。此外,除非另有定义,本文所使用的所有的技术和科学术语与本技术领域的技术人员通常理解的含义相同。本文说明书中所使用的术语只是为了描述具体的实施例,而不是为了限制本发明。本文所使用的术语“和/或”包括一个或多个相关的所列项目的任意的组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种元件,但这些元件不应限于这些术语。这些术语仅用来将同一类型的元件彼此区分开。例如,在不脱离本公开范围的情况下,第一元件也可以被称为第二元件,类似地,第二元件也可以被称为第一元件。本文所提供的任何以及所有实例或示例性语言(“例如”、“如”等)的使用仅意图更好地说明本发明的实施例,并且除非另外要求,否则不会对本发明的范围施加限制。
参照图1所示为本发明优选实施例的方法流程示意图,
包括:S100、客户端向服务器发送创建代理请求;S200、服务器根据接收到的代理请求,通过生成对应文件并向指定机器传输该文件,创建代理服务器;S300、服务器将代理服务器信息发送给客户端,其中代理服务器信息包括代理服务器运行机器的IP地址以及该机器未被占用的端口号;S400、客户端根据代理服务器信息,修改通信目标,与代理服务器建立通信连接;S500、客户端通过代理服务器与服务器建立双向通讯连接,代理服务器截取二者的通讯包进行解析,并将解析数据发送给用户进行后续的分析。
进一步的,所述S100包括:S101、客户端向服务器获取解码模块,根据解码模块开放对应的解码接口;S102、根据获取的解码模块生成解码文件,并与创建代理请求一同发送给服务器。
S200包括:S201、服务器根据接收到的创建代理请求,在预定义的机器列表里,抽取一台机器;S201、将编码文件导入到抽取的机器中,并以docker加载预定义镜像;S301、启动加载后的预定义镜像,得到代理服务器。
S300包括:S301、代理服务器检查本机端口占用情况,选取一个未被占用的端口作为与客户端通信的通信端口;S302、获取代理服务器运行机器的IP地址,将通信端口号与IP地址返回给客户端。
S400包括:S401、客户端根据服务器返回的通信端口号与IP地址,更改客户端的通信设置;S402、修改客户端的连接IP和端口为服务器返回的通信端口号与IP地址,并启动客户端,进行常规的客户端操作。
S500包括:S501、客户端将产生的通讯包发送给代理服务器,代理服务器将通讯包转发给服务器,并将通讯包通过解码接口解析,得到二进制数据,并以明文方式返回给用户。
参照图2所示为本发明优选实施例的系统结构示意图,
包括:客户端,用于与服务器建立通信连接并执行客户端的常规操作服务;服务器,用于与客户端建立通信连接并提供对应服务,同时调用代理服务器模块生成代理服务器;代理服务器模块,用于创建代理服务器;通信模块,用于执行客户端与服务器、客户端与代理服务器以及代理服务器与客户端的通信连接;检测模块,用于获取代理服务器信息,其中代理服务器信息包括代理服务器运行机器的IP地址以及该机器未被占用的端口号;解码模块,用于截取客户端与代理服务器的通讯包进行解析,并将解析数据发送给用户进行后续的分析。
服务器包括:接口管理模块,用于根据解码模块开放对应的解码接口;生成模块,用于根据获取的解码模块生成解码文件,并与创建代理请求一同发送给服务器;列表模块,用于记录可用作代理服务器的机器信息。
代理服务器模块包括:导入单元,用于编码文件导入到抽取的机器中;镜像加载单元,用于根据编码文件加载预定义镜像;启动单元,用于启动加载后的预定义镜像,完成代理服务器的创建。
述客户端包括:检查模块,用于检查本机端口占用情况,选取一个未被占用的端口作为与客户端通信的通信端口;通信设置模块,用于修改客户端的连接IP和端口为服务器返回的通信端口号与IP地址。
技术流程如下:
第一步:客户端通过从服务端那里下载decoder.py模板,实现decoder接口,然后上传decoder.py文件,向服务端发起一个创建代理的请求(提交按钮)。
第二步:服务端收到请求后,会在预定义的机器列表里,随机抽取一台机器,传入decoder.py文件,然后以docker加载预定义镜像,(为了保证同一台机器下,各个代理工具环境独立);随机获取一个本机末使用的端口,启动加载镜像后,通用的代理程序则自动启动完毕,最后把抽取到的机器的ip和随机获取到末使用的端口返回给客户端。
第三步:这时,用户通过在手机的游戏客户端本身自带的设置游戏服务器IP和端口功能或者以挂包外、VPN等方式修改游戏客户端的连接IP和端口,修改来第二步返回的IP和随机端口,然后进入游戏,进行正常的功能操作,如角色移动,打开背包等。
第四步:因为用户修改后游戏服务器IP和端口,所以客户端不再直接的与原游戏服务端进行通信,而是客户端先通过代理游戏服务器通信,代理服务器接收到客户端的通讯包后,转发到真正的游戏服务器上(同理,代理服务器收到游戏服务器的通讯包,返转发到游戏客户端上),所以在进行正常游戏功能操作时,游戏客户端的所有数据包都会发送到服务端以docker运行的代理工具,代理工具通过decoder接口即可解码出所有的二进制数据,以明文json方式返回给用户(网页)。
第五步:用户通过操作游戏客户端,查看网页的实时信息刷新,就可以了解到每个功能的协议原型与数据。
第六步:最后,项目组或开发通过分享实现好的decoder.py文件,让有需求的用户可以很方便的查看到游戏协议的详细信息,及为了decoder解码的安全性考虑,用户可预先注册项目(上传decoder.py文件),供其它用户仅需选择具体项目代理,便可使用,抛开了decoder.py是如何对二进制数据解成json明文数据的风险。
举一个具体实施说明,
QQ飞车游戏的测试开发人员,我想快速的查看QQ飞车在我的功能操作(如打开背包,请求购买物品,进行QQ飞车匹配游戏等)的游戏交互协议具体是什么?
第一步:由于我是QQ飞车游戏的测试开发,所以我可以从项目组那里很方便的获取到游戏协议的解密算法,否则就需要自己通过一些破解技术来破解游戏协议的算法。
第二步:然后通过下载decoder.py模板,填充对项目游戏协议的解密算法,具体示例可参考decoder.py里的示例,然后通过网页创建QQ飞车游戏,提交decoder.py文件,在网页里选择QQ飞车游戏,点击启动监控,这时会在网页里看到代理IP及端口。
第三步:游戏客户端通过VPN或挂包外方式,修改游戏连接IP和端口,修改成二步里网页看到的代理IP和端口,然后点击进入游戏,进行打开背包、请求购物品、进行QQ飞车匹配等一系列功能操作。
第四步:这个时候,通过网页可以看到在你(用户)操作的过程中,游戏的详细交互协议及具体的每条协议的参数数据。
第五步:当然,你也可以通过分享网页链接的方式,供其它测试人员使用,这样使用测试人员通过操作功能,即可以看到客户端与服务器的协议交互详细数据,又能省掉暴露协议解密算法的安全性问题。
应当认识到,本发明的实施例可以由计算机硬件、硬件和软件的组合、或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。所述方法可以使用标准编程技术-包括配置有计算机程序的非暂时性计算机可读存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作——根据在具体实施例中描述的方法和附图。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。
此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)、由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。
进一步,所述方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台、或者与带电粒子工具或其它成像装置通信等等。本发明的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、RAM、ROM等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的发明包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本发明所述的方法和技术编程时,本发明还包括计算机本身。
计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本发明优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。