CN106708956B - 一种基于多url规则集的http数据匹配方法 - Google Patents
一种基于多url规则集的http数据匹配方法 Download PDFInfo
- Publication number
- CN106708956B CN106708956B CN201611074449.8A CN201611074449A CN106708956B CN 106708956 B CN106708956 B CN 106708956B CN 201611074449 A CN201611074449 A CN 201611074449A CN 106708956 B CN106708956 B CN 106708956B
- Authority
- CN
- China
- Prior art keywords
- rule
- character
- node
- hash
- url
- 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.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
- G06F16/9566—URL specific, e.g. using aliases, detecting broken or misspelled links
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于多URL规则集的HTTP数据匹配方法,包括:拆分待匹配URL规则集中的每一条规则;数字化规则集,即将拆分后的每一条URL规则进行分解并数字化为若干个结点;建立用于搜索的哈希二分多链表,即将数字化后的每一个结点按层进行哈希存储,对于冲突的结点采用二分存储;根据到达的目标数据关键词对目标HTTP数据进行边数字化边匹配处理。本发明不需要对底层硬件进行相应修改;从而使本发明具有较宽的应用范围及较低的硬件要求;有效提升了HTTP数据流的匹配能力;有效的利用内存空间中数据结构之间可以相互转换的特点,有效的将字符空间中的字符串匹配问题转换成了数字空间中的数值大小比较问题。
Description
技术领域
本发明属于数据分析技术领域,尤其涉及一种基于多URL规则集的HTTP数据匹配方法。
背景技术
基于URL(Uniform Resource Locator,统一资源定位器)规则集的多模式字符串匹配方法被广泛应用于防火墙、网络流量数据分析与采集、WEB服务器负载均衡、WEB黑白名单、邮件分类及垃圾邮件检测、入侵检测及基于URL的内容分级等领域。近年来,云计算、大数据及人工智能等计算机领域的蓬勃发展,也极大的促进了机器人领域的发展,机器人领域的研究由当初的单体机器人逐渐发展到多机器人、群机器人、网络机器人及云机器人等领域,这些领域也开始对URL匹配或基于特定协议的字符串匹配提出了需求。所谓的基于URL的多模式字符串匹配是指在一个包含多个URL字符串的集合中,找出目标字符串或数据流能匹配到的URL字符串规则子集合。目前,多模式字符串匹配方法主要有基于自动机的匹配方法,基于散列的匹配方法和基于位并行的匹配方法等。其中,基于自动机的匹配方法往往需要消耗巨大的存储空间,这在嵌入式系统及部分硬件资源有限的机器人或可穿戴设备中是无法被接受的,而且这类方法可能会在特定规则集下发生严重的性能退化现象,往往只能支持较小规模的模式串集合;基于散列的匹配方法虽然匹配速度较快,但对于URL这种分布具有一定规律的模式串集合则很容易发生冲突,造成性能下降,虽然减小装载因子可以在一定程度上减少冲突,但却又造成了空间的浪费;基于位并行的匹配方法则受限于机器字宽,其适应范围极窄,往往只支持数十个模式串。此外,还有一些基于这些经典方法进行改进的方法,但这些方法都没有很好的结合HTTP协议特点及字符串的数字特征,性能提升依然有限。HTTP协议即超文本传输协议,是人们在TCP协议基础上提出的一种应用层协议,主要用于万维网应用领域,目前最新版本是1999年发布的HTTP1.1版。在HTTP协议中,消息分为请求消息和响应消息两种,大部分实际应用主要关心请求消息。在HTTP的请求消息中,方法、资源指示符及协议版本等信息被包含在消息首行中,请求消息中的Request-URI和Host头域则对所请求的资源进行精确定位。由于HTTP协议具有简捷、方便等特点,在各种媒体资源的表达与传输方面具有较大优势,因此在提出后得到了极大的发展。近年来,随着网络数据流量的逐年递增,各领域对数据匹配速度要求越来越高,甚至要求基于多URL规则集的数据匹配方法在数万条甚至数百万条规则下达到数10Gbps的HTTP数据流量处理能力。面对这种快速发展的需求,利用现有的多模式匹配方法进行URL规则集匹配已不能满足工程应用需求(处理速度慢,导致系统吞吐性能降低。比如在WEB服务器的负载均衡和防火墙黑白名单管理方面,较慢的算法会导致服务器处理能力降低,从而使用户访问速度变慢),HTTP数据报文匹配速度过慢。如何结合HTTP协议的基本特点和字符串的数字特征,快速地进行URL规则集与HTTP目标数据流的匹配,是本领域技术人员亟需解决的技术问题。
综上所述,现有的多模式匹配方法进行URL规则集匹配存在处理速度慢,导致系统吞吐性能降低。
发明内容
本发明的目的在于提供一种基于多URL规则集的HTTP数据匹配方法,旨在解决现有的多模式匹配方法进行URL规则集匹配存在处理速度慢,导致系统吞吐性能降低的问题。
本发明是这样实现的,一种基于多URL规则集的HTTP数据匹配方法,所述基于多URL规则集的HTTP数据匹配方法包括以下步骤:
步骤一,拆分待匹配URL规则集中的每一条规则;
步骤二,数字化规则集,即将拆分后的每一条URL规则进行分解并数字化为若干个结点;建立用于搜索的哈希二分多链表,即将数字化后的每一个结点按层进行哈希存储,对于冲突的结点采用二分存储;
步骤三,根据到达的目标数据关键词对目标HTTP数据进行边数字化边匹配处理。
进一步,将待匹配的URL规则数量为C的URL规则集中的每一条URL规则拆分为HOST和PATH两部分,分别存入HOST集合H和PATH集合P;具体包括以下步骤:
(1)设定初始URL集合U、HOST集合H、PATH集合P和循环计数标识i,将规则集中的URL按规则序号依次存入集合U中,将i置为1,并将集合H和集合P置空;
(2)从集合U中取出第i条URL;
(3)判断第i条URL字符串是否含有“/”字符:如果有“/”字符,则将第一个“/”字符之前的部分存入集合H的第i个位置,将“/”及之后的部分存入集合P的第i个位置;如果没有“/”字符,则将整条URL存入集合H的第i个位置,将“/”字符存入集合P的第i个位置;子规则加入集合时,所有字符按照URL中同样的顺序加入,以保证规则顺序;
(4)从集合U中删除第i条URL,判定集合U是否为空,若不为空,则令i=i+1,转步骤(2),若集合U为空,则执行将每个子规则拆分。
进一步,将集合H和集合P中的每个子规则拆分为若干小段,每个小段长度为一个机器字长,并将每个小段转换为一个正整数,分别存入HOST数字化集合Hd和PATH数字化集合Pd中的数组中,集合H中的每个子规则对应集合Hd中的一个数组,集合P中的每个子规则对应集合Pd中的一个数组;具体步骤包括:
(1)用宿主机机器字长除以8,计算出用于规则分割的计数值n;
(2)设定初始HOST数字化集合Hd、PATH数字化集合Pd、大循环计数标识i和小循环计数标识j,将集合Hd和集合Pd置空,并将i和j都置为1;
(3)从集合H中取出第i条HOST规则,计算出该规则的长度LHi并进行数字化集合构建;
计算LHi-(n*j-8)的值li,并判断li的值:
若li为0,转到步骤(4);
若li大于8,则取出第(n*j-7)到第n*j个字符,将这些n个字符强制转换为1个无符号的整形数字Wj,并将Wj存入集合Hd中的第i个数组的第j个位置;
若li小于8,则取出第(n*j-7)到第LHi个字符,将这些n个字符强制转换为1个无符号的整形数字Wj,并将Wj存入集合Hd中的第i个数组的第j个位置;
令j=j+1;
(4)判断i值:
若i大于或等于C,令i=1,j=1,转到步骤(5);
若i小于C,令i=i+1,j=1,转到步骤(3);
(5)从集合P中取出第i条PATH规则,计算出该规则的长度LPi并进行数字化集合构建;
计算LPi-(n*j-8)的值li,并判断li的值:若li为0,转到步骤(6);
若li大于8,则取出第(n*j-7)到第n*j个字符,将这些n个字符强制转换为1个无符号的整形数字Wj,并将Wj存入集合Pd中的第i个数组的第j个位置;
若li小于8,则取出第(n*j-7)到第LPi个字符,将这些n个字符强制转换为1个无符号的整形数字Wj,并将Wj存入集合Pd中的第i个数组的第j个位置;
令j=j+1;
(6)判断i值:
若i大于或等于C,转到将集合Hd和集合Pd中数组按层进行哈希存储;
若i小于C,令i=i+1,j=1,转到步骤(5)。
进一步,将集合Hd和集合Pd中数组按层进行哈希存储,对于冲突的数据采用二分存储,建立哈希二分多链表结构,具体包括以下步骤:
1)新建哈希二分多链表表头结点Hp和临时指针Lp,其中Hp包含两个域,第一个域pNext是一个指针,用于指向哈希二分多链表的第一个哈希表,另一个域pKey是一个整数,用于记录哈希二分多链表的第一个哈希表的关键字K;定循环计数标识i=1;
2)取出Pd集合中所有数组的第1个数据,存入临时数组Td,数组长度为Pd集合中的数组个数m;
3)设定哈希关键字KEY=m、临时计数j=m、平均冲突数据计数A=0、临时冲突数据计数At=0及最大哈希探索常量x;
判断j值:
如果j大于或等于x,则直接转到步骤4);
如果j小于x,将Td中每个数据对j取模,算出本轮总冲突次数Ct,令At=Ct/m,并执行判断At值;
判断At值:
如果At等于0,则令KEY=j,并转到步骤4);
如果At大于0,且At小于A,则令A=At、KEY=j、j=j+1,并转到判断j值;
如果At大于0,且At大于或等于A,则令j=j+1,并直接转到判断j值;
4)令K=KEY,设定临时计数k=1,建立PATH哈希表Tpik,并将Td中的m个数据插入Tpi中;
新建长度为K的PATH哈希表Tpik,并判断i值:
如果i等于1,将头结点Hp的pNext指针指向Tpik,将Hp中的pKey设置为K,并将临时指针Lp指向Hp;
如果i大于1,则将临时指针指向Tp(i-1)k;
Lp所指结点中的pKey设为KEY,Lp所指结点中的pNext指向Tp;
将临时数组Td中的每个数据Di依次对KEY求模得到位置pi,如果pi位没有数据,则将Di存入Tp1的第pi个位置,并将Di从Td中删除;否则,将Di按从小到大的顺序插入Tp1中第pi个位置对应的顺序表;
取出Di结点对应的后续PATH结点进行处理,若没有则取出HOST结点;
进行数据插入,并由上层结点指向该结点;直到该规则对应的所有数据结点都处理完成;
将规则ID结点指针存储到最后一个HOST结点中;
5)当Td中每个数据都处理完成后,整个哈希二分多链表结构建立完成;
进一步,根据到达的目标HTTP数据流相应关键词对目标数据进行边数字化边匹配处理,具体步骤包括:
(1)匹配PATH部分数据;
定位PATH字段。HTTP消息的主要方法集合Pm={GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT,OPTIONS},根据消息的第一个字符判断类型POST和PUT第一个字符相同,需要进一步判断第二个字符,根据类型确定PATH的开始位置;
取出目标数据流PATH字段Tsp的前n个字符,转换为一个机器字Dm;
取出Thb的第一个PATH结点哈希表Tp1及该哈希表的关键字pKey,用Dm对pKey求模,得到位置序号j;
比较Tp1中的第j号数据与Dm的大小,如果相等则执行取出Tsp的后n个字符,将这后n个字符转换为一个机器字,如果不相等且该结点有冲突表则用二分法去冲突表中查找Dm,如果没冲突表或者冲突表中不存在则匹配失败直接转到得到匹配结果,如果匹配失败,则返回空,否则返回规则ID;
取出Tsp的后n个字符,将后n个字符转换为一个机器字;并根据匹配成功的结点,找出下一层哈希表,继续匹配,直到PATH字段结束;如果最后一个PATH字段对应的哈希二分表结点具有后续HOST结点,则返回HOST结点指针;在匹配过程中,设定一个监控指针pEndPath,初始值置为空,记录匹配过程中最后一个具有HOST指针的结点,当匹配失败时,返回pEndPath;对于最后一个不足一个机器字长的结点,将目标数据与该层结点对应的最短掩码进行与操作得到匹配值进行匹配;
(2)匹配HOST部分数据;整体步骤与PATH部分数据的匹配过程相似,不同的是,HOST字段匹配不需要设置监控指针;
取出HOST字段的前n个字符,转换为一个机器字;
将机器字置入哈希二分多链表中进行哈希查找,如果没有找到则匹配失败直接转到93,如果找到则执行移动位置至目标数据流HOST字段的第n+1个字符,同时进入哈希二分多链表的下一层;
移动位置至目标数据流HOST字段的第n+1个字符,同时进入哈希二分多链表的下一层;
判断HOST是否已经匹配完成,如果没有匹配完成则转入取出HOST字段的前n个字符,转换为一个机器字,如果匹配完成则执行(3);
(3)得到匹配结果,如果匹配失败,则返回空,否则返回规则ID。
本发明的另一目的在于提供一种利用所述基于多URL规则集的HTTP数据匹配方法的网站防火墙。
本发明的另一目的在于提供一种利用所述基于多URL规则集的HTTP数据匹配方法的URL分类与过滤系统。
本发明的另一目的在于提供一种利用所述基于多URL规则集的HTTP数据匹配方法的WEB服务器负载均衡系统。
本发明的另一目的在于提供一种利用所述基于多URL规则集的HTTP数据匹配方法的网络数据流量匹配系统。
本发明的另一目的在于提供一种利用所述基于多URL规则集的HTTP数据匹配方法的基于特定协议的数据分析系统。
本发明提供的基于多URL规则集的HTTP数据匹配方法,与已有的经典匹配方法相比:
(1)本发明不需要对底层硬件进行相应修改,通用计算机即可运行,不需要对硬件系统做额外改变,从而使本发明具有较宽的应用范围及较低的硬件要求,无论是在嵌入式设备、移动设备、路由器、负载均衡器、PC机还是在服务器中都能得到较好的运用。
(2)本发明有效提升了HTTP数据流的匹配能力,在多URL规则集下对目标HTTP数据流具有很高的匹配检测效率,通过有效提高多URL规则集下的HTTP数据流匹配速度,解决HTTP数据报文匹配速度过慢的问题,从而提高目标系统的数据处理能力、提升响应速度、减少资源占用。
各算法在不同规则集下的匹配速度(MB/s)
各算法在不同规则集下的内存占用量(MB)
(3)本发明有效的利用内存空间中数据结构之间可以相互转换的特点,有效的将字符空间中的字符串匹配问题转换成了数字空间中的数值大小比较问题,这在具有较高数值处理能力的设备上具有更好的处理能力。
(4)本发明可以应用于其它基于固定起始位置的字符串匹配领域。对于具有多条匹配规则,且目标数据流中待匹配数据基于固定起始位置的应用需求,只需要进行简单调整;具有较好的通用性,其它领域仅需要结合自己领域的需求稍作改动即可将本算法用于实际应用中;即可使用本发明中所提方法。
附图说明
图1是本发明实施例提供的基于多URL规则集的HTTP数据匹配方法流程图。
图2是本发明实施例提供的哈希二分多链表数据整体存储结构图。
图3是本发明实施例提供的总流程图。
图4是本发明实施例提供的URL数字化流程图。
图5是本发明实施例提供的哈希二分多链表建表流程图。
图6是本发明实施例提供的数据匹配流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
下面结合附图对本发明的应用原理作详细的描述。
如图1所示,本发明实施例提供的基于多URL规则集的HTTP数据匹配方法包括以下步骤:
S101:拆分待匹配URL规则集中的每一条规则;
S102:数字化规则集,即将拆分后的每一条URL规则进行分解并数字化为若干个结点;建立用于搜索的哈希二分多链表,即将数字化后的每一个结点按层进行哈希存储,对于冲突的结点采用二分存储;
S103:根据到达的目标数据关键词对目标HTTP数据进行边数字化边匹配处理。
本发明实施例提供的具体步骤如下:
第一步,将待匹配的URL规则数量为C的URL规则集中的每一条URL规则拆分为HOST和PATH两部分,分别存入HOST集合H和PATH集合P。具体可细分为四个步骤:
1.1设定初始URL集合U、HOST集合H、PATH集合P和循环计数标识i,将规则集中的URL按规则序号依次存入集合U中,将i置为1,并将集合H和集合P置空;
1.2从集合U中取出第i条URL;
1.3判断第i条URL字符串是否含有“/”字符:
如果有“/”字符,则将第一个“/”字符之前的部分存入集合H的第i个位置,将“/”及之后的部分存入集合P的第i个位置;
如果没有“/”字符,则将整条URL存入集合H的第i个位置,将“/”字符存入集合P的第i个位置;
子规则加入集合时,所有字符按照URL中同样的顺序加入,以保证规则顺序;
1.4从集合U中删除第i条URL,判定集合U是否为空,若不为空,则令i=i+1,转步骤1.2,若集合U为空,则执行第二步;
第二步,将集合H和集合P中的每个子规则拆分为若干小段,每个小段长度为一个机器字长,并将每个小段转换为一个正整数,分别存入HOST数字化集合Hd和PATH数字化集合Pd中的数组中(集合H中的每个子规则对应集合Hd中的一个数组,集合P中的每个子规则对应集合Pd中的一个数组)。具体细分为六个步骤:
2.1用宿主机机器字长除以8,计算出用于规则分割的计数值n(比如64位机器的n值为8,32位机器的n值为4);
2.2设定初始HOST数字化集合Hd、PATH数字化集合Pd、大循环计数标识i和小循环计数标识j,将集合Hd和集合Pd置空,并将i和j都置为1;
2.3从集合H中取出第i条HOST规则,计算出该规则的长度LHi并进行数字化集合构建。具体可分为以下几个步骤:
2.3.1计算LHi-(n*j-8)的值li,并判断li的值:
若li为0,转到步骤2.4;
若li大于8,则取出第(n*j-7)到第n*j个字符,将这些n个字符强制转换为1个无符号的整形数字Wj,并将Wj存入集合Hd中的第i个数组的第j个位置;
若li小于8,则取出第(n*j-7)到第LHi个字符,将这些n个字符强制转换为1个无符号的整形数字Wj,并将Wj存入集合Hd中的第i个数组的第j个位置;
2.3.2令j=j+1,转到步骤2.3.1;
2.4判断i值:
若i大于或等于C,令i=1,j=1,转到步骤2.5;
若i小于C,令i=i+1,j=1,转到步骤2.3;
2.5从集合P中取出第i条PATH规则,计算出该规则的长度LPi并进行数字化集合构建。具体可分为以下几个步骤:
2.5.1计算LPi-(n*j-8)的值li,并判断li的值:
若li为0,转到步骤2.6;
若li大于8,则取出第(n*j-7)到第n*j个字符,将这些n个字符强制转换为1个无符号的整形数字Wj,并将Wj存入集合Pd中的第i个数组的第j个位置;
若li小于8,则取出第(n*j-7)到第LPi个字符,将这些n个字符强制转换为1个无符号的整形数字Wj,并将Wj存入集合Pd中的第i个数组的第j个位置;
2.5.2令j=j+1,转到步骤2.5.1;
2.6判断i值:
若i大于或等于C,转到第三步;
若i小于C,令i=i+1,j=1,转到步骤2.5;
第三步,将集合Hd和集合Pd中数组按层进行哈希存储(即从所有数组的第1个数据开始,从头至尾处理至数组的最后一个数据),对于冲突的数据采用二分存储,从而建立起一个哈希二分多链表结构,该结构如图1所示。具体可以细分为四个步骤:
3.1新建哈希二分多链表表头结点Hp和临时指针Lp,其中Hp包含两个域,第一个域pNext是一个指针,用于指向哈希二分多链表的第一个哈希表,另一个域pKey是一个整数,用于记录哈希二分多链表的第一个哈希表的关键字K。设定循环计数标识i=1;
3.2取出Pd集合中所有数组的第1个数据,存入临时数组Td,数组长度为Pd集合中的数组个数m;
3.3设定哈希关键字KEY=m、临时计数j=m、平均冲突数据计数A=0、临时冲突数据计数At=0及最大哈希探索常量x(其中x根据经验设置,一般可设置为3*m以内的最大质因数),具体包括如下步骤:
3.3.1判断j值:
如果j大于或等于x,则直接转到步骤3.4;
如果j小于x,将Td中每个数据对j取模,算出本轮总冲突次数Ct,令At=Ct/m,并执行步骤3.3.2;
3.3.2判断At值:
如果At等于0,则令KEY=j,并转到步骤3.4;
如果At大于0,且At小于A,则令A=At、KEY=j、j=j+1,并转到步骤3.3.1;
如果At大于0,且At大于或等于A,则令j=j+1,并直接转到步骤3.3.1;
3.4令K=KEY,设定临时计数k=1,建立PATH哈希表Tpik,并将Td中的m个数据插入Tpi中。具体包括以下两个步骤:
3.4.1新建长度为K的PATH哈希表Tpik,并判断i值:
如果i等于1,将头结点Hp的pNext指针指向Tpik,将Hp中的pKey设置为K,并将临时指针Lp指向Hp;
如果i大于1,则将临时指针指向Tp(i-1)k;
Lp所指结点中的pKey设为KEY,Lp所指结点中的pNext指向Tp;
3.4.2将临时数组Td中的每个数据Di依次对KEY求模得到位置pi,如果pi位没有数据,则将Di存入Tp1的第pi个位置,并将Di从Td中删除;否则,将Di按从小到大的顺序插入Tp1中第pi个位置对应的顺序表(如果没有则需要新建);
3.4.3取出Di结点对应的后续PATH结点进行处理,若没有则取出HOST结点;
按照步骤3.4.2对该结点进行数据插入,并由上层结点指向该结点;直到该规则对应的所有数据结点都处理完成;如果该结点是最后一个结点,而且该结点的字符个数不足n,则计算该结点对应的有效数据位掩码(对于一个有效数据位为v的掩码,前v位都为1,后n-v位都为0),如果该掩码有效位比前一结点存储的掩码有效位更短,或者前一结点掩码有效位为0,则更新前一结点存储的掩码;
将规则ID结点指针存储到最后一个HOST结点中;
3.5当Td中每个数据都处理完成后,整个哈希二分多链表结构建立完成。第四步,根据到达的目标HTTP数据流相应关键词对目标数据进行边数字化边匹配处理。具体步骤包括:
4.1匹配PATH部分数据。具体包括以下五个步骤:
4.1.1定位PATH字段。HTTP消息的主要方法集合Pm={GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT,OPTIONS},由于这些关键字不会同时出现,因此可以根据消息的第一个字符判断类型(POST和PUT第一个字符相同,需要进一步判断第二个字符),根据这些类型可以确定PATH的开始位置;
4.1.2取出目标数据流PATH字段Tsp的前n个字符,转换为一个机器字Dm;
4.1.3取出Thb的第一个PATH结点哈希表Tp1及该哈希表的关键字pKey,用Dm对pKey求模,得到位置序号j;
4.1.4比较Tp1中的第j号数据与Dm的大小,如果相等则执行4.1.5,如果不相等且该结点有冲突表则用二分法去冲突表中查找Dm,如果没冲突表或者冲突表中不存在则匹配失败直接转到步骤4.3;
4.1.5取出Tsp的后n个字符,将这后n个字符转换为一个机器字;并根据匹配成功的结点,找出下一层哈希表,按照步骤4.1.3和步骤4.1.4的方法继续匹配,直到PATH字段结束;如果最后一个PATH字段对应的哈希二分表结点具有后续HOST结点,则返回HOST结点指针;在匹配过程中,设定一个监控指针pEndPath,初始值置为空,记录匹配过程中最后一个具有HOST指针的结点,当匹配失败时,返回pEndPath(设置该指针的目的是返回最大匹配结果);对于最后一个不足一个机器字长的结点,将目标数据与该层结点对应的最短掩码进行与操作得到匹配值进行匹配;
4.2匹配HOST部分数据。整体步骤与PATH部分数据的匹配过程相似,不同的是,HOST字段匹配不需要设置监控指针(因为HOST字段必须完整匹配),具体包括以下几个步骤:
4.2.1取出HOST字段的前n个字符,转换为一个机器字;
4.2.2将该机器字置入哈希二分多链表中进行哈希查找,如果没有找到则匹配失败直接转到步骤4.3,如果找到则执行4.2.3;
4.2.3移动位置至目标数据流HOST字段的第n+1个字符,同时进入哈希二分多链表的下一层;
4.2.4判断HOST是否已经匹配完成,如果没有匹配完成则转入步骤4.2.1,如果匹配完成则执行4.3;
4.3得到匹配结果,如果匹配失败,则返回空,否则返回规则ID。
下面结合附图对本发明的应用原理作进一步的描述。
图2是本发明实施例提供的哈希二分多链表数据整体存储结构图。
数据整体存储结构图是一个由头结点、PATH表、PATH冲突表、HOST表、HOST冲突表及规则结点按序链接而成的哈希二分多链表结构。其中,PATH表和HOST表都是按照哈希求模规则建立的哈希表,表中每个元素最多对应一个冲突表;而PATH冲突表和HOST冲突表都是按照从小到大顺序建立的二分表;PATH表和PATH冲突表中每个元素都可能对应最多一个PATH表或HOST表,而HOST表和HOST冲突表中每个元素则最多对应一个HOST表或规则结点。在一个哈希二分多链表中,可能有多层PATH表和HOST表及与之对应的冲突表。
图3是本发明实施例提供的总流程图,主要包括以下步骤:
第一步,将待匹配的URL规则集中的每一条URL拆分为HOST和PATH两部分;
第二步,将拆分后的URL以一个机器字对应的字符个数为小段拆分为若干段,并将这些小段转换为一个机器字长的整数,得到URL的数字化集合;
第三步,将数字化后的每一个结点按层进行哈希存储(对于冲突的结点采用二分存储),从而建立起一个哈希二分多链表结构;
第四步,根据到达的目标HTTP数据流相应关键词对目标数据进行边数字化边匹配处理,得到最终规则ID(如果匹配失败则得到空值);
图4是本发明实施例提供的第二步的URL数字化流程图,该过程主要包括五个步骤:
1.设定初始HOST数字化集合Hd、PATH数字化集合Pd,将Hd和Pd置空;计算负载设备的机器字长对应的字符个数n;
2.从HOST集合H(该集合从URL拆分流程中得到)中取出第一条HOST规则,按照n个字符为一组进行拆分,并按照顺序将每一组都转换成数字,依次存入Hd中;
3.从集合H中删除该条HOST规则,并判断集合H是否为空,如果为空则进入下一步,不为空则继续执行步骤2;
4.从PATH集合P中(该集合从URL拆分流程中得到)取出第一条PATH规则,按照n个字符为一组进行拆分,并按照顺序将每一组都转换成数字,依次存入集合Pd中;
5.从集合P中删除该条PATH规则,并判断集合P是否为空,如果为空则URL数字化流程结束,不为空则继续执行步骤4。
图5是本发明实施例提供的第三步的哈希二分多链表建表流程图,该过程主要包括五个步骤:
1.新建长度为key的PATH哈希表Tp和哈希二分多链表头结点,令头结点指向Tp;
2.取出Pd集合(该集合从URL数字化流程中得到)中所有第一层结点,存入临时数组Td,数组长度为第一层结点个数m;
3.按m到x(x>=m)的顺序依次进行哈希探索,找到最佳哈希key;具体操作如下:
1).将key的初始值设置为m,将集合Td中的每个数据对key取模,将平均冲突个数记录进A;
2).将key增1,重复执行上述步骤1)。若其中平均冲突次数为0,则使用该key,否则继续找平均冲突次数比A小的key;
3).当探索至x时,结束key探索流程,返回平均冲突次数最小的key;
4.用集合Td中数据Di(1<=i<=m)对key求模,得到索引pi,并判断Tp中的pi位是否为空,分为两种情况:
1).若pi位为空,则直接将Di存入该位置;
2).若pi位不为空,则将Di存入该位置对应的冲突表;
5.判断Di是否有后续PATH结点和HOST结点,分为以下几种情况:
1).没有后续HOST结点也没有后续PATH结点,则建表流程结束;
2).有后续PATH结点,则取出后续PATH结点存入临时数组Td,并建立下层PATH哈希表,继续执行步骤3;
3).有后续HOST结点,则取出后续HOST结点存入临时数组Thd,建立下层HOST哈希表Th,并按照PATH表的构造方式按层构造HOST,将规则结点指针存到最后一个HOST结点中,建表流程结束。
图6是本发明实施例提供的第四步的数据匹配流程图,该过程主要包括七个步骤:
1.定位到抵达目标数据的PATH字段;
2.取出PATH字段的前n个字符,转换为一个机器字;
3.将该机器字置入哈希二分表中进行哈希查找,如果没找到则匹配流程结束,如果找到则执行下一步;
4.移动位置至目标数据流PATH字段的第n+1个字符,同时进入哈希二分多链表的下一层,并判断PATH是否已经匹配完成,如果没有匹配完成则继续执行步骤2,如果已经匹配完成则定位到HOST字段并执行下一步;
5.取出HOST字段的前n个字符,转换为一个机器字;
6.将该机器字置入哈希二分多链表中进行哈希查找,如果没有找到则匹配流程结束,如果找到则执行下一步;
7.移动位置至目标数据流HOST字段的第n+1个字符,同时进入哈希二分多链表的下一层;
8.判断HOST是否已经匹配完成,如果没有匹配完成则继续执行步骤5,如果匹配完成则返回命中规则ID。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种基于多URL规则集的HTTP数据匹配方法,其特征在于,所述基于多URL规则集的HTTP数据匹配方法包括以下步骤:
步骤一,拆分待匹配URL规则集中的每一条规则;
步骤二,数字化规则集,即将拆分后的每一条URL规则进行分解并数字化为若干个结点;建立用于搜索的哈希二分多链表,即将数字化后的每一个结点按层进行哈希存储,对于冲突的结点采用二分存储;
步骤三,根据到达的目标数据关键词对目标HTTP数据进行边数字化边匹配处理;
将待匹配的URL规则数量为C的URL规则集中的每一条URL规则拆分为HOST和PATH两部分,分别存入HOST集合H和PATH集合P;具体包括以下步骤:
(1)设定初始URL集合U、HOST集合H、PATH集合P和循环计数标识i,将规则集中的URL按规则序号依次存入集合U中,将i置为1,并将集合H和集合P置空;
(2)从集合U中取出第i条URL;
(3)判断第i条URL字符串是否含有“/”字符:如果有“/”字符,则将第一个“/”字符之前的部分存入集合H的第i个位置,将“/”及之后的部分存入集合P的第i个位置;如果没有“/”字符,则将整条URL存入集合H的第i个位置,将“/”字符存入集合P的第i个位置;子规则加入集合时,所有字符按照URL中同样的顺序加入,以保证规则顺序;
(4)从集合U中删除第i条URL,判定集合U是否为空,若不为空,则令i=i+1,转步骤(2),若集合U为空,则执行将每个子规则拆分。
2.如权利要求1所述的基于多URL规则集的HTTP数据匹配方法,其特征在于,将集合H和集合P中的每个子规则拆分为若干小段,每个小段长度为一个机器字长,并将每个小段转换为一个正整数,分别存入HOST数字化集合Hd和PATH数字化集合Pd中的数组中,集合H中的每个子规则对应集合Hd中的一个数组,集合P中的每个子规则对应集合Pd中的一个数组;具体步骤包括:
(1)用宿主机机器字长除以8,计算出用于规则分割的计数值n;
(2)设定初始HOST数字化集合Hd、PATH数字化集合Pd、大循环计数标识i和小循环计数标识j,将集合Hd和集合Pd置空,并将i和j都置为1;
(3)从集合H中取出第i条HOST规则,计算出该规则的长度LHi并进行数字化集合构建;
计算LHi-(n*j-8)的值li,并判断li的值:
若li为0,转到步骤(4);
若li大于8,则取出第(n*j-7)到第n*j个字符,将这些n个字符强制转换为1个无符号的整形数字Wj,并将Wj存入集合Hd中的第i个数组的第j个位置;
若li小于8,则取出第(n*j-7)到第LHi个字符,将这些n个字符强制转换为1个无符号的整形数字Wj,并将Wj存入集合Hd中的第i个数组的第j个位置;
令j=j+1;
(4)判断i值:
若i大于或等于C,令i=1,j=1,转到步骤(5);
若i小于C,令i=i+1,j=1,转到步骤(3);
(5)从集合P中取出第i条PATH规则,计算出该规则的长度LPi并进行数字化集合构建;
计算LPi-(n*j-8)的值li,并判断li的值:若li为0,转到步骤(6);
若li大于8,则取出第(n*j-7)到第n*j个字符,将这些n个字符强制转换为1个无符号的整形数字Wj,并将Wj存入集合Pd中的第i个数组的第j个位置;
若li小于8,则取出第(n*j-7)到第LPi个字符,将这些n个字符强制转换为1个无符号的整形数字Wj,并将Wj存入集合Pd中的第i个数组的第j个位置;
令j=j+1;
(6)判断i值:
若i大于或等于C,转到将集合Hd和集合Pd中数组按层进行哈希存储;
若i小于C,令i=i+1,j=1,转到步骤(5)。
3.如权利要求1所述的基于多URL规则集的HTTP数据匹配方法,其特征在于,将集合Hd和集合Pd中数组按层进行哈希存储,对于冲突的数据采用二分存储,建立哈希二分多链表结构,具体包括以下步骤:
1)新建哈希二分多链表表头结点Hp和临时指针Lp,其中Hp包含两个域,第一个域pNext是一个指针,用于指向哈希二分多链表的第一个哈希表,另一个域pKey是一个整数,用于记录哈希二分多链表的第一个哈希表的关键字K;定循环计数标识i=1;
2)取出Pd集合中所有数组的第1个数据,存入临时数组Td,数组长度为Pd集合中的数组个数m;
3)设定哈希关键字KEY=m、临时计数j=m、平均冲突数据计数A=0、临时冲突数据计数At=0及最大哈希探索常量x;
判断j值:
如果j大于或等于x,则直接转到步骤4);
如果j小于x,将Td中每个数据对j取模,算出本轮总冲突次数Ct,令At=Ct/m,并执行判断At值;
判断At值:
如果At等于0,则令KEY=j,并转到步骤4);
如果At大于0,且At小于A,则令A=At、KEY=j、j=j+1,并转到判断j值;
如果At大于0,且At大于或等于A,则令j=j+1,并直接转到判断j值;
4)令K=KEY,设定临时计数k=1,建立PATH哈希表Tpik,并将Td中的m个数据插入Tpi中;
新建长度为K的PATH哈希表Tpik,并判断i值:
如果i等于1,将头结点Hp的pNext指针指向Tpik,将Hp中的pKey设置为K,并将临时指针Lp指向Hp;
如果i大于1,则将临时指针指向Tp(i-1)k;
Lp所指结点中的pKey设为KEY,Lp所指结点中的pNext指向Tp;
将临时数组Td中的每个数据Di依次对KEY求模得到位置pi,如果pi位没有数据,则将Di存入Tp1的第pi个位置,并将Di从Td中删除;否则,将Di按从小到大的顺序插入Tp1中第pi个位置对应的顺序表;
取出Di结点对应的后续PATH结点进行处理,若没有则取出HOST结点;
进行数据插入,并由上层结点指向该结点;直到该规则对应的所有数据结点都处理完成;
将规则ID结点指针存储到最后一个HOST结点中;
5)当Td中每个数据都处理完成后,整个哈希二分多链表结构建立完成。
4.如权利要求1所述的基于多URL规则集的HTTP数据匹配方法,其特征在于,根据到达的目标HTTP数据流相应关键词对目标数据进行边数字化边匹配处理,具体步骤包括:
(1)匹配PATH部分数据;
定位PATH字段,HTTP消息的主要方法集合Pm={GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT,OPTIONS},根据消息的第一个字符判断类型POST和PUT第一个字符相同,需要进一步判断第二个字符,根据类型确定PATH的开始位置;
取出目标数据流PATH字段Tsp的前n个字符,转换为一个机器字Dm;
取出Thb的第一个PATH结点哈希表Tp1及该哈希表的关键字pKey,用Dm对pKey求模,得到位置序号j;
比较Tp1中的第j号数据与Dm的大小,如果相等则执行取出Tsp的后n个字符,将这后n个字符转换为一个机器字,如果不相等且该结点有冲突表则用二分法去冲突表中查找Dm,如果没冲突表或者冲突表中不存在则匹配失败直接转到得到匹配结果,如果匹配失败,则返回空,否则返回规则ID;
取出Tsp的后n个字符,将后n个字符转换为一个机器字;并根据匹配成功的结点,找出下一层哈希表,继续匹配,直到PATH字段结束;如果最后一个PATH字段对应的哈希二分表结点具有后续HOST结点,则返回HOST结点指针;在匹配过程中,设定一个监控指针pEndPath,初始值置为空,记录匹配过程中最后一个具有HOST指针的结点,当匹配失败时,返回pEndPath;对于最后一个不足一个机器字长的结点,将目标数据与不足一个机器字长的结点对应的最短掩码进行与操作得到匹配值进行匹配;
(2)匹配HOST部分数据;整体步骤与PATH部分数据的匹配过程相似,不同的是,HOST字段匹配不需要设置监控指针;
取出HOST字段的前n个字符,转换为一个机器字;
将机器字置入哈希二分多链表中进行哈希查找,如果没有找到则匹配失败直接转到93,如果找到则执行移动位置至目标数据流HOST字段的第n+1个字符,同时进入哈希二分多链表的下一层;
移动位置至目标数据流HOST字段的第n+1个字符,同时进入哈希二分多链表的下一层;
判断HOST是否已经匹配完成,如果没有匹配完成则转入取出HOST字段的前n个字符,转换为一个机器字,如果匹配完成则执行(3);
(3)得到匹配结果,如果匹配失败,则返回空,否则返回规则ID。
5.一种利用权利要求1~4任意一项所述基于多URL规则集的HTTP数据匹配方法的网站防火墙。
6.一种利用权利要求1~4任意一项所述基于多URL规则集的HTTP数据匹配方法的URL分类与过滤系统。
7.一种利用权利要求1~4任意一项所述基于多URL规则集的HTTP数据匹配方法的WEB服务器负载均衡系统。
8.一种利用权利要求1~4任意一项所述基于多URL规则集的HTTP数据匹配方法的网络数据流量匹配系统。
9.一种利用权利要求1~4任意一项所述基于多URL规则集的HTTP数据匹配方法的基于特定协议的数据分析系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611074449.8A CN106708956B (zh) | 2016-11-29 | 2016-11-29 | 一种基于多url规则集的http数据匹配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611074449.8A CN106708956B (zh) | 2016-11-29 | 2016-11-29 | 一种基于多url规则集的http数据匹配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106708956A CN106708956A (zh) | 2017-05-24 |
CN106708956B true CN106708956B (zh) | 2019-08-16 |
Family
ID=58935168
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611074449.8A Expired - Fee Related CN106708956B (zh) | 2016-11-29 | 2016-11-29 | 一种基于多url规则集的http数据匹配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106708956B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107402959B (zh) * | 2017-06-15 | 2020-01-17 | 中国科学院信息工程研究所 | Url匹配方法、url匹配设备及存储介质 |
CN110147478B (zh) * | 2017-10-20 | 2021-06-29 | 中国电信股份有限公司 | 网页主题词获取方法和系统、服务器与用户终端 |
CN108769003A (zh) * | 2018-04-11 | 2018-11-06 | 哈尔滨工程大学 | 一种url规则的冲突检测方法 |
CN109150962B (zh) * | 2018-07-03 | 2021-03-02 | 北京东方网信科技股份有限公司 | 一种通过关键字快速识别http请求头的方法 |
CN110365806B (zh) * | 2019-06-06 | 2022-05-10 | 无线生活(杭州)信息科技有限公司 | 网址转换方法及装置 |
CN112994931B (zh) * | 2021-02-05 | 2023-01-17 | 绿盟科技集团股份有限公司 | 一种规则匹配的方法及其设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101577721A (zh) * | 2008-12-05 | 2009-11-11 | 湖南大学 | 一种索引拆分布鲁姆过滤器及其插入、删除和查询方法 |
CN101901257A (zh) * | 2010-07-21 | 2010-12-01 | 北京理工大学 | 一种多字符串匹配方法 |
CN102868571A (zh) * | 2012-08-07 | 2013-01-09 | 华为技术有限公司 | 一种规则匹配方法和装置 |
CN103412858A (zh) * | 2012-07-02 | 2013-11-27 | 清华大学 | 用于文本或网络内容分析的大规模特征匹配的方法 |
CN105045808A (zh) * | 2015-06-08 | 2015-11-11 | 北京天元特通科技有限公司 | 一种复合规则集匹配方法和系统 |
CN105357177A (zh) * | 2015-09-29 | 2016-02-24 | 西安电子科技大学 | 一种数据包过滤规则集处理方法及数据包匹配方法 |
-
2016
- 2016-11-29 CN CN201611074449.8A patent/CN106708956B/zh not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101577721A (zh) * | 2008-12-05 | 2009-11-11 | 湖南大学 | 一种索引拆分布鲁姆过滤器及其插入、删除和查询方法 |
CN101901257A (zh) * | 2010-07-21 | 2010-12-01 | 北京理工大学 | 一种多字符串匹配方法 |
CN103412858A (zh) * | 2012-07-02 | 2013-11-27 | 清华大学 | 用于文本或网络内容分析的大规模特征匹配的方法 |
CN102868571A (zh) * | 2012-08-07 | 2013-01-09 | 华为技术有限公司 | 一种规则匹配方法和装置 |
CN105045808A (zh) * | 2015-06-08 | 2015-11-11 | 北京天元特通科技有限公司 | 一种复合规则集匹配方法和系统 |
CN105357177A (zh) * | 2015-09-29 | 2016-02-24 | 西安电子科技大学 | 一种数据包过滤规则集处理方法及数据包匹配方法 |
Non-Patent Citations (1)
Title |
---|
《针对大规模URL关键字的多模匹配算法的性能优化》;李伦;《中国优秀硕士学位论文全文数据库 信息科技辑》;20110601(第5期);I138-9 |
Also Published As
Publication number | Publication date |
---|---|
CN106708956A (zh) | 2017-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106708956B (zh) | 一种基于多url规则集的http数据匹配方法 | |
Zhang et al. | Scalable top-k spatial keyword search | |
CN103714134B (zh) | 一种网络流量数据索引方法及系统 | |
CN102648468B (zh) | 表检索装置、表检索方法以及表检索系统 | |
JP5155001B2 (ja) | 文書検索装置 | |
CN105224692A (zh) | 支持多核处理器的sdn多级流表并行查找的系统及方法 | |
CN106980656B (zh) | 一种基于二值码字典树的搜索方法 | |
US20080177737A1 (en) | Method and system for a pattern matching engine | |
US20130311445A1 (en) | Join processing device, data management device, and string similarity join system | |
US20080133460A1 (en) | Searching descendant pages of a root page for keywords | |
US20080133494A1 (en) | Method and apparatus for searching forwarding table | |
CN103412858A (zh) | 用于文本或网络内容分析的大规模特征匹配的方法 | |
CN106033428B (zh) | 统一资源定位符的选择方法和统一资源定位符的选择装置 | |
CN112131356B (zh) | 一种基于tcam的报文关键字匹配方法和装置 | |
CN102867049A (zh) | 一种基于单词查找树实现的汉语拼音快速分词方法 | |
CN106919691A (zh) | 基于网页库进行检索的方法、装置及检索系统 | |
CN108763536A (zh) | 数据库访问方法及装置 | |
Bramandia et al. | On incremental maintenance of 2-hop labeling of graphs | |
CN106469218B (zh) | 一种基于位图的布尔表达式存储、匹配方法和系统 | |
US8370363B2 (en) | Hybrid neighborhood graph search for scalable visual indexing | |
CN105718521A (zh) | 一个基于Wavelet Tree的网络数据包索引系统 | |
CN109471971B (zh) | 一种面向教育领域资源云存储的语义预取方法及系统 | |
CN104750860B (zh) | 一种不确定数据的数据存储方法 | |
CN107807976A (zh) | Ip归属地查询方法和装置 | |
CN104301182B (zh) | 一种慢速网站访问异常信息的查询方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20190816 Termination date: 20201129 |