CN110008385B - 一种基于字符串的快速匹配识别方法和装置 - Google Patents

一种基于字符串的快速匹配识别方法和装置 Download PDF

Info

Publication number
CN110008385B
CN110008385B CN201910339570.6A CN201910339570A CN110008385B CN 110008385 B CN110008385 B CN 110008385B CN 201910339570 A CN201910339570 A CN 201910339570A CN 110008385 B CN110008385 B CN 110008385B
Authority
CN
China
Prior art keywords
character
character string
array
string
bits
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910339570.6A
Other languages
English (en)
Other versions
CN110008385A (zh
Inventor
李小坤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Greenet Information Service Co Ltd
Original Assignee
Wuhan Greenet Information Service Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Greenet Information Service Co Ltd filed Critical Wuhan Greenet Information Service Co Ltd
Priority to CN201910339570.6A priority Critical patent/CN110008385B/zh
Publication of CN110008385A publication Critical patent/CN110008385A/zh
Application granted granted Critical
Publication of CN110008385B publication Critical patent/CN110008385B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Character Discrimination (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及计算机技术领域,提供了一种基于字符串的快速匹配识别方法和装置。其中方法包括确定字符串中存在动态变化的一个或者多个字符位,以及相应字符串中的静态字符位;根据所述字符串中的静态字符位的内容信息和所述一个或者多个动态字符位,更新字符串映射库。本发明将其中动态变化的字符位进行了标定,并可以通过在常规的字典树的数组中增设例如第257位,用于存储对应所述动态变化的字符位的下一级数组的链接信息,从而极大的简化了字典树的冗余程度。

Description

一种基于字符串的快速匹配识别方法和装置
【技术领域】
本发明涉及计算机技术领域,特别是涉及一种基于字符串的快速匹配识别方法和装置。
【背景技术】
深度包检测技术(Deep Packet Inspect,简写为:DPI)技术是一种基于应用层的流量检测和控制技术,当IP数据包、TCP或UDP数据流通过基于DPI技术的带宽管理系统时,该系统通过深入读取IP包载荷的内容来对OSI七层协议中的应用层信息进行重组,从而得到整个应用程序的内容,然后按照系统定义的管理策略对流量进行整形操作。
在DPI技术中,对网络数据报文做应用识别和恶意流量分析时,通常会搜集到报文负载前n个字节中某些字节的特征,例如:腾讯QQ的网络数据报文中就会在报文指定位置出包含QQ两个字节;然后生成特定的规则库,最后通过一个匹配引擎来将规则和数据包做匹配。然而,在实际操作过程中却会遇到,由于n个字节中存在某个字节不确定,无法通过自动机(Aho-Corasickautomation,简写为:AC)算法建立状态机来做匹配,所以一般会一条一条规则去遍历匹配是否命中。遍历规则在规则数量少的情况下可行,但在规则数量级上去之后,匹配的性能就会非常的低,匹配速率会相当的慢。这样会带来计算资源极大程度上的浪费,而现有技术中却没有针对此种情况的简洁、高效的解决手段。
专利权申请号为CN201210132834.9的专利文档公开了一种多模式字符串匹配方法和装置。该方法包括:将多个模式串,按其各自的字符组成顺序,沿树结构的根节点向下,将每个字符写入一个节点中,生成一个决策树结构;将待匹配的主串沿所述决策树向下进行匹配。本发明的技术方案,能够实现多模式字符串的精确匹配,同时根据子节点对应的哈希值查找该子节点,决策树的宽度改变并不会影响字符串匹配的CPU时间开销,该算法的时间开销只取决于决策树的平均深度,与模式串的数量无关。对于模式串较多的字符串匹配,该算法能大量降低CPU的时间开销,提高应用的响应速度。但是,该专利中不支持字符串中包含的未确定字符的匹配的情况。
专利权申请号:CN201310744154.7的专利文档公开了一种基于非确定有限自动机的字符串搜索方法,包括构造非确定有限自动机NFA并为非确定有限自动机设定状态变量;在所述非确定有限自动机中载入匹配表达式,并按照有向图运算符转换规则,将所述非确定有限自动机中的匹配表达式转换为有向图;根据所述状态变量中的状态位置,对进入所述非确定有限自动机的字符串中的字符开始匹配;若所述字符匹配成功则根据所述有向图中该位置所指向的最终位置更新所述状态变量,从所述更新的状态变量中的位置开始对下一字符进行匹配,直到获得符合所述匹配表达式的字符串或有字符匹配失败则匹配完成;当所述匹配完成时,并将所述状态变量置为开始位置。该专利是通过类似“((A*B|AC)D)”的逻辑运算符进行字符串匹配,该专利中的NFA算法是支持abc*cd,并且abc和cd中间不确定的字符*个数不限的情况,因此,相比较本发明所提出的应用场景,采用NFA算法虽然和一般的AC算法一样可以解决本发明所涉及的技术问题,但是,其各自因为AC算法自身实现过于固化和单板,以及NFA算法自身的适用灵活性过大,无法实现本发明所提出应用场合下的资源有效利用和计算性能的提高。
【发明内容】
本发明要解决的技术问题是在进行固定长度为n的字符串匹配识别时,相应的字符串中包含一个或者多个不确定字节,然而,上述字符串仍旧对应着同一个识别结果时,现有的AC算法会对于所述一个或者多个不确定字节仍然设定0-255的匹配位,并且相应一个或者多个不确定字节中0-255的匹配结果都对应着上述一个识别结果,此时会带来计算量上的浪费;这种情况下,现有的非确定有限自动机NFA算法是基于转移函数来实现当前输入与转移对象之间的切换,并且最终抵达终止状态(接受状态),因此,同样需要对上述一个护着多个不确定字节设置相应的转移函数,因此,相比较AC而言采用NFA算法并不能针对本发明所提出的应用场景中问题带来任何计算资源的节约和计算性能的提高。
本发明采用如下技术方案:
第一方面,本发明提供了一种基于字符串的快速匹配识别方法,包括:
确定字符串中存在动态变化的一个或者多个字符位,以及相应字符串中的静态字符位;
根据所述字符串中的静态字符位的内容信息和所述一个或者多个动态字符位,更新字符串映射库;
其中,所述字符串映射库中对应于所述一个或者多个动态字符位,相应的以预设的附加字符位进行标定。
优选的,所述字符串映射库包括一个或者多个数组阵列,所述数组阵列具体由一个或者多个数组对应字符排列顺序,以层级方式排列构成;其中,数组的级数与字符串中相应字符数量相对应;每一个数组包含数量上与完整字符个数相一致的数组单元,所述预设的附加字符位增设在每一个数组的最后字符位之后;其中,所述数组单元用于存储与之关联的下一级数组的地址。
优选的,完整字符个数的数组单元具体包括对应0x00-0xFF的总共256个数组单元,则所述附加字符对应设置为数组中的第257数组单元,其中,各数组单元用于存储其下一级数组的地址信息或者用于存储跳出当前数组阵列得到匹配结果的相应信息。
优选的,用于存储跳出当前数组阵列得到匹配结果的相应信息,具体包括:
对应每一字符串的数组阵列的最后一级数组中存储有跳转地址链接,所述跳转地址链接用于获取与所述字符串相匹配的解析结果;或者,
对应每一字符串的数组阵列的最后一级数组中存储有与所述字符串相匹配的解析结果。
优选的,字符串映射库已经存储有第一字符串,此时,在字符串映射库中导入新增的第二字符串,具体包括:
对于字符串首字符相同的第一字符串和第二字符串,将第一字符串的第一级数组复用给所述第二字符串;
对于第一字符串和第二字符串之间存在差异的第i个字符位,则在第一字符串的数组阵列中,位于相应第i级数组所在链路,新增一条数组来对应第二字符串中第i个字符位内容;从而相对于第i-1级数组,形成了两条第i级数组的下级链路。
优选的,在获取到一条第三字符串,需要通过所述字符串映射库,对于所述第三字符串所代表的信息进行解析时,所述方法还包括:
根据所述第三字符串的首字符位的内容,在字符串映射库的数组阵列中匹配出第一级数组中记录信息与所述第三字符串的首字符位的内容一致的一个或者多个候选数组阵列;
依次根据所述第三字符串的后续字符位的内容,筛选所述一个或者多个候选数组阵列,得到第三字符串对应的解析结果。
优选的,所述依次根据所述第三字符串的后续字符位的内容,筛选所述一个或者多个候选数组阵列,得到第三字符串对应的解析结果,具体包括:
将后续字符位设定为静态字符位进行匹配,若未匹配得到唯一的结果,则选择性的将后续字符位设定为动态字符位,并将调整后的后续字符位进行匹配,直到匹配到唯一的结果,或者,抵达跳出匹配循环条件后,反馈未匹配成功的消息给操作人员。
优选的,所述选择性的将后续字符位设定为动态字符位,具体包括:
从上一轮匹配过程中,最后失配的字符位调整为动态字符位,并以上一轮失配时,所述新调整为动态字符位的前一字符位所对应的数组为起始,进行当前轮的匹配过程;
若还出现下一个字符位失配,则重复上述调整过程,并完成整个字符串的匹配过程;
其中,对于同一字符位,若在其调整为动态字符位后,仍然未匹配成功,则确认抵达跳出匹配循环条件,并反馈未匹配成功的消息给操作人员。
优选的,所述确定字符串中存在动态变化的一个或者多个字符位,以及相应字符串中的静态字符位,具体包括:
比对预设时间段内的数据包中获取的第四字符串和第五字符串,若第四字符串和第五字符串之间相似的字符位的个数与差异的字符位的个数之间的个数比值结果大于预设阈值,则标注出所述第四字符串和第五字符串;
根据输入端反馈的所述第四字符串和第五字符串属于同一解析结果的确认消息;确定第四字符串和第五字符串之间存在差异的字符位为所述动态变化的字符位,并且第四字符串和第五字符串之间内容相同的字符位为所述静态字符位。
优选的,所述确定字符串中存在动态变化的一个或者多个字符位,以及相应字符串中的静态字符位,具体包括:
按照预设时间周期,分析字符映射库中是否存在多个末级数组可匹配到同一目标匹配结果情况;
若确认存在多个末级数组可匹配到同一目标匹配结果情况,则根据所述末级数组与前级数组的链接关系,获取各自数组阵列所对应的至少两个待整合字符串;
比对所述至少两个待整合字符串,得到待整合字符串之间动态变化的字符位和静态字符位;
根据所述动态变化的字符位和静态字符位,调整字符映射库中相应的数组阵列。
第二方面,本发明还提供了基于字符串的快速匹配识别装置,用于实现第一方面所述的基于字符串的快速匹配识别方法,所述装置包括:
至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行第一方面所述的基于字符串的快速匹配识别方法。
第三方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的基于字符串的快速匹配识别方法。
本发明将其中动态变化的字符位进行了标定,并可以通过在常规的字典树的数组中增设例如第257位,用于存储对应所述动态变化的字符位的下一级数组的链接信息,从而极大的简化了字典树的冗余程度。
【附图说明】
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种基于字符串的快速匹配识别方法的流程示意图;
图2是本发明实施例提供的一种新增数组单元后的数组结构示意图;
图3是本发明实施例提供的一种典型的数组阵列的结构示意图;
图4是本发明实施例提供的一种确定动态字节位和静态字节位的方法流程图;
图5是本发明实施例提供的一种在已有数组阵列中新增字符串的数组阵列方法流程图;
图6是本发明实施例提供的一种在已有数组阵列中新增字符串的数组阵列的过程示意图之一;
图7是本发明实施例提供的一种在已有数组阵列中新增字符串的数组阵列的过程示意图之二;
图8是本发明实施例提供的现有技术中的一种数组阵列的效果示意图;
图9是本发明实施例提供的一种利用本发明所提出的字符串映射库查找第三字符串的目标匹配结果的流程示意图;
图10是本发明实施例提供的对应图9中步骤402的展开实现方法流程图;
图11是本发明实施例提供的对应图9中步骤402的另一种展开实现方法流程图;
图12是本发明实施例提供一种更新字符串映射库的方法流程图;
图13是本发明实施例提供的一种基于字符串的快速匹配识别装置的结构示意图。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。
在本发明各实施例中,类似“第一”、“第二”的限定词,仅仅是为了方便描述技术方案中的同一名称对象同时出现两个主体的情景,并非给予特殊的限定,其实际表现可以是具体场景中满足相应功能描述的任一两个对象主体。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
实施例1:
本发明实施例1提供了一种基于字符串的快速匹配识别方法,适用于各种涉及字符串匹配得到目标匹配结果的场合,尤其是字符串中还包含有动态变化的一个或者多个字符位,例如,在DPI技术中对网络数据报文做应用识别和恶意流量分析时便会出现上述字符串中特定字符位会动态变化的情景。如图1所示,方法包括以下步骤:
在步骤201中,确定字符串中存在动态变化的一个或者多个字符位,以及相应字符串中的静态字符位。
在具体实现方式中,所述确定字符串中存在动态变化的一个或者多个字符位可以是在所述字符串映射库生成/更新的多个阶段进行;按照确定的时机和方式不同,可以分为以下几种:
方式一、可以是经由操作人员的统计或者观察经验,在为该字符串在字符串映射库生成初始数组阵列时,便确定了字符串中的动态字符位;例如:操作人员在创建字符串“Hello4world”在字符串映射库中的关联数组阵列时,就已经确认其中的第6个字符位为动态字节位(即其包含的参数值是会动态变化的,例如:当前显示的参数值为“4”,而下一个数据包的参数值可能就是“5”了,但是两个字符串对应同一个匹配结果,例如都对应“HelloWorld应用”所发出的数据包)。
方式二、可以采用一种相比较方式一更为智能化的方式,即将相应的识别出包含随机位的字符串的过程交由计算机来完成;具体方式如下:
计算机(在本发明实施例中可以理解为服务器)创建了对应多个字符串的多个映射数组阵列后,遍历字符串映射库中的各字符串和相应的匹配结果,若查找到存在两个不同的字符串其所对应的匹配结果相同,则以拟合两者的数组阵列的方式更新字符串映射库。而其中,创建了对应多个字符串的多个映射数组阵列,可以是由操作人员确认和建立的。相比较上述方式一而言,方式二利用计算机的后期分析功能,减小了前期操作人员确认和建立工作的复杂度。
其中,所述拟合两者的数组阵列具体实现为对于其中的动态字符位所对应级的数组,调整其存储下一级关联数组的数组单元为专门为动态字符位设置的相应数组单元(例如:数组中的第256位,在具体实现过程中也可以设定为数组中的第0位的前一位,或者在数组中的其它任意位置增设,当然,优选的方式是在数组头部或者尾部设置),并将该级数组之后的多条分支消减为一条分支(此时是仅考虑两个字符串之间仅有一个字符位为动态变化的情况)。
在步骤202中,根据所述字符串中的静态字符位的内容信息和所述一个或者多个动态字符位,更新字符串映射库。
其中,所述字符串映射库中对应于所述一个或者多个动态字符位,相应的以预设的附加字符位进行标定。如上述在步骤201中所描述的,所述附加字符位优选的是在数组的起始位置之前或者末尾位置之后设置。如图2所示,为在一标准的0-255数组的末尾增设数组单元作为所述附加字符位的标定,其中,所述附加字符位的标定是用于存储其下一级数组的链接地址使用。
本发明实施例首先提供了一种包含动态变化特性字符位的字符串映射库的建立,相比较现有技术中需要对包含有随机位的字符串中每一字符位都需要对其出现过的参数值建立字典树,极限的时候一个随机的字符位存在0-255种可能的参数值,从而会极大的增加字典树的体积,而对于计算机处理时需要将相应字典树加载到内存中,此时,将会造成内容不必要的资源浪费。在本发明实施例中,通过结合计算机统计和/或操作人员鉴定,将现有技术中用于创建字典树的字符串做了预先处理,即将其中动态变化的字符位进行了标定,并可以通过在常规的字典树的数组中增设例如第257位,用于存储对应所述动态变化的字符位的下一级数组的链接信息,从而极大的简化了字典树的冗余程度。
为了能够更为清楚的阐述本发明实施例中所涉及的各种处理过程和操作内容,接下来对于本发明实施例中所采用的数组阵列和字符串之间的关系做较为相近的阐述。具体的,如图3所示,所述字符串映射库包括一个或者多个数组阵列,所述数组阵列具体由一个或者多个数组对应字符排列顺序,以层级方式排列构成;其中,数组的级数与字符串中相应字符数量相对应;每一个数组包含数量上与完整字符个数相一致的数组单元,所述预设的附加字符位增设在每一个数组的最后字符位之后;其中,所述数组单元用于存储与之关联的下一级数组的地址。
以图3为例,为一典型的映射两个字符串的数组阵列,其沿用了图2所示的数组展示方式,其中,上述两个字符串我们分别成为字符串A和字符串B,通过图3可知,其中字符串A和字符串B的第一个字符位的参数值相同,均为0x04,因此字符串A和字符串B共用第一级数组,而字符串A和字符串B从第二字符位开始便产生了分歧,图3中分别用粗的箭头线和细的箭头线分别代表字符串A和字符串B所对应的数组阵列中各级数组的链接关系。通过上述分析和图3所呈现内容,可以知道字符串A的内容为“0x04,0x05,0xFB,0x02”而字符串B的内容为“0x04,0x04,X,0xFD”,其中,字符串B中的X便表示其表达的参数值为一动态变化的参数值,而相应的参数值所在的字符串B的第三字符位便为一动态字符位。
以图3为例,完整字符个数的数组单元具体包括对应0x00-0xFF的总共256个数组单元,则所述附加字符对应设置为数组中的第257数组单元,其中,各数组单元用于存储其下一级数组的地址信息或者用于存储跳出当前数组阵列得到匹配结果的相应信息。图3中所示的箭头关系,便为所述各数组单元用于存储其下一级数组的地址信息的表现;而所述用于存储跳出当前数组阵列得到匹配结果的相应信息,通常是指对应字符串中最后一个字符位的相应级数的数组中的数组单元,以图3的字符串A为例,其中,第四级数组中的相应标注了网格状阴影的数组单元中存储了跳出当前数组阵列得到匹配结果的相应信息(例如:在所述标注了网格状阴影的数组单元中直接存储目标匹配结果;或者,在所述标注了网格状阴影的数组单元中存储用于寻址所述目标匹配结果的标识信息;其中,所述目标匹配结果的标识信息可以表现为一串数值,用于到指定的表格中查找目标匹配结果)。
在本发明实施例中,针对步骤201中涉及的所述确定字符串中存在动态变化的一个或者多个字符位,以及相应字符串中的静态字符位,在本发明实施例还提供了一种具体的实现方式(可以认为是步骤201中所介绍的方式一的一种具体实现),如图4所示,具体包括以下执行步骤:
在步骤2011中,比对预设时间段内的数据包中获取的第四字符串和第五字符串,若第四字符串和第五字符串之间相似的字符位的个数与差异的字符位的个数之间的个数比值结果大于预设阈值,则标注出所述第四字符串和第五字符串。
其中,所述标注出所述第四字符串和第五字符串,可以表现为向操作人员反馈确认请求消息,所述确认请求消息中携带所述第四字符串和第五字符串的内容,以便操作人员确认所述第四字符串和第五字符串是否映射为同一目标匹配结果,从而进一步证实字符串中的动态变化字符位。
其中,预设时间段内,可以是操作人员在系统侧设置的时间参数,即供给系统(或称为服务器)判断是否需要进行一轮动态字符位识别过程的操作依据。所述预设阈值可以是一个定值,也可以是一个通过关系式计算出来的结果,在本发明实施例中优选的采用后者,例如:所述预设阈值可以是字符串长度的60%-80%。
在步骤2012中,根据输入端反馈的所述第四字符串和第五字符串属于同一解析结果的确认消息;确定第四字符串和第五字符串之间存在差异的字符位为所述动态变化的字符位,并且第四字符串和第五字符串之间内容相同的字符位为所述静态字符位。
其中,输入端具体指操作人员侧的输入端,可以表现为键盘,触摸板,手持智能终端等等。
实施例2:
在本发明实施例1已经展示了一个较为完整的字符串映射库结构特征后,本发明实施例则从如何在已经存在的字符串映射库中,新增新的字符串及其数组阵列的方法过程。在本发明实施例具体展开描述前,假设字符串映射库已经存储有第一字符串,此时,在字符串映射库中导入新增的第二字符串,如图5所示,所述方法具体包括:
在步骤301中,对于字符串首字符相同的第一字符串和第二字符串,将第一字符串的第一级数组复用给所述第二字符串。
以实施例1中介绍的字符串A和字符串B分别作为本发明实施例所述的第一字符串和第二字符串展开了描述。如图6所示,为执行了步骤301之后,字符串B复用了字符串A的第一级数组后的效果示意图,此时,相比较初始状态时,图6所示的第一级数组中相应标注有实心黑圆的数组单元,其内容从原本只存储字符串A的第二级数组的链接地址信息,更新为同时存储字符串A的第二级数组的链接地址信息和字符串B的第二级数组的链接地址信息。在具体实现时,若第一级数组被N个字符串复用时,第一级数组中相应数组单元中(例如图6中标注有实心黑圆的数组单元)也将同时存储N个第二级数组的链接地址信息。
在步骤302中,对于第一字符串和第二字符串之间存在差异的第i个字符位,则在第一字符串的数组阵列中,位于相应第i级数组所在链路,新增一条数组来对应第二字符串中第i个字符位内容;从而相对于第i-1级数组,形成了两条第i级数组的下级链路。其中,i为大于等于2的自然数。
在字符串A和字符串B之间,所述第i个字符位表现为第二字符位,如图7所示,是在复用了字符串A的第一级数组后,建立被复用的第一级数组和新生成的字符串B的第二字符位所对应的第二级数组之间的链路关系的效果示意图。进一步的将字符串B后续的字符位所对应的各级数组建立完成相应链路关系,便可得到如图3所示的数组阵列。
通过上述步骤301-302的新建第二字符串的数组阵列过程,不难推出本发明实施例相比较现有字典树技术来说,本发明实施例1其为动态变化字符位增设新的数组单元进行标识,对于内存空间占用上的突出改进。仍然以图3所示的字符串A和字符串B为例,现以图8为例展示一个现有技术中字符串B的第三字符位包含三个动态参数值的情况,通过图8中第三级数组中标注细线的数组可知所述三个动态参数值为0x04、0xFC、0xFD,通过图8可以看到现有技术中对于有多少个对应第三级数组中的动态参数值的数组个数,相应的在第四级数组中对应同一静态字符位的数组也会被复制三次分别与动态参数值为0x04、0xFC、0xFD所对应的第三级数组建立各自的链路关系。现有技术中对于动态字符位不做区分处理的方式,相比较本根据发明实施例提出的解决方案所获得的数组阵列,可以通过同一对字符串A和字符串B分别通过本发明实施例所提出方案所获得的数组阵列(如图3所示)和通过现有技术生成字符映射库的方式得到的数组阵列(如图8所示)直观的比较得到在存储体积上本发明实施例拥有优越的改进效果。需要强调的是,图8所示的仅仅是字符串B的第三字符位仅拥有三个动态参数值的情况,在极端情况下,若字符串B的第三字符位拥有256个动态参数值,则相应的数组陈列中从第三级数组开始,后续的字符串B中的字符位所对应的数组均需要复制256次,这将会带来分析匹配过程中内存资源的极大损耗。
实施例3:
在通过实施例1介绍了本发明所提出的字符映射库架构,并通过实施例2展示了在本发明实施例所提出的字符映射库架构中如何对于新增的一条字符串生成其在字符映射库中的数组阵列的过程。本发明实施例3进一步从字符映射库使用过程中的对于获取到一第三字符串,如何通过本发明实施例所提出的字符映射库架构完成目标匹配结果获取的过程进行详尽的阐述。如图9所示,所述过程包括以下执行步骤:
在步骤401中,根据所述第三字符串的首字符位的内容,在字符串映射库的数组阵列中匹配出第一级数组中记录信息与所述第三字符串的首字符位的内容一致的一个或者多个候选数组阵列。
上述一个或者多个候选数组阵列是指在第一级数组之后仅有一条链路抵达最终的目标匹配结果的,则称为一个候选数组阵列;而对于第一级数组之后存在多条链路抵达多个目标匹配结果的,则称为多个候选数组阵列。
在步骤402中,依次根据所述第三字符串的后续字符位的内容,筛选所述一个或者多个候选数组阵列,得到第三字符串对应的解析结果。
在本发明实施例中,步骤402中所涉及的所述依次根据所述第三字符串的后续字符位的内容,筛选所述一个或者多个候选数组阵列,得到第三字符串对应的解析结果,如图10所示,具体包括:
在步骤4021中,将后续字符位设定为静态字符位进行匹配。
在步骤4022中,若未匹配得到唯一的结果,则选择性的将后续字符位设定为动态字符位,并将调整后的后续字符位进行匹配,直到匹配到唯一的结果,或者,抵达跳出匹配循环条件后,反馈未匹配成功的消息给操作人员。
其中,所述选择性的将后续字符位设定为动态字符位,具体包括:从上一轮匹配过程中,最后失配的字符位调整为动态字符位,并以上一轮失配时,所述新调整为动态字符位的前一字符位所对应的数组为起始,进行当前轮的匹配过程;若还出现下一个字符位失配,则重复上述调整过程,并完成整个字符串的匹配过程;其中,对于同一字符位,若在其调整为动态字符位后,仍然未匹配成功,则确认抵达跳出匹配循环条件,并反馈未匹配成功的消息给操作人员。
在本发明实施例中,除了可以采用上述步骤4021-4022所述的单线程的试探性的匹配方法外,还可以采用一种多线程的并行试探方法,如图11所示,具体阐述如下:
在步骤4021’中,读取各候选数组阵列中,预设长度的后续各级数组中的字符位信息,并与第三字符串中相应字符位中的参数值进行匹配。
在步骤4022’中,经过步骤4021’得到一轮筛选结果,筛选结果中会剔除一部分候选数组阵列,此时,再对于剩下的候选数组阵列重复类似步骤4021’的操作过程,直到匹配到唯一的结果(即目标匹配结果),或者,抵达跳出匹配循环条件后,反馈未匹配成功的消息给操作人员。
相比较上述步骤4021-4022的单线程、带折返匹配过程,上述步骤4021’-4022’所提出的方法效率更高,当然,多线程的执行过程或者直接提取候选数组阵列中的预设长度的后续各级数组中的字符位信息,也会带来CPU资源的更多的占用,因此,两种处理流程各自拥有各自的优势。
实施例4:
在实施例1中,已经给出了一种确定字符串中存在动态变化的一个或者多个字符位,以及相应字符串中的静态字符位的具体实现方法,但是,在实施例1中相应具体描述的确定方法是需要操作人员介入的,并且适用于初期还未针对所分析的多个字符串任意一个生成有数组阵列的情况。而作为本发明实施例所提出的字符映射库架构中可能涉及的情况,除了实施例1中展开描述的在初期就给予字符串中动态变化字符位和静态字符位进行识别外,本发明实施例还提出了一种无需操作人员过多接入做判别操作的,并且是在生成各对应各字符串的数组阵列后,由服务器(系统)自动鉴别出字符串间的动态变化字符位的方法,是一种前期粗放式建立数组阵列,后期逐渐收拢的方法(可以认为是实施例1中步骤201中所介绍的方式二的一种具体实现)。如图12所示,具体包括以下步骤:
在步骤501中,按照预设时间周期,分析字符映射库中是否存在多个末级数组可匹配到同一目标匹配结果情况。
其中,预设时间周期可以是1天、1周或者1个月,具体根据实际情况进行设定,在此不做特殊限定。
其中,所述末级数组是指字符映射库中对应一个完整字符串的最后一级数组,例如图3所示的,对应字符串A和字符串B的数组阵列中,其第四级数组即为字符串A和字符串B的末级数组。
其中,按照之前实施例所描述的两种实现方式,在方式一中,若所述末级数组中直接存储了目标匹配结果,则可以直接调取字符映射库中各末级数组中存储的目标匹配结果进行比对,若比对结果相同则确认存在多个末级数组可匹配到同一目标匹配结果情况。在方式二中,若所述末级数组中直接存储了对应目标匹配结果的标识信息,则同样可以直接调取字符映射库中各末级数组中存储的对应目标匹配结果的标识信息,若比对结果相同则确认存在多个末级数组可匹配到同一目标匹配结果情况。
在步骤502中,若确认存在多个末级数组可匹配到同一目标匹配结果情况,则根据所述末级数组与前级数组的链接关系,获取各自数组阵列所对应的至少两个待整合字符串。
其中,所述待整合字符串是根据各数组阵列中的数组间的链路关系反推得到的,以图6所示的数组阵列为例,根据其第四级数组中存储内容的数组单元的序号,确定第四级数组所对应的字符位的参数值,其中,图6所示的第四级数组所对应的字符位的参数值为0x02;而通过数组间链路关系得到第三级数组中存储有内容的数组单元序号为0xFB,因此,第三级数组所对应的字符位的参数值为0xFB,以此类推得到完整的待整合字符串A为“0x04,0x05,0xFB,0x02”。
在步骤503中,比对所述至少两个待整合字符串,得到待整合字符串之间动态变化的字符位和静态字符位。
现以复用图8所示数组阵列,作为本发明实施例中描述的一种应用场景,其中,图8所示的数组阵列包含了字符串A、字符串B1、字符串B2和字符串B3(其中,字符串B1、字符串B2和字符串B3分别对应图8细线箭头所标注的且位于每一级数组中依次从上到下排列的相应数组),因此,通过步骤501已经根据第四级数组中所包含的内容,确认了字符串B1、字符串B2和字符串B3的目标匹配结果相同;并通过步骤502已经反推出相应字符串B1、字符串B2和字符串B3分别为“0x04,0x04,0x04,0xFD”、“0x04,0x04,0xFC,0xFD”和“0x04,0x04,0xFD,0xFD”,则进一步通过步骤503可以确认其中静态字符位分别为:第一字符位“0x04”,第二字符位“0x04”,第四字符位“0xFD”;而相应的动态变化的字符位为:第三字符位。
在步骤504中,根据所述动态变化的字符位和静态字符位,调整字符映射库中相应的数组阵列。
仍然以图8所示的状态图作为执行完步骤504之前的数组阵列,而相应执行完步骤504之后,则字符映射表中相应数组阵列更新为如图3所示的状态图。
实施例5:
本发明在提供上述针对本发明所提出的字符映射库架构及其各个环节的使用方法后,在本发明实施例中还提出了一种基于字符串的快速匹配识别装置,用于执行上述各实施例所提出的方法,如图13所示,本实施例的基于字符串的快速匹配识别装置包括一个或多个处理器21以及存储器22。其中,图13中以一个处理器21为例。
处理器21和存储器22可以通过总线或者其他方式连接,图13中以通过总线连接为例。
存储器22作为一种基于字符串的快速匹配识别方法和装置非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1中的基于字符串的快速匹配识别方法(例如,图1、4、5、9-12所示的流程图)。处理器21通过运行存储在存储器22中的非易失性软件程序、指令以及模块,从而执行基于字符串的快速匹配识别装置的各种功能应用以及数据处理,即实现实施例1-4的基于字符串的快速匹配识别方法。
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
值得说明的是,上述装置内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种基于字符串的快速匹配识别方法,其特征在于,包括:
确定字符串中存在动态变化的一个或者多个字符位,以及相应字符串中的静态字符位;
根据所述字符串中的静态字符位的内容信息和所述一个或者多个动态字符位,更新字符串映射库;
其中,所述字符串映射库中对应于所述一个或者多个动态字符位,相应的以预设的附加字符位进行标定;
所述确定字符串中存在动态变化的一个或者多个字符位,以及相应字符串中的静态字符位,具体包括:
比对预设时间段内的数据包中获取的第四字符串和第五字符串,若第四字符串和第五字符串之间相似的字符位的个数与差异的字符位的个数之间的个数比值结果大于预设阈值,则标注出所述第四字符串和第五字符串;
根据输入端反馈的所述第四字符串和第五字符串属于同一解析结果的确认消息;确定第四字符串和第五字符串之间存在差异的字符位为所述动态变化的字符位,并且第四字符串和第五字符串之间内容相同的字符位为所述静态字符位;
在获取到一条第三字符串,需要通过所述字符串映射库,对于所述第三字符串所代表的信息进行解析时,所述方法还包括:
根据所述第三字符串的首字符位的内容,在字符串映射库的数组阵列中匹配出第一级数组中记录信息与所述第三字符串的首字符位的内容一致的一个或者多个候选数组阵列;
依次根据所述第三字符串的后续字符位的内容,筛选所述一个或者多个候选数组阵列,得到第三字符串对应的解析结果;
所述依次根据所述第三字符串的后续字符位的内容,筛选所述一个或者多个候选数组阵列,得到第三字符串对应的解析结果,具体包括:
将后续字符位设定为静态字符位进行匹配,若未匹配得到唯一的结果,则选择性的将后续字符位设定为动态字符位,并将调整后的后续字符位进行匹配,直到匹配到唯一的结果,或者,抵达跳出匹配循环条件后,反馈未匹配成功的消息给操作人员;
其中,所述字符串映射库包括一个或者多个数组阵列,所述数组阵列具体由一个或者多个数组对应字符排列顺序,以层级方式排列构成;其中,数组的级数与字符串中相应字符数量相对应;每一个数组包含数量上与完整字符个数相一致的数组单元,所述预设的附加字符位增设在每一个数组的最后字符位之后;其中,所述数组单元用于存储与之关联的下一级数组的地址。
2.根据权利要求1所述的基于字符串的快速匹配识别方法,其特征在于,完整字符个数的数组单元具体包括对应0x00-0xFF的总共256个数组单元,则所述附加字符对应设置为数组中的第257数组单元,其中,各数组单元用于存储其下一级数组的地址信息或者用于存储跳出当前数组阵列得到匹配结果的相应信息。
3.根据权利要求2所述的基于字符串的快速匹配识别方法,其特征在于,用于存储跳出当前数组阵列得到匹配结果的相应信息,具体包括:
对应每一字符串的数组阵列的最后一级数组中存储有跳转地址链接,所述跳转地址链接用于获取与所述字符串相匹配的解析结果;或者,
对应每一字符串的数组阵列的最后一级数组中存储有与所述字符串相匹配的解析结果。
4.根据权利要求1所述的基于字符串的快速匹配识别方法,其特征在于,字符串映射库已经存储有第一字符串,此时,在字符串映射库中导入新增的第二字符串,具体包括:
对于字符串首字符相同的第一字符串和第二字符串,将第一字符串的第一级数组复用给所述第二字符串;
对于第一字符串和第二字符串之间存在差异的第i个字符位,则在第一字符串的数组阵列中,位于相应第i级数组所在链路,新增一条数组来对应第二字符串中第i个字符位内容;从而相对于第i-1级数组,形成了两条第i级数组的下级链路。
5.根据权利要求1所述的基于字符串的快速匹配识别方法,其特征在于,所述选择性的将后续字符位设定为动态字符位,具体包括:
从上一轮匹配过程中,最后失配的字符位调整为动态字符位,并以上一轮失配时,新调整为动态字符位的前一字符位所对应的数组为起始,进行当前轮的匹配过程;
若还出现下一个字符位失配,则重复上述调整过程,并完成整个字符串的匹配过程;
其中,对于同一字符位,若在其调整为动态字符位后,仍然未匹配成功,则确认抵达跳出匹配循环条件,并反馈未匹配成功的消息给操作人员。
6.一种基于字符串的快速匹配识别装置,其特征在于,包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行权利要求1-5任一所述的基于字符串的快速匹配识别方法。
CN201910339570.6A 2018-04-20 2018-04-20 一种基于字符串的快速匹配识别方法和装置 Active CN110008385B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910339570.6A CN110008385B (zh) 2018-04-20 2018-04-20 一种基于字符串的快速匹配识别方法和装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201810362354.9A CN108628966B (zh) 2018-04-20 2018-04-20 一种基于字符串的快速匹配识别方法和装置
CN201910339570.6A CN110008385B (zh) 2018-04-20 2018-04-20 一种基于字符串的快速匹配识别方法和装置

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201810362354.9A Division CN108628966B (zh) 2018-04-20 2018-04-20 一种基于字符串的快速匹配识别方法和装置

Publications (2)

Publication Number Publication Date
CN110008385A CN110008385A (zh) 2019-07-12
CN110008385B true CN110008385B (zh) 2020-12-22

Family

ID=63694204

Family Applications (4)

Application Number Title Priority Date Filing Date
CN201910339586.7A Active CN110096628B (zh) 2018-04-20 2018-04-20 一种基于字符串的快速匹配识别方法和装置
CN201910339570.6A Active CN110008385B (zh) 2018-04-20 2018-04-20 一种基于字符串的快速匹配识别方法和装置
CN201910339599.4A Active CN110083746B (zh) 2018-04-20 2018-04-20 一种基于字符串的快速匹配识别方法和装置
CN201810362354.9A Active CN108628966B (zh) 2018-04-20 2018-04-20 一种基于字符串的快速匹配识别方法和装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201910339586.7A Active CN110096628B (zh) 2018-04-20 2018-04-20 一种基于字符串的快速匹配识别方法和装置

Family Applications After (2)

Application Number Title Priority Date Filing Date
CN201910339599.4A Active CN110083746B (zh) 2018-04-20 2018-04-20 一种基于字符串的快速匹配识别方法和装置
CN201810362354.9A Active CN108628966B (zh) 2018-04-20 2018-04-20 一种基于字符串的快速匹配识别方法和装置

Country Status (1)

Country Link
CN (4) CN110096628B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110659489B (zh) * 2019-09-20 2023-03-24 安天科技集团股份有限公司 针对字符串拼接行为的威胁检测方法、装置及存储介质
CN111061972B (zh) * 2019-12-25 2023-05-16 武汉绿色网络信息服务有限责任公司 一种用于url路径匹配的ac查找优化方法和装置
US11586615B2 (en) * 2020-07-29 2023-02-21 Bank Of America Corporation System for generation of resource identification numbers to avoid electronic misreads
CN113641672A (zh) * 2021-07-30 2021-11-12 武汉思普崚技术有限公司 一种多维度快速匹配方法、装置及存储介质
CN113609352B (zh) * 2021-08-03 2023-08-04 北京恒安嘉新安全技术有限公司 字符串检索方法、装置、计算机设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101807184A (zh) * 2009-02-16 2010-08-18 阿尔卡特朗讯 用于检索包含通配符的字符串的方法和系统
CN102646115A (zh) * 2012-02-17 2012-08-22 北京星网锐捷网络技术有限公司 Ac状态机的构建方法及装置
CN103414600A (zh) * 2013-07-19 2013-11-27 华为技术有限公司 近似匹配方法和相关设备及通信系统

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6718325B1 (en) * 2000-06-14 2004-04-06 Sun Microsystems, Inc. Approximate string matcher for delimited strings
US6917936B2 (en) * 2002-12-18 2005-07-12 Xerox Corporation Method and apparatus for measuring similarity between documents
CN101441664A (zh) * 2008-12-03 2009-05-27 北京启明星辰信息技术股份有限公司 匹配规则包含可选字符的并行多模式匹配的方法及系统
CN102142009B (zh) * 2010-12-09 2013-08-14 华为技术有限公司 一种正则表达式匹配的方法及装置
CN103186640B (zh) * 2011-12-31 2016-05-25 百度在线网络技术(北京)有限公司 采用基于ac算法的正则匹配的流量过滤方法及装置
CN104160396B (zh) * 2012-03-01 2017-06-16 国际商业机器公司 在字符串集之中查找最佳匹配字符串的方法和系统
US8990232B2 (en) * 2012-05-15 2015-03-24 Telefonaktiebolaget L M Ericsson (Publ) Apparatus and method for parallel regular expression matching
US8972450B2 (en) * 2013-04-17 2015-03-03 National Taiwan University Multi-stage parallel multi-character string matching device
CN103685222A (zh) * 2013-09-05 2014-03-26 北京科能腾达信息技术股份有限公司 基于确定性有穷状态自动机的数据匹配检测方法
CN104750725B (zh) * 2013-12-30 2019-10-18 天津亿阳信通科技有限公司 一种基于非确定有限自动机的字符串搜索方法及其装置
CN105404635B (zh) * 2014-09-16 2019-05-28 华为技术有限公司 字符串匹配的方法、设备和异构计算系统
CN107193843B (zh) * 2016-03-15 2020-08-28 阿里巴巴集团控股有限公司 一种基于ac自动机和后缀表达式的字符串筛选方法及装置
CN107545071B (zh) * 2017-09-21 2020-02-07 北京神州泰岳智能数据技术有限公司 一种字符串匹配的方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101807184A (zh) * 2009-02-16 2010-08-18 阿尔卡特朗讯 用于检索包含通配符的字符串的方法和系统
CN102646115A (zh) * 2012-02-17 2012-08-22 北京星网锐捷网络技术有限公司 Ac状态机的构建方法及装置
CN103414600A (zh) * 2013-07-19 2013-11-27 华为技术有限公司 近似匹配方法和相关设备及通信系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于众核硬件的模式匹配算法加速技术研究;刘旭东;《中国优秀硕士学位论文全文数据库 信息科技辑》;20150815(第8期);第I137-32页 *

Also Published As

Publication number Publication date
CN110008385A (zh) 2019-07-12
CN108628966A (zh) 2018-10-09
CN110096628B (zh) 2021-01-22
CN108628966B (zh) 2019-06-14
CN110083746A (zh) 2019-08-02
CN110096628A (zh) 2019-08-06
CN110083746B (zh) 2021-01-22

Similar Documents

Publication Publication Date Title
CN110008385B (zh) 一种基于字符串的快速匹配识别方法和装置
US8914320B2 (en) Graph generation method for graph-based search
CN105794172A (zh) 网络设备中的报文解析和密钥生成
CN104579941A (zh) 一种OpenFlow交换机中的报文分类方法
JP2003196295A (ja) ツリー型知識ベース検索のルックアップ・パフォーマンスを向上させる方法
CN111008201A (zh) 并行修改和读取状态树的方法和装置
CN111935081B (zh) 一种数据包脱敏方法和装置
CN112468410B (zh) 一种增强网络流量特征准确率的方法和装置
US20170142013A1 (en) Search apparatus, search configuration method, and search method
CN113946546B (zh) 异常检测方法、计算机存储介质及程序产品
CN110071871A (zh) 一种大模式集ip地址匹配方法
WO2015192742A1 (zh) 一种查找装置、查找方法和配置方法
CN108304467B (zh) 用于文本间匹配的方法
CN114422620B (zh) 一种基于知识蒸馏的数据包分类方法及相关装置
CN112866229B (zh) 一种基于状态图的高速网络流量识别方法及系统
CN112187935B (zh) 信息识别方法与只读内存
CN112887280B (zh) 一种基于自动机的网络协议元数据提取系统及方法
KR100662254B1 (ko) 라우팅 시스템에서의 패킷 분류 장치 및 이를 위한 룰 구축 방법
CN114490861A (zh) 遥测数据解析方法、装置、设备及介质
CN110581823B (zh) 一种非公开数据库协议请求数据包的解析方法
CN113642594A (zh) 报文分类方法及装置、电子设备、可读介质
CN115801020B (zh) 确定有限状态自动机压缩方法、匹配方法、设备及介质
US11184282B1 (en) Packet forwarding in a network device
CN113778893B (zh) 对话机器人测试用例生成方法、装置、设备及存储介质
CN112769813B (zh) 一种多前缀掩码五元组的匹配方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant