发明内容
本发明实施例提供一种报文匹配方法、状态机编译方法及设备,用以通过同一引擎实现对报文的字段解析与识别,减少逻辑资源的占用,提高集成化的灵活性。
第一方面提供一种报文匹配方法,应用于报文匹配设备,所述方法包括:
接收报文,所述报文包括多个协议字段,所述多个协议字段包括至少一个位置敏感字段和至少一个关键字敏感字段;
根据状态机对所述报文的各个协议字段进行匹配,输出与所述协议字段对应的字段解析结果和与所述协议字段对应的字段识别结果中的至少一个匹配结果;
其中,所述状态机包括:关键字子状态机、至少一个位置子状态机、以及至少一个域值子状态机;
所述至少一个位置子状态机与所述至少一个位置敏感字段一一对应,所述至少一个位置子状态机之间按照所述至少一个位置敏感字段相互之间的位置顺序进行跳转,且最后一个所述位置子状态机跳转到所述关键字子状态机;每个位置子状态机用于供所述报文匹配设备对所述位置子状态机对应的位置敏感字段进行字段解析和字段识别中的至少一个,并对应地输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果,或者跳过所述位置子状态机对应的位置敏感字段的匹配,进入下一个位置子状态机;
所述关键字子状态机用于供所述报文匹配设备对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,则跳转到与所述特定的关键字对应的域值子状态机,并输出字段解析结果和字段识别结果作为所述匹配结果;
所述域值子状态机用于供所述报文匹配设备查找所述特定的关键字的域值是否有用户感兴趣的某种模式,如果有,则输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果。
结合第一方面,在第一方面的第一种可能的实现方式中,其中一个或多个位置子状态机包括第一解析结果输出节点和第一识别结果输出节点中的至少一个,以及一个或多个第一匹配节点,所述一个或多个匹配节点用于判断输入的协议字段是否是满足“在报文中的特定位置有第一特定字符串时”条件的协议字段,如果是,则跳转到所述第一解析结果输出节点以及所述第一识别结果输出节点中的至少一个;
或者,
其中一个或多个位置子状态机不包括所述第一解析结果输出节点和所述第一识别结果输出节点,也不包括一个或多个第一匹配节点,直接跳过本位置子状态机。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述关键字子状态机包括第二解析结果输出节点和第二识别结果输出节点,以及一个或多个第二匹配节点,所述一个或多个第二匹配节点用于对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,跳转到所述第二解析结果输出节点和所述第二识别结果输出节点。
结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述域值子状态机包括第三解析结果输出节点和第三识别结果输出节点中的至少一个,以及一个或多个第三匹配节点,所述一个或多个第三匹配节点用于匹配所述特定的关键字的域值中是否有第二特定字符串,如果有,则跳转至所述第三解析结果输出节点和所述第三识别结果输出节点中的至少一个。
第二方面提供一种状态机编译方法,包括:
接收规则文件,所述规则文件中记载有匹配规则;
获取所述规则文件中的各个匹配规则;
将各个匹配规则分成至少一个位置敏感规则以及至少一个关键字敏感规则,所述关键字敏感规则中包括关键字到域值特定字符串集合的映射关系;
从所述至少一个关键字敏感规则获取与各个关键字分别对应的至少一个特定字符串集合;
将每个位置敏感规则编译成一个位置子状态机,并连接各个位置子状态机;
将所述至少一个关键字敏感规则编译成一个关键字子状态机;
将所述至少一个特定字符串集合分别编译至对应的至少一个域值子状态机;
其中,所述至少一个位置子状态机与所述至少一个位置敏感字段一一对应,所述至少一个位置子状态机之间按照所述至少一个位置敏感字段相互之间的位置顺序进行跳转,且最后一个所述位置子状态机跳转到所述关键字子状态机;每个位置子状态机用于供报文匹配设备对所述位置子状态机对应的位置敏感字段进行字段解析和字段识别中的至少一个,并对应地输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果,或者跳过所述位置子状态机对应的位置敏感字段的匹配,进入下一个位置子状态机;
所述关键字子状态机用于供所述报文匹配设备对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,则跳转到与所述特定的关键字对应的域值子状态机,并输出字段解析结果和字段识别结果作为所述匹配结果;
所述域值子状态机用于供所述报文匹配设备查找所述特定的关键字的域值是否有用户感兴趣的某种模式,如果有,则输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果。
结合第二方面,在第二方面的第一种可能的实现方式中,其中一个或多个位置子状态机包括第一解析结果输出节点和第一识别结果输出节点中的至少一个,以及一个或多个第一匹配节点,所述一个或多个匹配节点用于判断输入的协议字段是否是满足“在报文中的特定位置有第一特定字符串时”条件的协议字段,如果是,则跳转到所述第一解析结果输出节点以及所述第一识别结果输出节点中的至少一个;
或者,
其中一个或多个位置子状态机不包括所述第一解析结果输出节点和所述第一识别结果输出节点,也不包括一个或多个第一匹配节点,直接跳过本位置子状态机。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述关键字子状态机包括第二解析结果输出节点和第二识别结果输出节点,以及一个或多个第二匹配节点,所述一个或多个第二匹配节点用于对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,跳转到第二解析结果输出节点和第二识别结果输出节点。
结合第二方面或第二方面的第一种可能的实现方式或第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述域值子状态机包括第三解析结果输出节点和第三识别结果输出节点中的至少一个,以及一个或多个第三匹配节点,所述一个或多个第三匹配节点用于匹配所述特定的关键字的域值中是否有第二特定字符串,如果有,则跳转至所述第三解析结果输出节点和所述第三识别结果输出节点中的至少一个。
第三方面提供一种报文匹配设备,包括:
接收模块,用于接收报文,所述报文包括多个协议字段,所述多个协议字段包括至少一个位置敏感字段和至少一个关键字敏感字段;
匹配模块,用于根据状态机对所述接收模块接收的所述报文的各个协议字段进行匹配,输出与所述协议字段对应的字段解析结果和与所述协议字段对应的字段识别结果中的至少一个匹配结果;
其中,所述状态机包括:关键字子状态机、至少一个位置子状态机、以及至少一个域值子状态机;
所述至少一个位置子状态机与所述至少一个位置敏感字段一一对应,所述至少一个位置子状态机之间按照所述至少一个位置敏感字段相互之间的位置顺序进行跳转,且最后一个所述位置子状态机跳转到所述关键字子状态机;每个位置子状态机用于供所述报文匹配设备对所述位置子状态机对应的位置敏感字段进行字段解析和字段识别中的至少一个,并对应地输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果,或者跳过所述位置子状态机对应的位置敏感字段的匹配,进入下一个位置子状态机;
所述关键字子状态机用于供所述报文匹配设备对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,则跳转到与所述特定的关键字对应的域值子状态机,并输出字段解析结果和字段识别结果作为所述匹配结果;
所述域值子状态机用于供所述报文匹配设备查找所述特定的关键字的域值是否有用户感兴趣的某种模式,如果有,则输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果。
结合第三方面,在第三方面的第一种可能的实现方式中,其中一个或多个位置子状态机包括第一解析结果输出节点和第一识别结果输出节点中的至少一个,以及一个或多个第一匹配节点,所述一个或多个匹配节点用于判断输入的协议字段是否是满足“在报文中的特定位置有第一特定字符串时”条件的协议字段,如果是,则跳转到所述第一解析结果输出节点以及所述第一识别结果输出节点中的至少一个;
或者,
其中一个或多个位置子状态机不包括所述第一解析结果输出节点和所述第一识别结果输出节点,也不包括一个或多个第一匹配节点,直接跳过本位置子状态机。
结合第三方面或第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,所述关键字子状态机包括第二解析结果输出节点和第二识别结果输出节点,以及一个或多个第二匹配节点,所述一个或多个第二匹配节点用于对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,跳转到所述第二解析结果输出节点和所述第二识别结果输出节点。
结合第三方面或第三方面的第一种可能的实现方式或第三方面的第二种可能的实现方式,在第三方面的第三种可能的实现方式中,所述域值子状态机包括第三解析结果输出节点和第三识别结果输出节点中的至少一个,以及一个或多个第三匹配节点,所述一个或多个第三匹配节点用于匹配所述特定的关键字的域值中是否有第二特定字符串,如果有,则跳转至所述第三解析结果输出节点和所述第三识别结果输出节点中的至少一个。
第四方面提供一种状态机编译设备,包括:
接收模块,用于接收规则文件,所述规则文件中记载有匹配规则;
获取模块,用于获取所述接收模块接收的所述规则文件中的各个匹配规则;
划分模块,用于将所述获取模块获取的各个匹配规则分成至少一个位置敏感规则以及至少一个关键字敏感规则,所述关键字敏感规则中包括关键字到域值特定字符串集合的映射关系;
所述获取模块还用于,从所述划分模块分出的所述至少一个关键字敏感规则获取与各个关键字分别对应的至少一个特定字符串集合;
编译模块,用于将每个位置敏感规则编译成一个位置子状态机,连接各个位置子状态机,将所述至少一个关键字敏感规则编译成一个关键字子状态机,并将所述至少一个特定字符串集合分别编译至对应的至少一个域值子状态机;
其中,所述至少一个位置子状态机与所述至少一个位置敏感字段一一对应,所述至少一个位置子状态机之间按照所述至少一个位置敏感字段相互之间的位置顺序进行跳转,且最后一个所述位置子状态机跳转到所述关键字子状态机;每个位置子状态机用于供报文匹配设备对所述位置子状态机对应的位置敏感字段进行字段解析和字段识别中的至少一个,并对应地输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果,或者跳过所述位置子状态机对应的位置敏感字段的匹配,进入下一个位置子状态机;
所述关键字子状态机用于供所述报文匹配设备对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,则跳转到与所述特定的关键字对应的域值子状态机,并输出字段解析结果和字段识别结果作为所述匹配结果;
所述域值子状态机用于供所述报文匹配设备查找所述特定的关键字的域值是否有用户感兴趣的某种模式,如果有,则输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果。
结合第四方面,在第四方面的第一种可能的实现方式中,其中一个或多个位置子状态机包括第一解析结果输出节点和第一识别结果输出节点中的至少一个,以及一个或多个第一匹配节点,所述一个或多个匹配节点用于判断输入的协议字段是否是满足“在报文中的特定位置有第一特定字符串时”条件的协议字段,如果是,则跳转到所述第一解析结果输出节点以及所述第一识别结果输出节点中的至少一个;
或者,
其中一个或多个位置子状态机不包括所述第一解析结果输出节点和所述第一识别结果输出节点,也不包括一个或多个第一匹配节点,直接跳过本位置子状态机。
结合第四方面或第四方面的第一种可能的实现方式,在第四方面的第二种可能的实现方式中,所述关键字子状态机包括第二解析结果输出节点和第二识别结果输出节点,以及一个或多个第二匹配节点,所述一个或多个第二匹配节点用于对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,跳转到第二解析结果输出节点和第二识别结果输出节点。
结合第四方面或第四方面的第一种可能的实现方式或第四方面的第二种可能的实现方式,在第四方面的第三种可能的实现方式中,所述域值子状态机包括第三解析结果输出节点和第三识别结果输出节点中的至少一个,以及一个或多个第三匹配节点,所述一个或多个第三匹配节点用于匹配所述特定的关键字的域值中是否有第二特定字符串,如果有,则跳转至所述第三解析结果输出节点和所述第三识别结果输出节点中的至少一个。
本发明实施例提供的报文匹配方法、状态机编译方法及设备,在接收到报文后,根据状态机对报文中的各协议字段进行匹配,输出与协议字段对应的字段解析结果和字段识别结果中的至少一个匹配结果,其中,所使用的状态机包括关键字段子状态机、至少一个位置子状态机、以及至少一个阈值子状态机和;基于位置子状态机对协议字段中的位置敏感字段进行字段解析与识别,并输出字段解析结果和字段识别结果中的至少一个匹配结果,而基于关键字段子状态机对协议字段中的关键字敏感字段进行字段解析与识别,并输出字段解析结果和字段识别结果,再基于域值子状态机查找特定的关键字的域值是否有用户感兴趣的某种模式,并输出字段解析结果和字段识别结果中的至少一个匹配结果。由上述分析可见,本发明实施例中的状态机通过将字段解析与识别过程融合在一起,允许由报文匹配设备根据该状态机同时完成对报文的解析和识别,提高了报文匹配设备的复用度,减少了所占用的逻辑资源,有利于集成化。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种报文匹配方法的流程图。本实施例提供的方法可由报文匹配设备执行,但不限于此。如图1所示,本实施例的方法包括:
步骤101、接收报文,所述报文包括多个协议字段,所述多个协议字段包括至少一个位置敏感字段和至少一个关键字敏感字段。
本实施例的报文可以是各种可以采用位置和关键字区分字段的协议下的报文,例如可以是HTTP报文、实时流传输协议(Real Time StreamingProtocol,简称为RTSP)报文等。这些报文包括多个协议字段(协议定义的相关字段)。以HTTP报文为例,所包括的协议字段有方法(Method)字段、统一资源定位符(Universal Resource Locator,简称为URL)、版本号(version)字段和主机(Host)字段等等。
所述多个协议字段包括至少一个位置敏感字段和至少一个关键字敏感字段。所述位置敏感字段也就是对位置敏感的协议字段,例如HTTP首行中的方法字段、URL字段和版本号字段都属于位置敏感字段。协议中预先规定了这些位置敏感字段之间的位置关系,通过位置可以确定报文中的位置敏感字段。所谓关键字敏感字段是指以关键字进行区分的协议字段,这类协议字段在位置敏感字段后出现,且没有固定的顺序,但都包括固定的关键字。通常,关键字敏感字段是由关键字+界定符+取值构成,所述界定符可以是冒号“:”。举例说明,HTTP报文中的主机字段、用户代理(User-agent)字段等都属于关键字敏感字段。其中,主机字段、用户代理字段等是不同的关键字敏感字段。
步骤102、根据状态机对所述报文的各个协议字段进行匹配,输出与所述协议字段对应的字段解析结果和与所述协议字段对应的字段识别结果中的至少一个匹配结果。
所述状态机为一些状态信息的集合,包括多个状态节点(以下简称为节点)以及在各节点间跳转所需的跳转条件等状态信息。状态机是一种逻辑概念,其具体实现形式(即状态机文件的形式)为本领域技术人员所公知的技术,这里并不详细说明,本实施例及以下各实施例中,主要侧重于状态机逻辑结构的介绍说明。
在本发明实施例中,状态机包括:关键字子状态机、至少一个位置子状态机、以及至少一个阈值子状态机。
其中,至少一个位置子状态机与报文的协议字段中的至少一个位置敏感字段一一对应,至少一个位置子状态机之间按照至少一个位置敏感字段相互之间的位置顺序进行跳转,且最后一个位置子状态机跳转到关键字子状态机。换句话说,至少一个位置子状态机之间按照所对应的的位置敏感字段之间的位置顺序依次连接,而最后一个位置子状态机连接于关键字子状态机。例如,HTTP首行中的位置敏感字段依次是方法字段、URL字段和版本号字段,方法字段、URL字段和版本号字段是不同的位置敏感字段,则三个位置敏感字段对应的位置子状态机依次是方法字段对应的位置子状态机、连接于方法字段对应的位置子状态机之后的URL字段对应的位置子状态机和连接于URL字段对应的位置子状态机之后的版本号字段对应的位置子状态机。
其中,每个位置子状态机用于供报文匹配设备对所述位置子状态机对应的位置敏感字段进行字段解析和字段识别中的至少一个,并对应地输出字段解析结果和字段识别结果中的至少一个作为匹配结果,或者跳过所述位置子状态机对应的位置敏感字段的匹配,进入下一个位置子状态机。
在本实施例中,报文匹配设备通过位置子状态机可以同时完成对该位置子状态机所对应的位置敏感字段的字段解析和字段识别,对应字段解析过程和字段识别过程都会产生一个结果,根据实际应用需求可以定义只输出字段解析结果,也可以只输出字段识别结果,或者也可以同时输出字段解析结果和字段识别结果。或者,报文匹配设备也可以在协议规定不需要对该位置子状态机对应的位置敏感字段进行匹配的情况下,直接跳过该位置子状态机对应的位置敏感字段的匹配,进入下一个位置子状态机。
对于位置敏感字段来说,字段解析过程主要是找到该位置敏感字段,具体是指确定该位置敏感字段是从哪开始,从哪结束的,即确定该位置敏感字段在报文中的位置,相应的,字段解析结果包括位置敏感字段的起始偏移量和结束偏移量,以及由起始偏移量和结束偏移量确定的该位置敏感字段的域值,即位置敏感字段的取值。举例说明,HTTP报文中的方法字段、URL字段、版本号字段等都有一个具体的取值(即域值),例如,方法字段对应的域值可能是“get”;URL字段对应的域值可能是“www.sohu.com”、“www.yahoo.com.cn”等;版本号字段对应的域值可能是“http1.1”。
而对于位置敏感字段来说,字段识别过程主要是判断位置敏感字段对应的域值是否满足字段识别规则,字段识别规则通常用正则表达式来表示,例如,可能是判断方法字段对应的域值是否为“get”,可能是判断URL字段对应的域值是否包含字符串“sohu”,可能是判断版本号字段对应的域值是否包含字符串“1.1”等,并输出一个字段识别结果。其中,如果判断结果为满足,则输出满足规则的字段识别结果。
基于上述,在协议规定需要对位置敏感字段进行匹配的情况下,本实施例中的一个或多个位置子状态机可以包括第一解析结果输出节点和第一识别结果输出节点中的至少一个,以及一个或多个第一匹配节点。所述一个或多个匹配节点用于判断输入的协议字段是否是满足“在报文中的特定位置有第一特定字符串时”条件的协议字段,如果是,则跳转到第一解析结果输出节点以及第一识别结果输出节点中的至少一个。在此说明,上述条件中的“特定位置”相当于上面提到的位置敏感字段在报文中的位置,而上述条件中的“第一特定字符串”相当于上面提到的字段识别规则。第一解析结果输出节点和第一识别结果输出节点分别对应于上面提到的字段解析结果和字段识别结果。
或者,在协议规定不需要对位置敏感字段进行匹配的情况下,本实施例中的一个或多个位置子状态机也可以不包括第一解析结果输出节点和第一识别结果输出节点,也不包括一个或多个第一匹配节点,报文匹配设备可以直接跳过本位置子状态机。
可选的,在位置子状态机中,可以以身份标识(Identity,简称为ID)的方式来表示位置敏感字段的字段解析结果。为便于区分,本实施例将表示位置敏感字段的字段解析结果的ID记为第一ID。其中,表征不同位置敏感字段的字段解析结果的第一ID不相同。在该实施方式中,位置子状态机中同时定义了各位置敏感字段的字段解析结果对应的第一ID,如果需要输出位置敏感字段的字段解析结果,则报文匹配设备实际可以输出该字段解析结果对应的第一ID即可。
同理,在位置子状态机中,可以以ID的方式来表示位置敏感字段的字段识别结果。为便于区分,本实施例将表示位置敏感字段的字段识别结果的ID记为第二ID。其中,表示不同位置敏感字段的字段识别结果的第二ID不相同。在该实施方式中,位置子状态机中同时定义了各位置敏感字段的字段识别结果对应的第二ID,如果需要输出位置敏感字段的字段识别结果,则报文匹配设备实际可以输出该字段识别结果对应的第二ID即可。
可选的,如果在位置子状态机中,需要同时输出位置敏感字段的字段解析结果和字段识别结果,则报文匹配设备可以只需将字段解析结果对应的第一ID附在字段识别结果对应的第二ID后面输出即可。
图2a为本发明实施例提供的一种位置子状态机的结构示意图。图2a所示为方法字段对应的位置子状态机,图2a所示的方法字段包括“get”和“post”两种规则。如图2a所示,该方法字段对应的位置子状态机包括多个节点,例如“根节点”以及图2a中带箭头的线条所指向的节点等。一个节点标识该子状态机下的一个状态,同一子状态机下的节点之间以及不同子状态机下的节点之间使用有向连线(如图2a中带箭头的线条)连接。节点之间可以发生跳转,例如假设某个子状态机当前处于某一节点所标识的状态,在满足某个条件时,子状态机或子状态机之间会发生状态迁移,迁移的目的节点为与该当前节点具有连接关系的若干节点中的一个。图2a中的“根节点”是指方法字段对应的位置子状态机的开始节点,该开始节点可能是空节点,也可能是方法字段的前一个字段对应的位置子状态机中的一个节点(可简称为次态),该节点用于表示即将开始下一个位置敏感字段的识别与解析。如图2a所示,“get”下方的椭圆中是“get方法对应的第二ID”,该椭圆是一个第一解析结果输出节点;“post”下方的椭圆中是“post字段对应的第二ID”,该椭圆也是一个第一解析结果输出节点;例如,在HTTP请求报文首行中各字段使用空格符或者制表符进行分隔,以此形成了三个位置敏感的字段,从HTTP报文的第一个非空格符且非制表符开始,到遇到第一个空格符或者制表符之间的字符串,视作HTTP报文的方法字段,因此当匹配到“\x20\x09”时,意味着该方法字段结束,则可以输出该方法字段对应的第一ID,即图2a中最后一个椭圆是一个第一识别结果输出节点。图2a中的\x20\x09是以十六进制表示的空格符制表符,相应的,图2a中的“!\x20\x09”表示非空格符制表符。在此说明,在根节点和第一解析结果输出节点之间存在多个匹配节点,图2a中未示出。
由图2a可见,当报文匹配设备根据该位置子状态机对报文中的位置敏感字段进行匹配时,走完该位置子状态机即可输出两个结果(即字段解析结果和字段识别结果),不需要像现有技术那样需要走两个状态机,且不需要两个引擎。
图2a所示仅为方法字段对应的位置子状态机,进一步,如图2b所示,按照各个位置敏感字段之间的位置关系,连接于方法字段对应的位置子状态机之后的是URL字段对应的位置子状态机。图2b中上面虚线框表示方法字段对应的位置子状态机,下面虚线框表示连接于方法字段对应的位置子状态机之后的URL字段对应的位置子状态机。关于URL字段对应的位置子状态机不再详细说明。
对于关键字敏感字段,由于其在位置敏感字段后出现,且出现顺序不固定,因此,在本实施例中将所有关键字连接起来,采取将关键字与关键字对应的域值(或取值)分开编译的方式,对对应的规则进行编码分别生成关键字子状态机和至少一个域值子状态机。
在本实施例中,关键字子状态机用于供报文匹配设备对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,则跳转到与所述特定的关键字对应的域值子状态机,并输出字段解析结果和字段识别结果作为匹配结果。域值子状态机用于供报文匹配设备查找所述特定的关键字的域值是否有用户感兴趣的某种模式,如果有,则输出字段解析结果和字段识别结果中的至少一个作为匹配结果。在本实施例中,报文匹配设备通过关键字子状态机和域值子状态机可以同时完成对关键字敏感字段的字段解析和字段识别,对应字段解析过程和字段识别过程都会有一个结果,根据实际应用需求可以定义只输出字段解析结果,也可以定义只输出字段识别结果,或者也可以同时输出字段解析结果和字段识别结果。
对于关键字敏感字段来说,字段解析过程主要是找到关键字敏感字段,具体是指确定该关键字敏感字段是从哪开始,从哪结束的,即确认报文中是否有该关键字。该过程可主要基于关键字子状态机来完成。可选的,关键字子状态机的一种逻辑结构可以包括第二解析结果输出节点和第二识别结果输出节点,以及一个或多个第二匹配节点。所述一个或多个第二匹配节点用于对关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,跳转到第二解析结果输出节点和第二识别结果输出节点。基于此,报文匹配设备对关键字敏感字段进行匹配,具体是指通过关键字子状态机中的一个或多个第二匹配节点匹配关键字敏感字段是否包含特定的关键字,并当匹配到特定关键字时跳转到第二解析结果输出节点和第二识别结果输出节点。第二识别结果输出节点主要用于指向该特定关键字对应的域值子状态机。
而对关键字敏感字段来说,字段识别过程主要是判断关键字敏感字段中的域值(即关键字的域值)是否满足字段识别规则,字段识别规则通常用正则表达式来表示,即主要是判断关键字的域值是否包含规则所定义的特定字符串。该字段识别过程主要可基于域值子状态机来完成。可选的,域值子状态机的一种逻辑结构可以包括第三解析结果输出节点和第三识别结果输出节点中的至少一个,以及一个或多个第三匹配节点。所述一个或多个第三匹配节点用于匹配由关键字子状态机确认出的特定的关键字的域值中是否有第二特定字符串,如果有,则跳转至第三解析结果输出节点和第三识别结果输出节点中的至少一个。在此说明,第二特定字符串主要是指上层应用需要用到的字符串,例如可以是youtube.com之类的。基于此,报文匹配设备可以通过域值子状态机中的一个或多个第三匹配节点对由关键字子状态机确认的关键字的域值进行判断,确认该域值中是否有第二特定字符串,并在确定该域值中有第二特定字符串时,跳转到第三解析结果输出节点和第二识别结果输出节点中的至少一个,以输出对该关键字敏感字段的字段解析结果和字段识别结果中的至少一个匹配结果。
可选的,可以以ID方式来表示关键字敏感字段的字段解析结果和字段识别结果。为便于区分,将用于表示对关键字敏感字段的字段解析结果的ID记为第三ID;将用于表示对关键字敏感字段的字段识别结果的ID记为第四ID。例如,在关键字子状态机中,可以用解析结束ID表示字段解析结果,即表示关键字在报文中的结束位置,记为pid0,则第三ID可以包括pid0;在域值子状态机中,可以用域值起始ID表示关键字的域值在报文中的起始位置,记为pid1;用域值结束ID表示关键字的域值在报文中的结束位置,记为pid2,则第四ID可以包括pid1和pid2。
以上述为例,一种用ID来标识关键字与其域值在报文中的位置的方式如图3所示,图3所示的关键字敏感字段为主机字段,该字段的域值为“sina.com”。基于此,图4所示为关键字子状态机的一种结构,该关键字子状态机包括一个根节点、主机字段对应的第二解析结果输出节点、用户代理字段对应的第二解析结果输出节点,以及主机字段和用户代理字段对应的第二识别结果输出节点。图4中的根节点是最后一个位置子状态机的一个节点,该节点表示的状态是当前已经解析到最后一个位置敏感字段,即将开始关键字敏感字段的识别与解析。在图4中,主机字段下面的椭圆中是主机字段对应的pid0,该椭圆是一个第二解析结果输出节点;用户代理字段下面的椭圆中是用户代理字段对应的pid0,该椭圆也是一个第二解析结果输出节点;图4中虚线箭头指向的椭圆是第二识别结果输出节点,该节点主要用于指向所对应的域值子状态机,以便完成对该关键字敏感字段的识别;其中,使用虚线表示从当前状态跳转到下一个状态并不消耗字符,字符的消耗在下一个状态中进行。
由上述可见,在本实施例提供的方法中,由于使用的状态机将字段解析与识别过程融合在一起,因此允许报文匹配设备根据该状态机同时完成对报文的解析和识别,不需要多个报文匹配设备分别对报文进行解析和识别,提高了报文匹配设备的复用度,减少了报文匹配设备所占用的逻辑资源,有利于集成化。进一步,本实施例提供的方法将原来的两次处理过程,改为一次处理过程,提高了处理速度,缩短了处理时间。
在本发明上述实施例中,在根据状态机对报文的各个协议字段进行匹配,输出与协议字段对应的字段解析结果和与协议字段对应的字段识别结果中的至少一个之前,需要预先生成所述状态机。下面实施例将提供一种状态机编译方法,用于对生成状态机的过程进行说明。
图5a为本发明实施例提供的一种状态机编译方法的流程图。如图5a所示,该方法包括:
501、接收规则文件,所述规则文件中记载有匹配规则。
502、获取所述规则文件中的各个匹配规则。
503、将各个匹配规则分成至少一个位置敏感规则以及至少一个关键字敏感规则,所述关键字敏感规则中包括关键字到域值特定字符串集合的映射关系。
504、从所述至少一个关键字敏感规则获取与各个关键字分别对应的至少一个特定字符串集合。
505、将每个位置敏感规则编译成一个位置子状态机,并连接各个位置子状态机。
506、将所述至少一个关键字敏感规则编译成一个关键字子状态机。
507、将所述至少一个特定字符串集合分别编译至对应的至少一个域值子状态机。
首先,状态机编译设备接收规则文件,从规则文件中获取各个匹配规则,对各个匹配规则进行分类,获得至少一个位置敏感规则和至少一个关键字敏感规则。具体的,按照规则文件中各匹配规则的用途进行分类,可以将匹配规则分成字段解析规则与字段识别规则;按照匹配规则所涉及的协议字段的类型分类,可以将匹配规则分成至少一个位置敏感规则与至少一个关键字敏感规则。在本发明各实施例中,按照匹配规则所涉及的协议字段的类型进行分类。其中,位置敏感规则包括所述多个协议字段中的位置敏感字段对应的字段解析规则和字段识别规则;关键字敏感规则包括所述多个协议字段中的关键字敏感字段对应的字段解析规则和字段识别规则。换句话说,多个协议字段中的位置敏感字段对应的字段解析规则和字段识别规则构成了所述位置敏感规则;多个协议字段中的关键字敏感字段对应的字段解析规则和字段识别规则构成了所述关键字敏感规则。
如图5b所示,HTTP请求报文的首行包括方法字段、URL字段和HTTP版本号字段,各字段之间的空白格表示空格,HTTP版本号字段之后的CRLF表示回车符;首行之后的头域字段包括头部字段,每个头部字段包括头部字段名称+:+空格+取值+CRLF;头域字段之后是实体主体(Message body),本发明实施例并不涉及实体主体部分,所以不做过多说明。以HTTP请求报文为例,HTTP请求报文的首行所涉及的三个字段为位置敏感字段,依次为方法字段、URL字段还是HTTP版本号字段。跟这些位置敏感字段有关的字段解析规则和字段识别规则称为“位置敏感规则”。HTTP请求报文的头部字段均包含头部字段名称,这些头部字段并无固定顺序,但是有固定关键字。与这些关键字敏感字段有关的字段解析规则和字段识别规则,称为“关键字敏感规则”。
可选的,一种对规则文件中各匹配规则进行分类的方式包括:先对匹配规则进行第一次分类,将位置敏感规则与关键字敏感规则区分开,例如在HTTP中,第一次分类主要是指将HTTP报文中的首行与头域字段分开。接着,进行第二次分类,第二次分类主要是指对第一次分类的结果进一步细分。对于位置敏感规则,按照具体字段的位置继续细分出不同位置敏感字段对应的位置敏感规则;对于关键字敏感规则,进一步区分出头域字段中每个头部字段的位置敏感规则。例如,对于HTTP来说,第二次分类具体是指在HTTP首行中,区分开方法字段、URL字段和HTTP版本号分别对应的规则,在HTTP头域字段中,区分开主机字段,内容类型(content-type)字段等的规则。
在本实施例中,关键字敏感规则包括关键字到域值特定字符串集合的映射关系。例如,域值特定字符串集合可以是包括huawei.com,youtube.com,www.sohu.com,www.yahoo.com.cn等字符串的集合,实际上是一个由各关键字的域值构成的字符串集合。基于此,在获得至少一个关键字敏感规则之后,还需要从至少一个关键字敏感规则中获取与各个关键字分别对应的至少一个特定字符串集合。
之后,对每个位置敏感规则进行编译,生成一个位置子状态机,并根据位置敏感规则中各位置敏感字段的位置关系确定至少一个位置子状态机之间的连接关系,连接各位置子状态机。采用将至少一个关键字敏感规则和至少一个特定字符串集合分别编译的方式,对至少一个关键字敏感规则进行编译,生成一个关键字子状态机,并对至少一个特定字符串集合分别进行编译,生成至少一个域值子状态机。
其中,至少一个位置子状态机与至少一个位置敏感字段一一对应,至少一个位置子状态机之间按照所述至少一个位置敏感字段相互之间的位置顺序进行跳转,且最后一个所述位置子状态机跳转到所述关键字子状态机;每个位置子状态机用于供报文匹配设备对所述位置子状态机对应的位置敏感字段进行字段解析和字段识别中的至少一个,并对应地输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果,或者跳过所述位置子状态机对应的位置敏感字段的匹配,进入下一个位置子状态机;
所述关键字子状态机用于供所述报文匹配设备对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,则跳转到与所述特定的关键字对应的域值子状态机,并输出字段解析结果和字段识别结果作为所述匹配结果;
所述域值子状态机用于供所述报文匹配设备查找所述特定的关键字的域值是否有用户感兴趣的某种模式,如果有,则输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果。
具体的,对于位置敏感字段,按照协议规定可获得其字段解析规则的正则表达式,并且能够获取其字段识别规则,这些规则构成该位置敏感字段对应的位置敏感规则,然后对该位置敏感规则进行编译,进而获得该位置敏感字段对应的位置子状态机。可选的,在对位置敏感规则进行编译的过程中,可以按照对同一位置敏感字段的字段解析和字段识别由同一位置子状态机完成的规则,对所述位置敏感规则进行编译,生成所述位置子状态机。其中,同一位置敏感字段的字段解析和字段识别由同一位置子状态机完成的规则,具体可以通过对同一位置敏感字段的字段解析规则和字段识别规则进行合并来实现。例如,在HTTP中规定,HTTP请求报文的第一个非空字符串为方法字段,当需要解析并识别某一方法(例如get)时,在生成的位置子状态机中在完成字段识别过程的识别节点之后增加一个完成字段解析的匹配(match)节点,从而将对该方法字段的识别与解析在同一个位置子状态机中完成。基于此,在协议规定需要对位置敏感字段进行匹配的情况下,本实施例中一个或多个位置子状态机的逻辑结构可以包括第一解析结果输出节点和第一识别结果输出节点中的至少一个,以及一个或多个第一匹配节点,所述一个或多个匹配节点用于判断输入的协议字段是否是满足“在报文中的特定位置有第一特定字符串时”条件的协议字段,如果是,则跳转到所述第一解析结果输出节点以及所述第一识别结果输出节点中的至少一个。或者,在协议规定不需要对位置敏感字段进行匹配的情况下,一个或多个位置子状态机可以不包括所述第一解析结果输出节点和所述第一识别结果输出节点,也不包括一个或多个第一匹配节点,直接跳过本位置子状态机。
对于关键字敏感字段,由于其在位置敏感字段之后出现,且出现顺序不固定,本实施例具体是将所有头部字段连接起来,并采取关键字与域值分开编译生成关键字子状态机和域值子状态机的方式。具体的,将所有的关键字敏感字段的关键字规则收集起来,生成一个关键字子状态机,并对其中每个关键字的域值对应的识别规则进行编译,生成每个关键字对应的域值子状态机。可选的,关键字子状态机的一种逻辑结构可以包括第二解析结果输出节点和第二识别结果输出节点,以及一个或多个第二匹配节点,所述一个或多个第二匹配节点用于对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,跳转到第二解析结果输出节点和第二识别结果输出节点。相应的,域值子状态机的逻辑结构可以包括第三解析结果输出节点和第三识别结果输出节点中的至少一个,以及一个或多个第三匹配节点,所述一个或多个第三匹配节点用于匹配所述特定的关键字的域值中是否有第二特定字符串,如果有,则跳转至所述第三解析结果输出节点和所述第三识别结果输出节点中的至少一个。在此说明,第二特定字符串主要是指上层应用需要用到的字符串,例如可以是youtube.com之类的。
可选的,可以以ID方式来表示关键字敏感字段的字段解析结果和字段识别结果。为便于区分,将用于表示对关键字敏感字段的字段解析结果的ID记为第三ID;将用于表示对关键字敏感字段的字段识别结果的ID记为第四ID。例如,在关键字子状态机中,可以用解析结束ID表示字段解析结果,即表示关键字在报文中的结束位置,记为pid0,则第三ID可以包括pid0;在域值子状态机中,可以用域值起始ID表示关键字的域值在报文中的起始位置,记为pid1;用域值结束ID表示关键字的域值在报文中的结束位置,记为pid2,则第四ID可以包括pid1和pid2。一种关键字子状态机与域值子状态机的构成结构如图6所示。图6所示内容主要是关键字敏感字段对应的关键字子状态机与关键字敏感字段中的主机字段所对应的域值子状态机的互联结果,图6中虚线框所示为关键字子状态机,实线框所示为关键字敏感字段中的主机字段对应的域值子状态机,关键字敏感字段中的用户代理对应的域值子状态机未示出。图6中的关键字子状态机涉及两个关键字,即主机和用户代理,当解析到任何一个关键字时,需要上报其解析结束ID,即pid0;当解析到该关键字的域值开始的字符(即图6中的非分隔符,由[^\s]表示)时,需要上报域值开始ID,记为pid1;当解析到关键字的域值结束的字符(即图6中的\r\n后遇到非分割符)时,需要上报域值结束ID,记为pid2,并在识别到youtube.com时上报与该字符串对应的ID。在图6中,第三ID实际上包括pid1、pid2和字符串“youtube.com”对应的ID。如图6所示,主机字段对应的域值子状态机结束后需跳转回关键字子状态机,以便于报文匹配设备根据该关键字子状态机确认报文中是否包含下一个特定的关键字。在图6中,“\s”或者“space”:表示空白符,即空格符或者制表符;“[^\s]”或者“non-space”:表示非空白符;“\r\n”:表示回车符与换行符。在HTTP报文中的关键字敏感的协议字段由“\r\n”非空白符作为结束标记。图6中用虚线表示跳出该状态并不消耗字符。
由上述可见,本实施例提供的方法,对规则报文中的匹配规则按照位置和关键字的不同进行了分组,分组之后的规则是一个更小的规则集合,与大的规则集合相比,小的规则集合按照经典的编译算法进行编译,可以避免状态数呈几何级数的增长,减少了对大存储器的需求,即在避免状态爆炸的同时减少了对大存储器的需求。再者,本实施例提供的方法同时进行字段解析与字段识别,增加了基于字段解析与识别的深度包检测(DPI)系统的吞吐量。
图7为本发明实施例提供的一种报文匹配设备的结构示意图。如图7所示,本实施例的报文匹配设备包括:接收模块71和匹配模块72。
接收模块71,用于接收报文,所述报文包括多个协议字段,所述多个协议字段包括至少一个位置敏感字段和至少一个关键字敏感字段。
匹配模块72,与接收模块71连接,用于根据状态机对接收模块71所接收的报文的各个协议字段进行匹配,输出与所述协议字段对应的字段解析结果和与所述协议字段对应的字段解析结果字段识别结果中的至少一个匹配结果。
其中,所述状态机包括:关键字子状态机、至少一个位置子状态机、以及至少一个域值子状态机;
所述至少一个位置子状态机与所述至少一个位置敏感字段一一对应,所述至少一个位置子状态机之间按照所述至少一个位置敏感字段相互之间的位置顺序进行跳转,且最后一个所述位置子状态机跳转到所述关键字子状态机;每个位置子状态机用于供所述报文匹配设备对所述位置子状态机对应的位置敏感字段进行字段解析和字段识别中的至少一个,并对应地输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果,或者跳过所述位置子状态机对应的位置敏感字段的匹配,进入下一个位置子状态机;
所述关键字子状态机用于供所述报文匹配设备对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,则跳转到与所述特定的关键字对应的域值子状态机,并输出字段解析结果和字段识别结果作为所述匹配结果;
所述域值子状态机用于供所述报文匹配设备查找所述特定的关键字的域值是否有用户感兴趣的某种模式,如果有,则输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果。
在一可选实施方式中,一个或多个位置子状态机包括第一解析结果输出节点和第一识别结果输出节点中的至少一个,以及一个或多个第一匹配节点,所述一个或多个匹配节点用于判断输入的协议字段是否是满足“在报文中的特定位置有第一特定字符串时”条件的协议字段,如果是,则跳转到所述第一解析结果输出节点以及所述第一识别结果输出节点中的至少一个;
或者,
其中一个或多个位置子状态机不包括所述第一解析结果输出节点和所述第一识别结果输出节点,也不包括一个或多个第一匹配节点,直接跳过本位置子状态机。
在一可选实施方式中,关键字子状态机包括第二解析结果输出节点和第二识别结果输出节点,以及一个或多个第二匹配节点,所述一个或多个第二匹配节点用于对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,跳转到第二解析结果输出节点和第二识别结果输出节点。
在一可选实施方式中,域值子状态机包括第三解析结果输出节点和第三识别结果输出节点中的至少一个,以及一个或多个第三匹配节点,所述一个或多个第三匹配节点用于匹配所述特定的关键字的域值中是否有第二特定字符串,如果有,则跳转至所述第三解析结果输出节点和所述第三识别结果输出节点中的至少一个。
本实施例提供的报文匹配设备的各功能模块可用于执行图1所示方法实施例中的相应流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例提供的报文匹配设备,在接收到报文后,根据状态机对报文中的各协议字段进行匹配,输出与协议字段对应的字段解析结果和字段识别结果中的至少一个匹配结果,其中,所使用的状态机包括关键字段子状态机、至少一个位置子状态机、以及至少一个阈值子状态机和;基于位置子状态机对协议字段中的位置敏感字段进行字段解析与识别,并输出字段解析结果和字段识别结果中的至少一个匹配结果,而基于关键字段子状态机对协议字段中的关键字敏感字段进行字段解析与识别,并输出字段解析结果和字段识别结果,再基于域值子状态机查找特定的关键字的域值是否有用户感兴趣的某种模式,并输出字段解析结果和字段识别结果中的至少一个匹配结果。由于本实施例的报文匹配设备采用的状态机可以将字段解析与识别过程融合在一起,因此报文匹配设备根据该状态机可以同时完成对报文的解析和识别,提高了其复用度,减少了所占用的逻辑资源,有利于集成化。
图8为本发明实施例提供的另一种报文匹配设备的结构示意图。如图8所示,本实施例的报文匹配设备包括:通信接口81和逻辑器件82。
通信接口81,用于接收报文,所述报文包括多个协议字段,所述多个协议字段包括至少一个位置敏感字段和至少一个关键字敏感字段。
逻辑器件82,用于根据状态机对通信接口81所接收的报文的各个协议字段进行匹配,输出与所述协议字段对应的字段解析结果和与所述协议字段对应的字段识别结果中的至少一个匹配结果。
可选的,逻辑器件82可以是FPGA、特定集成电路(Application SpecificIntegrated Circuit,简称为ASIC)、或者是实施本发明实施例的一个或多个集成电路。
其中,所述状态机包括:关键字子状态机、至少一个位置子状态机、以及至少一个域值子状态机;
所述至少一个位置子状态机与所述至少一个位置敏感字段一一对应,所述至少一个位置子状态机之间按照所述至少一个位置敏感字段相互之间的位置顺序进行跳转,且最后一个所述位置子状态机跳转到所述关键字子状态机;每个位置子状态机用于供所述报文匹配设备对所述位置子状态机对应的位置敏感字段进行字段解析和字段识别中的至少一个,并对应地输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果,或者跳过所述位置子状态机对应的位置敏感字段的匹配,进入下一个位置子状态机;
所述关键字子状态机用于供所述报文匹配设备对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,则跳转到与所述特定的关键字对应的域值子状态机,并输出字段解析结果和字段识别结果作为所述匹配结果;
所述域值子状态机用于供所述报文匹配设备查找所述特定的关键字的域值是否有用户感兴趣的某种模式,如果有,则输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果。
在一可选实施方式中,一个或多个位置子状态机包括第一解析结果输出节点和第一识别结果输出节点中的至少一个,以及一个或多个第一匹配节点,所述一个或多个匹配节点用于判断输入的协议字段是否是满足“在报文中的特定位置有第一特定字符串时”条件的协议字段,如果是,则跳转到所述第一解析结果输出节点以及所述第一识别结果输出节点中的至少一个;
或者,
其中一个或多个位置子状态机不包括所述第一解析结果输出节点和所述第一识别结果输出节点,也不包括一个或多个第一匹配节点,直接跳过本位置子状态机。
在一可选实施方式中,关键字子状态机包括第二解析结果输出节点和第二识别结果输出节点,以及一个或多个第二匹配节点,所述一个或多个第二匹配节点用于对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,跳转到所述第二解析结果输出节点和所述第二识别结果输出节点。
在一可选实施方式中,域值子状态机包括第三解析结果输出节点和第三识别结果输出节点中的至少一个,以及一个或多个第三匹配节点,所述一个或多个第三匹配节点用于匹配所述特定的关键字的域值中是否有第二特定字符串,如果有,则跳转至所述第三解析结果输出节点和所述第三识别结果输出节点中的至少一个。
进一步,如图8所示,本实施例的报文匹配设备还包括:处理器83、存储器84以及多个外部设备(简称为外设)85。
存储器84,用于存储程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器84可以包含内存和非易失性存储器(non-volatilememory),例如硬盘。
处理器83,用于执行存储器84存储的程序,以实现对报文匹配设备的控制逻辑。例如,处理器83可以是一个中央处理器(Central Processing Unit,简称为CPU)。
外设85可以包括显示设备、输入输出设备和音视频设备等。
进一步,逻辑器件82获得匹配结果后可以将匹配结果上报给处理器83,以便于处理器83做进一步处理。
可选的,在具体实现上,如果通信接口81、逻辑器件82、处理器83、存储器84和外部85独立实现,则通信接口81、逻辑器件82、处理器83、存储器84和外部85可以通过总线相互连接并完成相互间的通信。所述总线可以是工业标准体系结构(Industry Standard Architecture,简称为ISA)总线、外部设备互连(Peripheral Component,简称为PCI)总线或扩展工业标准体系结构(Extended Industry Standard Architecture,简称为EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果通信接口81、逻辑器件82、处理器83、存储器84和外部85集成在一块芯片上实现,则通信接口81、逻辑器件82、处理器83、存储器84和外部85可以通过内部接口完成相同间的通信。
本实施例提供的报文匹配设备可用于执行图1所示方法实施例中的相应流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例提供的报文匹配设备,在接收到报文后,根据状态机对报文中的各协议字段进行匹配,输出与协议字段对应的字段解析结果和字段识别结果中的至少一个匹配结果,其中,所使用的状态机包括关键字段子状态机、至少一个位置子状态机、以及至少一个阈值子状态机和;基于位置子状态机对协议字段中的位置敏感字段进行字段解析与识别,并输出字段解析结果和字段识别结果中的至少一个匹配结果,而基于关键字段子状态机对协议字段中的关键字敏感字段进行字段解析与识别,并输出字段解析结果和字段识别结果,再基于域值子状态机查找特定的关键字的域值是否有用户感兴趣的某种模式,并输出字段解析结果和字段识别结果中的至少一个匹配结果。由于本实施例的报文匹配设备采用的状态机可以将字段解析与识别过程融合在一起,因此报文匹配设备根据该状态机可以同时完成对报文的解析和识别,提高了其复用度,减少了所占用的逻辑资源,有利于集成化。
图9为本发明实施例提供的一种状态机编译设备的结构示意图。如图9所示,该设备包括:接收模块91、获取模块92、划分模块93和编译模块94。
接收模块91,用于接收规则文件,所述规则文件中记载有匹配规则。
获取模块92,用于获取接收模块91接收的所述规则文件中的各个匹配规则。
划分模块93,用于将获取模块92获取的各个匹配规则分成至少一个位置敏感规则以及至少一个关键字敏感规则,所述关键字敏感规则中包括关键字到域值特定字符串集合的映射关系。
获取模块92还用于,从划分模块93分出的所述至少一个关键字敏感规则获取与各个关键字分别对应的至少一个特定字符串集合。
编译模块94,用于将每个位置敏感规则编译成一个位置子状态机,连接各个位置子状态机,将所述至少一个关键字敏感规则编译成一个关键字子状态机,并将所述至少一个特定字符串集合分别编译至对应的至少一个域值子状态机。
其中,所述至少一个位置子状态机与所述至少一个位置敏感字段一一对应,所述至少一个位置子状态机之间按照所述至少一个位置敏感字段相互之间的位置顺序进行跳转,且最后一个所述位置子状态机跳转到所述关键字子状态机;每个位置子状态机用于供报文匹配设备对所述位置子状态机对应的位置敏感字段进行字段解析和字段识别中的至少一个,并对应地输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果,或者跳过所述位置子状态机对应的位置敏感字段的匹配,进入下一个位置子状态机;
所述关键字子状态机用于供所述报文匹配设备对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,则跳转到与所述特定的关键字对应的域值子状态机,并输出字段解析结果和字段识别结果作为所述匹配结果;
所述域值子状态机用于供所述报文匹配设备查找所述特定的关键字的域值是否有用户感兴趣的某种模式,如果有,则输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果。
在一可选实施方式中,一个或多个位置子状态机包括第一解析结果输出节点和第一识别结果输出节点中的至少一个,以及一个或多个第一匹配节点,所述一个或多个匹配节点用于判断输入的协议字段是否是满足“在报文中的特定位置有第一特定字符串时”条件的协议字段,如果是,则跳转到所述第一解析结果输出节点以及所述第一识别结果输出节点中的至少一个;
或者,
其中一个或多个位置子状态机不包括所述第一解析结果输出节点和所述第一识别结果输出节点,也不包括一个或多个第一匹配节点,直接跳过本位置子状态机。
在一可选实施方式中,关键字子状态机包括第二解析结果输出节点和第二识别结果输出节点,以及一个或多个第二匹配节点,所述一个或多个第二匹配节点用于对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,跳转到所述第二解析结果输出节点和所述第二识别结果输出节点。
在一可选实施方式中,域值子状态机包括第三解析结果输出节点和第三识别结果输出节点中的至少一个,以及一个或多个第三匹配节点,所述一个或多个第三匹配节点用于匹配所述特定的关键字的域值中是否有第二特定字符串,如果有,则跳转至所述第三解析结果输出节点和所述第三识别结果输出节点中的至少一个。
本实施例提供的状态机编译设备可用于执行图5a所示方法实施例中的相应流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例提供的状态机编译设备,对规则报文中的匹配规则按照位置和关键字的不同进行了分组,分组之后的规则是一个更小的规则集合,与大的规则集合相比,小的规则集合按照经典的编译算法进行编译,可以避免状态数呈几何级数的增长,减少了对大存储器的需求,即在避免状态爆炸的同时减少了对大存储器的需求。再者,本实施例提供的状态机编译设备同时进行字段解析与字段识别,增加了基于字段解析与识别的DPI系统的吞吐量。
图10为本发明实施例提供的另一种状态机编译设备的结构示意图。如图10所示,该设备包括:通信接口1001、处理器1002和编译器1003。
通信接口1001,用于接收规则文件,所述规则文件中记载有匹配规则。
处理器1002,用于获取通信接口1001接收的所述规则文件中的各个匹配规则,将各个匹配规则分成至少一个位置敏感规则以及至少一个关键字敏感规则,并从所述至少一个关键字敏感规则获取与各个关键字分别对应的至少一个特定字符串集合;所述关键字敏感规则中包括关键字到域值特定字符串集合的映射关系。
编译器1003,用于将每个位置敏感规则编译成一个位置子状态机,连接各个位置子状态机,将所述至少一个关键字敏感规则编译成一个关键字子状态机,并将所述至少一个特定字符串集合分别编译至对应的至少一个域值子状态机。
其中,所述至少一个位置子状态机与所述至少一个位置敏感字段一一对应,所述至少一个位置子状态机之间按照所述至少一个位置敏感字段相互之间的位置顺序进行跳转,且最后一个所述位置子状态机跳转到所述关键字子状态机;每个位置子状态机用于供报文匹配设备对所述位置子状态机对应的位置敏感字段进行字段解析和字段识别中的至少一个,并对应地输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果,或者跳过所述位置子状态机对应的位置敏感字段的匹配,进入下一个位置子状态机;
所述关键字子状态机用于供所述报文匹配设备对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,则跳转到与所述特定的关键字对应的域值子状态机,并输出字段解析结果和字段识别结果作为所述匹配结果;
所述域值子状态机用于供所述报文匹配设备查找所述特定的关键字的域值是否有用户感兴趣的某种模式,如果有,则输出字段解析结果和字段识别结果中的至少一个作为所述匹配结果。
在一可选实施方式中,一个或多个位置子状态机包括第一解析结果输出节点和第一识别结果输出节点中的至少一个,以及一个或多个第一匹配节点,所述一个或多个匹配节点用于判断输入的协议字段是否是满足“在报文中的特定位置有第一特定字符串时”条件的协议字段,如果是,则跳转到所述第一解析结果输出节点以及所述第一识别结果输出节点中的至少一个;
或者,
其中一个或多个位置子状态机不包括所述第一解析结果输出节点和所述第一识别结果输出节点,也不包括一个或多个第一匹配节点,直接跳过本位置子状态机。
在一可选实施方式中,关键字子状态机包括第二解析结果输出节点和第二识别结果输出节点,以及一个或多个第二匹配节点,所述一个或多个第二匹配节点用于对所述关键字敏感字段进行匹配,以确认是否有特定的关键字,如果有,跳转到所述第二解析结果输出节点和所述第二识别结果输出节点。
在一可选实施方式中,域值子状态机包括第三解析结果输出节点和第三识别结果输出节点中的至少一个,以及一个或多个第三匹配节点,所述一个或多个第三匹配节点用于匹配所述特定的关键字的域值中是否有第二特定字符串,如果有,则跳转至所述第三解析结果输出节点和所述第三识别结果输出节点中的至少一个。
进一步,如图10所示,本实施例的状态机编译设备还包括:存储器1004和多个外设1005。
存储器1004,用于存储程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器1004可以包含内存和非易失性存储器(non-volatilememory),例如硬盘。
可选的,处理器1002可以是CPU,用于执行存储器1004存储的程序,以实现上述功能。
外设1005可以包括显示设备、输入输出设备和音视频设备等。
可选的,在具体实现上,如果通信接口1001、处理器1002、编译器1003、存储器1004和外部1005独立实现,则通信接口1001、处理器1002、编译器1003、存储器1004和外部1005可以通过总线相互连接并完成相互间的通信。所述总线可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果通信接口1001、处理器1002、编译器1003、存储器1004和外部1005集成在一块芯片上实现,则通信接口1001、处理器1002、编译器1003、存储器1004和外部1005可以通过内部接口完成相同间的通信。
本实施例提供的状态机编译设备可用于执行图5a所示方法实施例中的相应流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例提供的状态机编译设备,对规则报文中的匹配规则按照位置和关键字的不同进行了分组,分组之后的规则是一个更小的规则集合,与大的规则集合相比,小的规则集合按照经典的编译算法进行编译,可以避免状态数呈几何级数的增长,减少了对大存储器的需求,即在避免状态爆炸的同时减少了对大存储器的需求。再者,本实施例提供的状态机编译设备同时进行字段解析与字段识别,增加了基于字段解析与识别的DPI系统的吞吐量。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。