一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于状态机的TCP模糊测试方法、设备和存储介质与流程

2022-10-13 01:46:39 来源:中国专利 TAG:

基于状态机的tcp模糊测试方法、设备和存储介质
技术领域
1.本发明涉及信息安全领域,尤其涉及一种基于状态机的tcp模糊测试方法、设备和存储介质。


背景技术:

2.协议漏洞挖掘是保证网络通信安全的重要手段。模糊测试是目前常用的协议漏洞挖掘方法,通过向协议实体输入变异的报文,监控协议实体的运行状况,分析协议实体发生的异常,从而发现潜在的安全漏洞。
3.针对tcp(transmission control protocol,传输控制协议)的模糊测试,当测试用例与协议实体状态不匹配时,测试用例会被直接丢弃,目前大部分tcp的模糊测试方法并没有充分考虑tcp每种状态下的有效测试用例,以及状态之间的转换测试用例,导致测试用例有效性低,测试覆盖度低。
4.有鉴于此,特提出本发明。


技术实现要素:

5.为了解决上述技术问题,本发明提供了一种基于状态机的tcp模糊测试方法、设备和存储介质,解决了tcp检测中测试用例有效性低、测试结果的覆盖度低的问题。
6.本发明实施例提供了一种基于状态机的tcp模糊测试方法,该方法包括:在针对tcp连接状态进行测试时,控制测试对象的tcp连接状态为预设的初始状态;基于第一状态转换用例控制所述测试对象的tcp连接状态从所述初始状态调整至与所述初始状态关联的下一状态,其中,所述第一状态转换用例与所述初始状态以及所述下一状态相关联;针对每个所述下一状态,在所述测试对象运行对应的第一测试用例,并使用对应的第一状态验证用例对所述测试对象运行完所述第一测试用例之后的状态进行验证,获得第一验证结果,所述第一测试用例以及所述第一状态验证用例与所述下一状态相关联;当所述第一验证结果为第一预设结果时,记录所述第一测试用例、所述第一状态验证用例以及所述测试对象运行完所述第一测试用例之后的状态。
7.本发明实施例提供了一种电子设备,所述电子设备包括:处理器和存储器;所述处理器通过调用所述存储器存储的程序或指令,用于执行任一实施例所述的基于状态机的tcp模糊测试方法的步骤。
8.本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行任一实施例所述的基于状态机的tcp模糊测试方法的步骤。
9.本发明实施例具有以下技术效果:
通过为每种tcp连接状态设置对应的测试用例以及状态验证用例,为不同状态之间设置状态转换用例,在针对tcp连接状态进行测试时,基于第一状态转换用例控制所述测试对象的tcp连接状态从所述初始状态调整至与所述初始状态关联的下一状态,针对每个所述下一状态,在所述测试对象运行对应的第一测试用例,并使用对应的第一状态验证用例对所述测试对象运行完所述第一测试用例之后的状态进行验证,获得第一验证结果,当所述第一验证结果为第一预设结果时,记录所述第一测试用例、所述第一状态验证用例以及所述测试对象运行完所述第一测试用例之后的状态,极大地提高了测试用例的有效性以及测试的覆盖度。
附图说明
10.为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
11.图1是本发明实施例提供的一种基于状态机的tcp模糊测试方法的流程图;图2是本发明实施例提供的一种服务端的tcp连接状态之间的迁移关系示意图;图3是本发明实施例提供的一种客户端的tcp连接状态之间的迁移关系示意图;图4是本发明实施例提供的一种针对tcp连接状态进行测试的流程示意图;图5是本发明实施例提供的一种针对tcp连接状态之间的转换进行测试的流程示意图;图6为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
12.为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行清楚、完整的描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施例,都属于本发明所保护的范围。
13.本发明实施例提供的基于状态机的tcp模糊测试方法可以由电子设备执行。图1是本发明实施例提供的一种基于状态机的tcp模糊测试方法的流程图。参见图1,该基于状态机的tcp模糊测试方法具体包括如下步骤:s110、在针对tcp连接状态进行测试时,控制测试对象的tcp连接状态为预设的初始状态。
14.其中,测试对象包括服务端和客户端。tcp连接的建立采用客户端-服务端模式,主动发起连接建立的应用进程为客户端,被动等待连接建立的应用进程为服务端。
15.建立tcp连接时的状态变迁为:建立连接之前服务端和客户端的tcp连接状态都为closed。服务端创建socket后开始监听,变为listen状态。客户端请求建立连接,向服务端发送syn报文,客户端的状态变为syn_sent。服务端收到客户端的报文后向客户端发送ack和syn报文,此时服务端的状态变为syn_rcvd。然后,客户端收到ack、syn,就向服务端发送ack,客户端状态变为
established,服务端收到客户端的ack后也变为established。此时,3次握手完成,服务端与客户端之间的tcp连接建立完成。
16.断开tcp连接时的状态变迁为:由于tcp连接是全双工的,断开连接会比建立连接复杂一些,首先客户端向服务端发送fin报文,请求断开连接,其状态变为fin_wait1。服务端收到fin后向客户端发生ack,服务端状态变为close_wait。客户端收到ack后就进入fin_wait2状态。此时连接已经断开一半。如果服务端还有数据要发送给客户端,就会继续发送,直到发完后发送fin报文,此时服务端进入last_ack状态。客户端收到服务端的fin后,马上发送ack给服务端,此时客户端进入time_wait状态,再等待一段时间后进入closed状态。服务端收到客户端的ack就进入closed状态。
17.其中,还有一个状态没有提及:closing状态。closing状态表示客户端发生了fin,但没有收到服务端的ack,却收到了服务端的fin。这种情况发生在服务端发送的ack丢包的时候,因为网络传输有时会有意外。
18.概括性的,服务端的tcp连接状态包括如下几种:s0:closed(没有任何连接状态)s1:listen(侦听来自远方的tcp端口的连接请求)s2:syn_rcvd(在收到和发送一个连接请求后等待对方对连接请求的确认)s3:established(代表一个打开的连接)s4:close_wait(等待从本地用户发来的连接中断请求)s5:last_ack(等待原来的发向远程tcp的连接中断请求的确认)s6:fin_wait_1(等待远程tcp连接中断请求,或先前的连接中断请求的确认)s7:fin_wait_2(从远程tcp等待连接中断请求)s8:closing(等待远程tcp对连接中断的确认)s9:time_wait(等待足够的时间以确保远程tcp接收到连接中断请求的确认)对应的,参考如图2所示的一种服务端的tcp连接状态之间的迁移关系示意图。基于图2构建每种状态(对应的状态编号s0至s9)的测试用例和状态验证用例,如表1所示,以及每两种状态之间的状态转换用例,如表2所示。
19.表1:s0-s9的测试用例及状态验证用例
表2:t0-t12状态转换用例客户端的tcp连接状态包括如下几种:s0:closed(没有任何连接状态)s1:syn_sent(在发送连接请求后等待匹配的连接请求)s2:established(代表一个打开的连接)s3:close_wait(等待从本地用户发来的连接中断请求)s4:last_ack(等待原来的发向远程tcp的连接中断请求的确认)s5:fin_wait_1(等待远程tcp连接中断请求,或先前的连接中断请求的确认)s6:fin_wait_2(从远程tcp等待连接中断请求)
s7:closing(等待远程tcp对连接中断的确认)s8:time_wait(等待足够的时间以确保远程tcp接收到连接中断请求的确认)对应的,参考如图3所示的一种客户端的tcp连接状态之间的迁移关系示意图。基于图3构建每种状态(状态编号s0至s8)的测试用例和状态验证用例,如表3所示,以及每两种状态之间的状态转换用例,如表4所示。
20.表3 s0-s8的测试用例及状态验证用例表4 t0-t11状态转换用例s120、基于第一状态转换用例控制所述测试对象的tcp连接状态从所述初始状态调整至与所述初始状态关联的下一状态,其中,所述第一状态转换用例与所述初始状态以及所述下一状态相关联。
21.参考表2所示,所述初始状态为编号s0代表的状态以及所述下一状态为编号s1代
表的状态时,对应的第一状态转换用例为{t0};所述初始状态为编号s1代表的状态以及所述下一状态为编号s2代表的状态时,对应的第一状态转换用例为{t1};所述初始状态为编号s2代表的状态以及所述下一状态为编号s3代表的状态时,对应的第一状态转换用例为{t2};即所述第一状态转换用例与所述初始状态以及所述下一状态相关联。
22.若通过在测试对象运行所述第一状态转换用例,可使测试对象的tcp连接状态从所述初始状态转换为所述下一状态,则表示所述第一状态转换用例是有效的,同时可说明测试对象符合测试预期。
23.概括性的,所述测试对象包括服务端;所述初始状态为closed时,与所述初始状态关联的下一状态为listen;所述初始状态为listen时,与所述初始状态关联的下一状态为syn_rcvd;所述初始状态为syn_rcvd时,与所述初始状态关联的下一状态为established;所述初始状态为established时,与所述初始状态关联的下一状态为close_wait或者fin_wait_1;所述初始状态为close_wait时,与所述初始状态关联的下一状态为last_ack;所述初始状态为last_ack时,与所述初始状态关联的下一状态为closed;所述初始状态为fin_wait_1时,与所述初始状态关联的下一状态为fin_wait_2、closing或者time_wait;所述初始状态为fin_wait_2时,与所述初始状态关联的下一状态为time_wait;所述初始状态为closing时,与所述初始状态关联的下一状态为time_wait;所述初始状态为time_wait时,与所述初始状态关联的下一状态为closed。
24.所述测试对象包括客户端;所述初始状态为closed时,与所述初始状态关联的下一状态为syn_sent;所述初始状态为syn_sent时,与所述初始状态关联的下一状态为established;所述初始状态为established时,与所述初始状态关联的下一状态为close_wait或者fin_wait_1;所述初始状态为close_wait时,与所述初始状态关联的下一状态为last_ack;所述初始状态为last_ack时,与所述初始状态关联的下一状态为closed;所述初始状态为fin_wait_1时,与所述初始状态关联的下一状态为fin_wait_2、closing或者time_wait;所述初始状态为fin_wait_2时,与所述初始状态关联的下一状态为time_wait;所述初始状态为closing时,与所述初始状态关联的下一状态为time_wait;所述初始状态为time_wait时,与所述初始状态关联的下一状态为closed。
25.s130、针对每个所述下一状态,在所述测试对象运行对应的第一测试用例,并使用对应的第一状态验证用例对所述测试对象运行完所述第一测试用例之后的状态进行验证,获得第一验证结果,所述第一测试用例以及所述第一状态验证用例与所述下一状态相关联。
26.参考如上表1所示,若所述下一状态为编号s0代表的状态,则对应的第一测试用例是{s0},对应的第一状态验证用例{a0};若所述下一状态为编号s1代表的状态,则对应的第一测试用例是{s1},对应的第一状态验证用例{a1};若所述下一状态为编号s2代表的状态,
则对应的第一测试用例是{s2},对应的第一状态验证用例{a2};即所述第一测试用例以及所述第一状态验证用例与所述下一状态相关联。
27.例如,初始状态是编号s0代表的状态,通过在测试对象运行第一状态转换用例{t0}使得测试对象的tcp连接状态从编号s0代表的状态变化为编号s1代表的状态,此时在测试对象运行第一测试用例{s1},并使用第一状态验证用例{a1}对所述测试对象运行完第一测试用例{s1}之后的状态进行验证,以确定测试对象是否正常。例如若测试对象运行完第一测试用例{s1}之后的状态仍为编号s1代表的状态,则表示测试对象是正常的,若测试对象运行完第一测试用例{s1}之后的状态不再是编号s1代表的状态,则表示测试对象是异常的。
28.s140、当所述第一验证结果为第一预设结果时,记录所述第一测试用例、所述第一状态验证用例以及所述测试对象运行完所述第一测试用例之后的状态。
29.具体的,当所述第一验证结果为表示测试对象异常的第一预设结果时,记录所述第一测试用例、所述第一状态验证用例以及所述测试对象运行完所述第一测试用例之后的状态,以作为对测试对象所存在的漏洞进行排查的参考。
30.在一些具体实施方式中,当测试对象为服务端时,在针对tcp连接状态进行测试时,设置循环变量i从0到9循环,将测试对象的tcp连接状态调整至编号s0代表的状态,利用对应的状态转换用例,将测试对象的tcp连接状态从编号s0代表的状态调整至编号si代表的状态,对于每个编号si(i=0,1,2,...,9)代表的状态,使用测试用例{si},每使用一个测试用例,使用对应的状态验证用例{ai}检查测试对象是否正常。当确定测试对象出现异常时,停止当前测试流程,并记录相应的测试用例{si}、状态验证用例{ai}和测试对象的当前状态以供排查。
31.当测试对象为客户端时,在针对tcp连接状态进行测试时,设置循环变量i从0到8循环,将测试对象的tcp连接状态调整至编号s0代表的状态,利用对应的状态转换用例,将测试对象的tcp连接状态从编号s0代表的状态调整至编号si代表的状态,对于每个编号si(i=0,1,2,...,8)代表的状态,使用测试用例{si},每使用一个测试用例,使用对应的状态验证用例{ai}检查测试对象是否正常。当确定测试对象出现异常时,停止当前测试流程,并记录相应的测试用例{si}、状态验证用例{ai}和测试对象的当前状态以供排查。
32.概括性的,参考如图4所示的一种针对tcp连接状态进行测试的流程示意图,具体包括410、测试对象的si状态测试。420、将测试对象调整至状态s0。430、使用状态转换用例ti将测试对象调整至状态si。440、使用状态测试用例进行测试。450、使用状态验证用例进行测试。460、记录测试对象的状态和测试结果。
33.进一步的,基于状态机的tcp模糊测试方法还包括:在针对tcp连接状态之间的转换进行测试时,控制测试对象的tcp连接状态为状态转换路径对应的前状态;针对每个所述状态转换路径,在所述测试对象运行第二状态转换用例,以控制所述测试对象的tcp连接状态从所述前状态调整至所述状态转换路径对应的后状态,并使用所述后状态对应的第二状态验证用例对所述测试对象运行完所述第二状态转换用例之后的状态进行验证,获得第二验证结果;当所述第二验证结果为第二预设结果时,记录所述第二状态转换用例、所述第二
状态验证用例以及所述测试对象运行完所述第二状态转换用例之后的状态;其中,所述初始状态以及与所述初始状态关联的下一状态组成一条状态转换路径,所述初始状态为状态转换路径对应的前状态,所述下一状态为状态转换路径对应的后状态。
34.在一些具体实施方式中,当测试对象为服务端时,在针对tcp连接状态之间的转换进行测试时,即ti状态转换测试(s
前-》s

),设置循环变量i从0到12循环,将测试对象调整至ti所需初始状态s

,对于每个状态转换路径ti(i=0,1,2,...,12)使用状态转换用例{ti},每使用一个状态转换用例,使用与s

状态对应的验证用例{a

}检查测试对象是否正常,当测试对象出现异常时,停止当前测试,记录相应的状态转换用例{ti}、状态验证用例{a

}和测试对象的当前状态以供排查。
35.当测试对象为客户端时,在针对tcp连接状态之间的转换进行测试时,即ti状态转换测试(s
前-》s

),设置循环变量i从0到11循环,将测试对象调整至ti所需初始状态s

,对于每个状态转换路径ti(i=0,1,2,...,11)使用状态转换用例{ti},每使用一个状态转换用例,使用与s

状态对应的验证用例{a

}检查测试对象是否正常,当测试对象出现异常时,停止当前测试,记录相应的状态转换用例{ti}、状态验证用例{a

}和测试对象的当前状态以供排查。
36.对应的,参考如图5所示的一种针对tcp连接状态之间的转换进行测试的流程示意图,具体包括510、测试对象的状态转换测试ti。520、将测试对象调整至状态s

。530、使用状态转换用例ti,将测试对象调整至状态s

。540、使用状态验证用例进行验证。550、记录测试对象的状态和测试结果。
37.本发明实施例的技术方案通过为每种tcp连接状态设置对应的测试用例以及状态验证用例,为不同状态之间设置状态转换用例,在针对tcp连接状态进行测试时,基于第一状态转换用例控制所述测试对象的tcp连接状态从所述初始状态调整至与所述初始状态关联的下一状态,针对每个所述下一状态,在所述测试对象运行对应的第一测试用例,并使用对应的第一状态验证用例对所述测试对象运行完所述第一测试用例之后的状态进行验证,获得第一验证结果,当所述第一验证结果为第一预设结果时,记录所述第一测试用例、所述第一状态验证用例以及所述测试对象运行完所述第一测试用例之后的状态,极大地提高了测试用例的有效性以及测试的覆盖度。
38.图6为本发明实施例提供的一种电子设备的结构示意图。如图6所示,电子设备400包括一个或多个处理器401和存储器402。
39.处理器401可以是中央处理单元(cpu)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备400中的其他组件以执行期望的功能。
40.存储器402可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(rom)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器401可以运行所述程序指令,以实现上文所说明的本发明任意实施例的基于状态机的tcp模糊测试方法以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储诸如初始外参、阈值等各种内容。
41.在一个示例中,电子设备400还可以包括:输入装置403和输出装置404,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。该输入装置403可以包括例如键盘、鼠标等等。该输出装置404可以向外部输出各种信息,包括预警提示信息、制动力度等。该输出装置404可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
42.当然,为了简化,图6中仅示出了该电子设备400中与本发明有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备400还可以包括任何其他适当的组件。
43.除了上述方法和设备以外,本发明的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本发明任意实施例所提供的基于状态机的tcp模糊测试方法的步骤。
44.所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本发明实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、c 等,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
45.此外,本发明的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本发明任意实施例所提供的基于状态机的tcp模糊测试方法的步骤。
46.所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
47.需要说明的是,本发明所用术语仅为了描述特定实施例,而非限制本技术范围。如本发明说明书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法或者设备中还存在另外的相同要素。
48.还需说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。除非另有明确的规定和限定,术语“安装”、“相连”、“连接”等应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两
个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
49.最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献