一种TCP协议报文过滤方法及装置
技术领域
本发明涉及报文处理技术领域,具体而言,涉及一种TCP协议报文过滤方法及装置。
背景技术
对于网络协议中的TCP协议,是一个面向流的数据处理协议,报文内容没有边界,需要上层应用自定义协议边界来处理。基于上述原因,在底层协议栈处理一些基于TCP协议的上层应用协议,如http协议的报文内容,在需要处理一些白名单过滤的模块开发时,往往会在复杂的外部网络环境中,由于报文的粘包、半包导致出现一些漏包处理问题。对这些出现粘包、半包的报文不易进行分析,也不易进行追踪处理,而未被正确处理的报文,则又会进一步影响系统的可用性,对于一些黑名单处理模块则会影响其系统的安全性。
发明内容
本发明的目的在于提供一种TCP协议报文过滤方法及装置,用以改善现有技术中由于报文的粘包和半包导致的漏包处理的问题。
第一方面,本申请实施例提供一种TCP协议报文过滤方法,该方法包括:获取报文,并对报文进行预筛选处理,以获取目标报文,根据预先创建的白名单匹配表中预先设置的至少一个待过滤白名单字符串对目标报文进行白名单匹配,得到匹配结果。最后根据匹配结果和/或白名单匹配表对目标报文进行过滤处理。
上述实现过程中,先对报文进行预筛选处理,以筛选出需要进行过滤的目标报文,可以将不是过滤处理的其他报文筛选掉,从而提高后续过滤处理的效率。然后可以根据白名单匹配表中预先设置的至少一个待过滤白名单字符串对目标报文进行白名单匹配,若匹配结果表示匹配通过则可以直接放行该目标报文。而若匹配结果表示匹配不通过,则可以继续根据匹配结果以及白名单匹配表对目标报文进行进一步的过滤处理,从而可以保证在报文出现粘包的情况下,能够精确的根据报文内容进行过滤,而不会因为粘包导致部分数据被忽略处理。
在本发明的一些实施例中,对报文进行预筛选处理,以获取目标报文的步骤,包括:获取报文的协议类型。若协议类型为目标类型,则获取报文的目标端口号。若目标端口号为预设端口号,则获取报文的长度。若长度不小于预设长度,则确定报文为目标报文。
上述实现过程中,获取报文后可以根据报文的类型以及端口等信息进行初步的预筛选处理,使得可以获取到待过滤的目标报文,后续可以直接对目标报文进行匹配过滤处理,从而提高过滤速度。
在本发明的一些实施例中,根据预先创建的白名单匹配表中预先设置的至少一个待过滤白名单字符串对目标报文进行白名单匹配,得到匹配结果的步骤,包括:获取目标报文的报文数据。若至少一个待过滤白名单字符串中存在报文数据的子串,则确定匹配结果为全匹配。若至少一个待过滤白名单字符串中不存在报文数据的子串,则确定匹配结果为未匹配。
上述实现过程中,若至少一个待过滤白名单字符串中存在目标报文的报文数据的子串,也就是说匹配结果为全匹配,则表示该目标报文符合过滤放行的规则,则可以放行该目标报文。
在本发明的一些实施例中,根据匹配结果和/或白名单匹配表对目标报文进行过滤处理的步骤,包括:若匹配结果为未匹配,则获取目标报文的标识字符,查找白名单匹配表中是否存在标识字符。若不存在,则根据至少一个待过滤白名单字符串以及目标报文的报文数据进行头部匹配处理。若头部匹配处理中匹配上的报文数据的最大匹配长度大于等于预设值,则获取头部匹配的匹配信息,将匹配信息以及匹配上的报文数据存储至白名单匹配表中后,放行目标报文。
上述实现过程中,白名单匹配表中不存在标识字符,则表示之前没有与该目标报文相同的报文进行过滤处理,而又因为匹配结果显示该目标报文不完整,因此可以对该目标报文进行头部匹配处理,以获取其匹配上的报文数据以及匹配信息,便于后续对与该目标报文相同的报文进行处理,以避免过滤过程中出现漏包的情况。
在本发明的一些实施例中,根据匹配结果和/或白名单匹配表对目标报文进行过滤处理的步骤,还包括:查找白名单匹配表中是否存在标识字符。若存在,则获取白名单匹配表中与标识字符对应的匹配上的报文数据以及其匹配信息。若匹配信息中的匹配类型为头部匹配,则根据至少一个待过滤白名单字符串以及目标报文的报文数据进行尾部匹配处理。若尾部匹配处理的最大匹配长度大于等于预设值,则获取头部匹配的匹配信息以及尾部匹配的匹配信息。根据头部匹配的匹配信息以及尾部匹配的匹配信息计算匹配值。若匹配值大于等于预设匹配值,则放行目标报文。
上述实现过程中,设置标识字符可以对相同的报文进行标识,以在获取到与之前进行过滤过的报文相同的目标报文后,可以根据之前匹配的匹配信息以及对目标报文进行的本次匹配进行综合判断,判断其是否已接收到所有相同的报文,从而保证可以精准的对粘包以及半包的情况进行过滤处理。
在本发明的一些实施例中,根据头部匹配的匹配信息以及尾部匹配的匹配信息计算匹配值的步骤之后,包括:若匹配值小于预设匹配值,则将标识字符对应的匹配上的报文数据以及目标报文的尾部匹配报文数据拼接得到拼接报文数据。判断拼接报文数据与至少一个待过滤白名单字符串是否一致,若一致,则放行目标报文。
在本发明的一些实施例中,将标识字符对应的报文数据以及目标报文的尾部匹配报文数据拼接得到拼接报文数据的步骤之后,包括:若拼接报文数据为至少一个待过滤白名单字符串的子串,则将白名单匹配表中与标识字符对应的匹配上的报文数据更新为拼接报文数据。将白名单匹配表中与标识字符对应的匹配信息中的匹配类型修改为中部匹配,并放行目标报文。
第二方面,本申请实施例提供一种TCP协议报文过滤装置,装置包括:报文预处理模块,用于获取报文,并对报文进行预筛选处理,以获取目标报文。初步匹配模块,用于根据预先创建的白名单匹配表中预先设置的至少一个待过滤白名单字符串对目标报文进行白名单匹配,得到匹配结果。过滤模块,用于根据匹配结果和/或白名单匹配表对目标报文进行过滤处理。
在本发明的一些实施例中,报文预处理模块包括:协议类型获取单元,用于获取报文的协议类型。端口获取单元,用于若协议类型为目标类型,则获取报文的目标端口号。长度获取单元,用于若目标端口号为预设端口号,则获取报文的长度。目标报文确定单元,用于若长度不小于预设长度,则确定报文为目标报文。
在本发明的一些实施例中,初步匹配模块包括:目标报文数据获取单元,用于获取目标报文的报文数据。第一匹配结果确定单元,用于若至少一个待过滤白名单字符串中存在报文数据的子串,则确定匹配结果为全匹配。第二匹配结果确定单元,用于若至少一个待过滤白名单字符串中不存在报文数据的子串,则确定匹配结果为未匹配。
在本发明的一些实施例中,过滤模块包括:标识获取单元,用于若匹配结果为未匹配,则获取目标报文的标识字符。标识查找单元,用于查找白名单匹配表中是否存在标识字符。头部匹配单元,用于若不存在,则根据至少一个待过滤白名单字符串以及目标报文的报文数据进行头部匹配处理。第一匹配信息获取单元,用于若头部匹配处理中匹配上的报文数据的最大匹配长度大于等于预设值,则获取头部匹配的匹配信息。放行单元,用于将匹配信息以及匹配上的报文数据存储至白名单匹配表中后,放行目标报文。
在本发明的一些实施例中,过滤模块还包括:标识查找单元,用于查找白名单匹配表中是否存在标识字符。标识报文获取单元,用于若存在,则获取白名单匹配表中与标识字符对应的匹配上的报文数据以及其匹配信息。尾部匹配单元,用于若匹配信息中的匹配类型为头部匹配,则根据至少一个待过滤白名单字符串以及目标报文的报文数据进行尾部匹配处理。第二匹配信息获取单元,用于若尾部匹配处理的最大匹配长度大于等于预设值,则获取头部匹配的匹配信息以及尾部匹配的匹配信息。匹配值计算单元,用于根据头部匹配的匹配信息以及尾部匹配的匹配信息计算匹配值。过滤单元,用于若匹配值大于等于预设匹配值,则放行目标报文。
在本发明的一些实施例中,过滤模块还包括:拼接单元,用于若匹配值小于预设匹配值,则将标识字符对应的匹配上的报文数据以及目标报文的尾部匹配报文数据拼接得到拼接报文数据。放行单元,用于判断拼接报文数据与至少一个待过滤白名单字符串是否一致,若一致,则放行目标报文。
在本发明的一些实施例中,过滤模块还包括:更新单元,用于若拼接报文数据为至少一个待过滤白名单字符串的子串,则将白名单匹配表中与标识字符对应的匹配上的报文数据更新为拼接报文数据。放行单元,用于将白名单匹配表中与标识字符对应的匹配信息中的匹配类型修改为中部匹配,并放行目标报文。
第三方面,本申请实施例提供一种电子设备,其包括存储器,用于存储一个或多个程序;处理器。当一个或多个程序被处理器执行时,实现如上述第一方面中任一项的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述第一方面中任一项的方法。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明实施例提供的一种TCP协议报文过滤方法的流程图;
图2为本发明实施例提供的一种报文预筛选处理的流程图;
图3为本发明实施例提供的一种TCP协议报文过滤装置的结构框图;
图4为本发明实施例提供的一种电子设备的结构框图。
图标:100-TCP协议报文过滤装置;110-报文预处理模块;120-初步匹配模块;130-过滤模块;101-存储器;102-处理器;103-通信接口。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
下面结合附图,对本申请的一些实施方式作详细说明。在不冲突的情况下,下述的各个实施例及实施例中的各个特征可以相互组合。
在进行介绍下述实施例前,需对其中的一些术语进行说明:
白名单匹配表为预先创建的全局白名单匹配表,其中包括有预先设置的至少一个待过滤白名单字符串。其中还包括处理过的报文的报文数据以及匹配信息。白名单匹配表采用hash表进行存储,白名单匹配表中包括标识字符key,key可以是四元组拼接的字符串,其根据报文的源地址、源端口、目的地址以及目的端口获得。匹配信息value中包括当前匹配的模式、匹配相似的百分比、匹配上的报文数据。其中,当前匹配的模式包括头部匹配标记、中部匹配标记以及尾部匹配标记。例如,在进行本申请提供的TCP协议报文过滤方法之前,可以在处理系统内核中创建网络处理模块,同时创建全局的白名单匹配表。具体如,在linux内核中创建基于netfilter的网络处理模块,同时创建全局的白名单匹配表。
全匹配:至少一个待过滤白名单字符串中存在报文数据的子串的情况,称为全匹配。
头部匹配:从待过滤的白名单字符串的第一个字符开始与报文数据进行匹配的匹配方式称为头部匹配。
尾部匹配:从待过滤的白名单字符串除第一个字符以外的任意一个字符开始进行匹配,且匹配上的最后一个字符为待过滤的白名单字符串的最后一个字符的匹配方式。
中部匹配:非头部匹配以及非尾部匹配的方式称为中部匹配。
请参看图1,图1为本发明实施例提供的一种TCP协议报文过滤方法的流程图,该TCP协议报文过滤方法包括如下步骤:
步骤S110:获取报文,并对报文进行预筛选处理,以获取目标报文。
获取报文后可以根据报文的类型以及端口等信息进行初步的预筛选处理,使得可以获取到待过滤的目标报文,后续可以直接对目标报文进行匹配过滤处理,从而提高过滤速度。
步骤S120:根据预先创建的白名单匹配表中预先设置的至少一个待过滤白名单字符串对目标报文进行白名单匹配,得到匹配结果。
预先创建的白名单匹配表为全局白名单匹配表,在进行匹配之前,用户预先在其中设置有待过滤白名单字符,利用该待过滤白名单字符对目标报文进行匹配,若该待过滤白名单字符与目标报文成功匹配上,则可以直接放行目标报文,反之,则需要继续对目标报文进行过滤处理,从而可以提高过滤的速度。
可选的,在根据预先创建的白名单匹配表对目标报文进行白名单匹配,得到匹配结果的具体实施方式如下:首先,获取目标报文的报文数据。然后判断至少一个待过滤白名单字符串中是否存在报文数据的子串,若是,则确定匹配结果为全匹配。若至少一个待过滤白名单字符串中不存在报文数据的子串,则确定匹配结果为未匹配。
其中,预先创建的白名单匹配表中若有多个待过滤白名单字符串,则在进行匹配时,将多个待过滤白名单字符串分别与目标报文进行匹配,直至匹配成功,或所有的待过滤白名单字符串均已进行过匹配过程。例如,白名单匹配表中有两个待过滤白名单字符串“request”、“discover”,则在进行匹配时,可以先将“request”与目标报文进行匹配,若匹配成功,则结束匹配。若匹配失败,则继续将“discover”与目标报文进行匹配。
上述实现过程中,若至少一个待过滤白名单字符串中存在目标报文的报文数据的子串,也就是说匹配结果为全匹配,则表示该目标报文符合过滤放行的规则,则可以放行该目标报文。
步骤S130:根据匹配结果和/或白名单匹配表对目标报文进行过滤处理。
若匹配结果为全匹配,则可以直接放行该目标报文。若匹配结果为未匹配,也就是至少一个待过滤白名单字符串中不存在报文数据的子串,则表明该目标报文可能出现了粘包或者半包的情况。此时,则可以利用白名单匹配表以及匹配结果对目标报文进行进一步的过滤处理,以保证精确的对目标报文的内容进行过滤。
上述实现过程中,先对报文进行预筛选处理,以筛选出需要进行过滤的目标报文,可以将不是过滤处理的其他报文筛选掉,从而提高后续过滤处理的效率。然后可以根据白名单匹配表中预先设置的至少一个待过滤白名单字符串对目标报文进行白名单匹配,若匹配结果表示匹配通过则可以直接放行该目标报文。而若匹配结果表示匹配不通过,则可以继续根据匹配结果以及白名单匹配表对目标报文进行进一步的过滤处理,从而可以保证在报文出现粘包的情况下,能够精确的根据报文内容进行过滤,而不会因为粘包导致部分数据被忽略处理。
对报文进行预筛选处理,以获取目标报文时,可以设置不同的报文过滤条件,以保证获取到合适的目标文件。作为一种实施方式,可以先获取报文的协议类型,然后对协议类型进行判断,若协议类型为目标类型,则获取报文的目标端口号。再对获取到的目标端口号进行判断,若目标端口号为预设端口号,则可以继续获取报文的长度,然后判断该长度不小于预设长度,则可以最终确定该报文为目标报文。
例如,请参看图2,图2为本发明实施例提供的一种报文预筛选处理的流程图。可以首先获取接收到的报文的协议类型,如果协议类型非TCP协议,则相应的报文可以直接放行。协议类型为TCP协议的报文则需要继续获取其目标端口是否为80端口,如果该报文的端口不是80端口,则放行该报文。若报文的端口是80端口,则需要继续获取该报文的长度,并将该长度小于HTTP头部长度的报文直接放行,而该长度不小于HTTP头部长度的报文则确定为目标报文。
上述实施例,主要基于TCP为底层协议的HTTP报文在粘包的情况下进行过滤处理,因此选用80端口作为预设端口号,目标类型为TCP协议,而预设长度则为HTTP头部长度。其中,80端口是为超文本传输协议(Hyper Text Transport Protocol,HTTP)开放的,是在上网冲浪过程中使用次数最多的协议,主要作为万维网(World Wide Web,WWW)传输信息的协议。可以理解地,若本过滤方法用于处理其他协议的其他类型报文时,则可以根据实际所处理的问题对预设端口号、目标类型以及预设长度进行设置。
在本发明的一些实施例中,根据匹配结果和/或白名单匹配表对目标报文进行过滤处理时,可以通过以下步骤实现。首先对匹配结果进行判断,若匹配结果为全匹配,则直接放行该目标报文。若匹配结果为未匹配,则获取目标报文的标识字符,然后查找白名单匹配表中是否存在标识字符。若白名单匹配表中不存在标识字符,则根据至少一个待过滤白名单字符串以及目标报文的报文数据进行头部匹配处理。若头部匹配处理中匹配上的报文数据的最大匹配长度大于等于预设值,则获取头部匹配的匹配信息。将匹配信息以及匹配上的报文数据存储至白名单匹配表中后,放行目标报文。
标识字符key为根据报文的源地址、源端口、目的地址以及目的端口获得的拼接的字符串,该标识字符key可用于判断接收到的两个报文是否为相同的报文。若报文出现半包,其可能被分为两个报文被接收,因此,若两个报文的源地址、源端口、目的地址以及目的端口均相同,则可以获取其标识字符key相同,进一步可以判断其为同一个报文拆分而得到的。
例如,若至少一个待过滤白名单字符串中不存在报文数据的子串,会获得匹配结果为未匹配。此时,获取目标报文的标识字符key,然后在白名单匹配表中查找该标识字符key,若白名单匹配表中没有查找到响应的标识字符key,则表明之前接收的报文中不存在与该目标报文相同的报文。此时可以根据至少一个待过滤白名单字符串以及目标报文的报文数据进行头部匹配处理。如,至少一个待过滤白名单字符串为requestttt,而目标报文的报文数据为aweireq,在进行头部匹配后,发现至少一个待过滤白名单字符串的第一个字符至第三个字符“req”与目标报文的报文数据中的第五位字符至第七个字符相同,即其头部匹配成功,若已规定预设值为1,则由于上述匹配的长度为3,该长度大于1,则可以获取本次进行头部匹配的匹配信息value,并将value存储至白名单匹配表中,然后可以放行该报文。
匹配信息value包括当前匹配的模式、匹配相似的百分比、匹配上的报文数据。其中当前匹配的模式包括头部匹配标记、中部匹配标记以及尾部匹配标记,可以将头部匹配标记为1、中部匹配标记为2、尾部匹配标记为3。匹配相似的百分比可以通过匹配上的字符串的长度除以至少一个待过滤白名单字符串总长度得到。此时,匹配信息value中的当前匹配的模式为1,匹配相似的百分比为30%,匹配上的报文数据为“req”。
白名单匹配表中不存在标识字符,则表示之前没有与该目标报文相同的报文进行过滤处理,而又因为匹配结果显示该目标报文不完整,因此可以对该目标报文进行头部匹配处理,以获取其匹配上的报文数据以及匹配信息,便于后续对与该目标报文相同的报文进行处理,以避免过滤过程中出现漏包的情况。
作为另一种实施方式,若查找白名单匹配表中存在标识字符,则可以获取白名单匹配表中与标识字符对应的匹配上的报文数据以及其匹配信息。根据匹配信息进行判断,若匹配信息中的匹配类型为头部匹配,则根据至少一个待过滤白名单字符串以及目标报文的报文数据进行尾部匹配处理。尾部匹配处理后,若尾部匹配处理的最大匹配长度大于等于预设值,则获取头部匹配的匹配信息以及尾部匹配的匹配信息。再根据头部匹配的匹配信息以及尾部匹配的匹配信息计算匹配值,若匹配值大于等于预设匹配值,则放行目标报文。
例如,白名单匹配表中存在标识字符key,则表明该目标报文之前,有对相同的报文进行处理。则可以继续判断之前匹配的匹配类型,若其匹配类型为头部匹配,则可以根据至少一个待过滤白名单字符串以及目标报文的报文数据进行尾部匹配处理。如,至少一个待过滤白名单字符串为requestttt,而此时的目标报文的报文数据为sttttdald,在进行尾部匹配后,发现至少一个待过滤白名单字符串中的后五位字符“stttt”与目标报文的报文数据中的第一位字符至第五个字符相同,若已规定预设值为1,则由于上述匹配的长度为5,则尾部匹配成功,尾部匹配报文数据为“stttt”。可以获取头部匹配的匹配信息以及尾部匹配的匹配信息计算匹配值,匹配值为头部匹配的匹配信息中的匹配相似的百分比与尾部匹配的匹配信息中的匹配相似的百分比之和。若头部匹配的匹配信息中的匹配相似的百分比为50%,根据上述匹配计算得到尾部匹配的匹配信息中的匹配相似的百分比为50%,则最终计算得到匹配值为80%。为了保证对出现半包或粘包的报文进行精准的过滤,可以设置预设值为100%,则匹配值100%大于等于该预设值100%,则表明与该目标报文相同的报文已经完全过滤完成,则可以放行该目标报文。
此外,若计算得到的匹配值为80%,小于预设值100%,则表明与该目标报文相同的报文还未完全过滤完成,则可以进行进一步的过滤处理。
如下所示的实施方式,根据头部匹配的匹配信息以及尾部匹配的匹配信息计算匹配值的步骤之后,若匹配值小于预设匹配值,则将标识字符对应的匹配上的报文数据以及目标报文的尾部匹配报文数据拼接得到拼接报文数据。然后判断拼接报文数据与至少一个待过滤白名单字符串是否一致,若一致,则放行目标报文。
在判断出匹配值小于预设匹配值后,可以将与标识字符对应的匹配上的报文数据以及目标报文的尾部匹配报文数据拼接得到拼接报文数据,例如,若白名单匹配表中与该标识字符对应的匹配上的报文数据为“req”,目标报文的尾部匹配报文数据为“stttt”,则拼接得到拼接报文数据“reqstttt”。进而继续判断该拼接报文数据与带过滤白名单字符串“requestttt”是否一致,若一致,则表明已对所有相同的报文进行处理,则可以放行该目标报文。而若其不一致,则表明该目标报文还是存在半包或粘包的情况,还需要进行下一步的过滤处理。
在本发明的一些实施例中,将标识字符对应的报文数据以及目标报文的尾部匹配报文数据拼接得到拼接报文数据之后,可以判断拼接报文数据是否为至少一个待过滤白名单字符串的子串,若是,则将白名单匹配表中与标识字符对应的匹配上的报文数据更新为拼接报文数据。然后将白名单匹配表中与标识字符对应的匹配信息中的匹配类型修改为中部匹配,并放行目标报文。
例如,白名单匹配表中与标识字符对应的匹配上的报文数据“requ”,至少一个待过滤白名单字符串为“requestttt”,拼接报文数据为“request”,可以看出拼接报文数据是至少一个待过滤白名单字符串的子串,则可以将白名单匹配表中与标识字符对应的匹配上的报文数据“requ”更新为拼接报文数据“request”。同时将白名单匹配表中与标识字符对应的匹配信息中的匹配类型修改为中部匹配,并放行目标报文。
基于同样的发明构思,本发明还提出一种TCP协议报文过滤装置100,请参看图3,图3为本发明实施例提供的一种TCP协议报文过滤装置100的结构框图,该TCP协议报文过滤装置100,包括:
报文预处理模块110,用于获取报文,并对报文进行预筛选处理,以获取目标报文。
初步匹配模块120,用于根据预先创建的白名单匹配表中预先设置的至少一个待过滤白名单字符串对目标报文进行白名单匹配,得到匹配结果。
过滤模块130,用于根据匹配结果和/或白名单匹配表对目标报文进行过滤处理。
在本发明的一些实施例中,报文预处理模块110包括:
协议类型获取单元,用于获取报文的协议类型。
端口获取单元,用于若协议类型为目标类型,则获取报文的目标端口号。
长度获取单元,用于若目标端口号为预设端口号,则获取报文的长度。
目标报文确定单元,用于若长度不小于预设长度,则确定报文为目标报文。
在本发明的一些实施例中,初步匹配模块120包括:
目标报文数据获取单元,用于获取目标报文的报文数据。
第一匹配结果确定单元,用于若至少一个待过滤白名单字符串中存在报文数据的子串,则确定匹配结果为全匹配。
第二匹配结果确定单元,用于若至少一个待过滤白名单字符串中不存在报文数据的子串,则确定匹配结果为未匹配。
在本发明的一些实施例中,过滤模块130包括:
标识获取单元,用于若匹配结果为未匹配,则获取目标报文的标识字符。
标识查找单元,用于查找白名单匹配表中是否存在标识字符。
头部匹配单元,用于若不存在,则根据至少一个待过滤白名单字符串以及目标报文的报文数据进行头部匹配处理。
第一匹配信息获取单元,用于若头部匹配处理中匹配上的报文数据的最大匹配长度大于等于预设值,则获取头部匹配的匹配信息。
放行单元,用于将匹配信息以及匹配上的报文数据存储至白名单匹配表中后,放行目标报文。
在本发明的一些实施例中,过滤模块130还包括:
标识查找单元,用于查找白名单匹配表中是否存在标识字符。
标识报文获取单元,用于若存在,则获取白名单匹配表中与标识字符对应的匹配上的报文数据以及其匹配信息。
尾部匹配单元,用于若匹配信息中的匹配类型为头部匹配,则根据至少一个待过滤白名单字符串以及目标报文的报文数据进行尾部匹配处理。
第二匹配信息获取单元,用于若尾部匹配处理的最大匹配长度大于等于预设值,则获取头部匹配的匹配信息以及尾部匹配的匹配信息。
匹配值计算单元,用于根据头部匹配的匹配信息以及尾部匹配的匹配信息计算匹配值。
过滤单元,用于若匹配值大于等于预设匹配值,则放行目标报文。
在本发明的一些实施例中,过滤模块130还包括:
拼接单元,用于若匹配值小于预设匹配值,则将标识字符对应的匹配上的报文数据以及目标报文的尾部匹配报文数据拼接得到拼接报文数据。
放行单元,用于判断拼接报文数据与至少一个待过滤白名单字符串是否一致,若一致,则放行目标报文。
在本发明的一些实施例中,过滤模块130还包括:
更新单元,用于若拼接报文数据为至少一个待过滤白名单字符串的子串,则将白名单匹配表中与标识字符对应的匹配上的报文数据更新为拼接报文数据。
放行单元,用于将白名单匹配表中与标识字符对应的匹配信息中的匹配类型修改为中部匹配,并放行目标报文。
请参阅图4,图4为本申请实施例提供的电子设备的一种示意性结构框图。电子设备包括存储器101、处理器102和通信接口103,该存储器101、处理器102和通信接口103相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。存储器101可用于存储软件程序及模块,如本申请实施例所提供的TCP协议报文过滤装置100对应的程序指令/模块,处理器102通过执行存储在存储器101内的软件程序及模块,从而执行各种功能应用以及数据处理。该通信接口103可用于与其他节点设备进行信令或数据的通信。
其中,存储器101可以是但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。
处理器102可以是一种集成电路芯片,具有信号处理能力。该处理器102可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
可以理解,图4所示的结构仅为示意,电子设备还可包括比图4中所示更多或者更少的组件,或者具有与图4所示不同的配置。图4中所示的各组件可以采用硬件、软件或其组合实现。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
综上,本申请实施例提供的一种TCP协议报文过滤方法及装置,该方法包括:获取报文,并对报文进行预筛选处理,以获取目标报文,根据预先创建的白名单匹配表中预先设置的至少一个待过滤白名单字符串对目标报文进行白名单匹配,得到匹配结果。最后根据匹配结果和/或白名单匹配表对目标报文进行过滤处理。上述实现过程中,先对报文进行预筛选处理,以筛选出需要进行过滤的目标报文,可以将不是过滤处理的其他报文筛选掉,从而提高后续过滤处理的效率。然后可以根据白名单匹配表中预先设置的至少一个待过滤白名单字符串对目标报文进行白名单匹配,若匹配结果表示匹配通过则可以直接放行该目标报文。而若匹配结果表示匹配不通过,则可以继续根据匹配结果以及白名单匹配表对目标报文进行进一步的过滤处理,从而可以保证在报文出现粘包的情况下,能够精确的根据报文内容进行过滤,而不会因为粘包导致部分数据被忽略处理。
以上仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其它的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。