CN106970917A - 一种黑名单url的哈希表的建立及请求url的查找方法 - Google Patents
一种黑名单url的哈希表的建立及请求url的查找方法 Download PDFInfo
- Publication number
- CN106970917A CN106970917A CN201610022119.8A CN201610022119A CN106970917A CN 106970917 A CN106970917 A CN 106970917A CN 201610022119 A CN201610022119 A CN 201610022119A CN 106970917 A CN106970917 A CN 106970917A
- Authority
- CN
- China
- Prior art keywords
- url
- hash
- bucket
- prefix
- node
- 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.)
- Granted
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/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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/0227—Filtering policies
- H04L63/0236—Filtering by address, protocol, port number or service, e.g. IP-address or URL
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种黑名单URL的哈希表的建立方法,所述方法包括:步骤S1)遍历黑名单中的URL字符串,按照分隔符的个数将黑名单中的URL分为三类;计算三类URL所占的比例,计算出分配给三类URL的哈希表的“桶”数;步骤S2)通过哈希函数处理得到每个URL的哈希值h,计算其对应的“桶”的索引值;然后将每个URL插入到哈希表的“桶”上,当所有的URL插入到哈希表的“桶”上时,黑名单URL的哈希表建立完毕。本发明的方法既具备哈希算法的高效性能,同时又能支持前缀匹配,提高了查找效率。
Description
技术领域
本文涉及网络安全技术领域,具体涉及的是一种黑名单URL的哈希表的建立及请求URL的查找方法。
背景技术
近年来,随着科技的进步,Internet以惊人的速度飞速发展。它所包含的网站也日益增长,URL(Uniform Resource Locator,统一资源定位符)就是一个网站的唯一标识。具体来说,URL是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。一个基本URL包含模式(或称协议)域名(或IP地址)、路径和文件名。例如一个URL:http://www.ioa.cas.cn/kycg,其中http是协议部分,而www.ioa.cas.cn就是域名,kycg则是路径。
Internet的飞速发展,使人们可以通过Internet获得各种各样的信息和资源。但是互联网上的信息良莠不齐,存在着大量有害的网站,人们在享受互联网的各种信息的同时,访问这些有害网站,人们的身心和财产安全也可能受到危害。对大量有害的URL进行过滤,是目前网络安全应用系统中所亟需的关键技术。而且URL过滤不仅用于过滤有害网站,还可以用于企业管理员工上班时间上网行为,限定员工上班时间可以访问的网站范围等。
URL过滤是一种简单、直接的信息过滤方法。URL过滤系统利用预先设定好的URL地址列表决定允许还是禁止用户访问网络资源。一般来说,URL地址列表可以分为两种:白名单和黑名单。白名单是允许访问的URL地址列表,而黑名单是禁止访问的URL地址列表。
URL查找是URL过滤系统的一个核心操作。众所周知,Internet上网站数以亿计,其中绝大部分网站是无害的,我们不可能列举出所有无害的网站和它们的URLs。与无害的网站相比,有害的网站数量极少,因此通常情况下URL过滤系统采用的是URL黑名单。上面已经介绍,一个基本URL包含模式(或称协议)、域名(或IP地址)、路径和文件名,对于采用黑名单的URL过滤系统来说,需要支持前缀匹配。这意味着当把一个恶意URL,例如http://www.ioa.cas.cn/加入黑名单,虽然这个URL只包含了协议和域名部分,但把这个URL加入到黑名单,那么这个URL域名www.ioa.cas.cn下所有路径下的URL也都是禁止访问的,例如虽然没有把http://www.ioa.cas.cn/kycg/加入到黑名单,但是因为http://www.ioa.cas.cn/kycg在域名www.ioa.cas.cn下,因此也是要禁止访问的。
现有的URL查找技术主要是基于哈希的方法。这类方法的原理是将URL通过哈希函数映射到特定的数据结构来加速查找,常用的数据结构有哈希表、布隆滤波器等。这类基于哈希的方法虽然处理效率很高,但是它们没有考虑URL的语法格式,而是将URL当成一个整体,将每个URL从第一个字符到最后一个字符哈希,因此不支持前缀匹配。
为了支持URL的前缀匹配,研究者们提出了建立URL分解树的方法。这类方法的基本原理是:根据URL的语法格式,将每个URL分解为子项,然后建立一棵URL分解树。URL查找过程是一个树的遍历过程,每次匹配树的一个子节点,直到匹配到叶节点。这种方法虽然能解决前缀匹配的问题,但是由于它们使用了树的结构,所以URL的查找效率受到了制约。
发明内容
本发明的目的在于克服目前利用URL查找方法中存在的上述问题,提出了一种黑名单URL的哈希表的建立及请求URL的查找方法,该方法既具备哈希算法的高效性能,同时又能支持前缀匹配。
为了实现上述目的,本发明提供了一种黑名单URL的哈希表的建立方法,该方法具体包括以下步骤:
步骤S1)遍历黑名单中的URL字符串,按照分隔符的个数将黑名单中的URL分为三类;计算三类URL所占的比例,计算出分配给三类URL的哈希表的“桶”数;
步骤S2)通过哈希函数处理得到每个URL的哈希值h,计算其对应的“桶”的索引值;然后将每个URL插入到哈希表的“桶”上,当所有的URL插入到哈希表的“桶”上时,黑名单URL的哈希表建立完毕。
上述技术方案中,所述步骤S1)具体包括:
步骤S1-1)将黑名单中的URL分为三类:第一类是URL字符串只包含一个分隔符‘/’,第二类是URL字符串包含两个分隔符‘/’,第三类是包含三个及三个以上分隔符‘/’;
步骤S1-2)通过遍历黑名单中的URL字符串,得到三类URL占总URL的比例;
步骤S1-3)计算哈希表分配给三类URL的“桶”的数目;
分配给第一类URL“桶”的数目为:num1=HASHTABLESIZE*ratio_1,其中,ratio_1为第一类URL所占的比例;
分配给第二类URL“桶”的数目为:num2=HASHTABLESIZE*ratio_2,其中,ratio_2为第二类URL所占的比例;
分配给第三类URL“桶”的数目为:num3=HASHTABLESIZE*ratio_3,其中ratio_3为第三类URL所占的比例。
上述技术方案中,所述步骤S2)具体包括:
步骤S2-1)通过哈希函数处理,得到黑名单中每个URL的哈希值h;
步骤S2-2)根据步骤S1-2)所得到的分配给各类URL的“桶”的数目和每个URL的哈希值h,计算其对应的“桶”的索引值;
根据第一类URL字符串的哈希值h计算其索引值:hash_index=h%num1,将第一类URL字符串的哈希值限定1~num1范围内;
根据第二类URL字符串的哈希值h计算其索引值:hash_index=h%num2+num1,将第一类URL字符串的哈希值限定num1~num1+num2范围内;
根据第三类URL字符串的哈希值h计算其索引值:hash_index=h%num3+num1+num2;将第三类URL字符串的哈希值限定在num1+num2~num1+num2+num3范围内;
步骤S2-3)根据每个URL的“桶”的索引值,将每个URL插入到哈希表的“桶”上,当所有的URL插入到哈希表的“桶”上时,黑名单URL的哈希表建立完毕。
上述技术方案中,所述步骤S2-3)中的将每个URL插入到哈希表的“桶”上的实现过程为:
首先查看URL的索引值对应的“桶”是否为空;如果“桶”为空,计算该URL的前缀哈希值,申请一个节点prefix_node,这个节点的前缀值为这个URL的前缀哈希值,同时这个节点也指向一个链表url_list,将这个URL字符串加入到链表url_list中;如果“桶”不为空,那么首先要遍历这个“桶”所指向的链表prefix_list中的prefix_node节点,检查节点的前缀值是否和这个URL的前缀哈希值相等,如果有一个节点的前缀值和这个URL的前缀哈希值相等,那么将这个URL添加到这个节点所指向的链表url_list中;如果这个链表上所有节点的前缀值都和这个URL字符串的前缀值不相等,那么给这个链表增加一个prefix_node节点,这个节点的前缀值为URL字符串的前缀哈希值,并且再建立一个这个节点指向的url_list链表,将这个URL添加到url_list链表上。
基于上述的黑名单URL的哈希表的建立方法建立的哈希表,本发明还提供了一种请求URL的查询方法,用于在哈希表中查询请求URL;所述方法包括:
步骤T1)逐个处理请求URL中的字符,得到包含的分隔符‘/’数目;根据分隔符的数目计算每个分隔符之前的所有字符的哈希值,计算其对应的“桶”的索引值;
步骤T2)根据请求URL的分隔符的个数和索引值在所述哈希表中查询请求URL,返回查询结果,查询完毕。
上述技术方案中,所述步骤T1)的具体实现过程为:
当请求URL只包含一个分隔符‘/’,计算这个分隔符之前的所有字符组成的字符串的哈希值h,根据哈希值h计算“桶”的索引值hash_index1;
当请求URL包含两个分隔符‘/’,计算第一个分隔符之前的所有字符的哈希值h1,其对应的“桶”的索引值为hash_index1;得到第二个分隔符之前的所有字符串得到的哈希值h2,其对应的“桶”的索引值为hash_index2;
当请求URL包含三个以及以上各分隔符,计算由第一个分隔符之前的所有字符组成的字符串的哈希值h1,其对应的“桶”的索引值为hash_index1;计算第二个分隔符之前的所有字符串的哈希值h2,其对应的“桶”的索引值为hash_index2;计算第三个分隔符之前的所有字符串的哈希值h3,其对应的“桶”的索引值为hash_index3;如果请求URL包含3个以上分隔符,第三个分隔符后面的字符不再继续处理。
上述技术方案中,所述步骤T2)具体包括:
步骤T2-1)判断分隔符的个数是否等于1,如果判断结果是肯定的,转入步骤T2-2);否则,转入步骤T2-5);
步骤T2-2)根据其索引值hash_index1查找哈希表的第hash_index1个“桶”;如果这个“桶”为空,则这个请求URL不在黑名单中,转到步骤T2-14);否则,转入步骤T2-3);
步骤T2-3)遍历这个桶所指链表prefix_list的节点prefix_node,判断prefix_node节点的前缀值和请求URL的前缀值是否相等,如果存在一个节点的前缀值和请求URL的前缀值相等,转入步骤T2-4);否则,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-4)将请求URL和这个prefix_node节点所指向的前缀值相同的链表上url_list上的URL节点开始逐个进行匹配:首先判断请求URL长度是否大于等于URL节点上URL的长度,如果请求URL的长度小于URL节点上URL的长度,则前缀匹配失败,进行下一个节点上的前缀匹配;否则,比较请求URL和URL节点上URL是否相等;如果请求URL和URL节点上URL相等,则匹配成功,判定请求URL在黑名单中,转入步骤T2-14);否则继续下一个节点上的URL匹配;如果这个url_list上所有URL节点都和请求URL不相等,则匹配失败,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-5)判断分隔符的个数是否等于2,如果判断结果是肯定的,转入步骤T2-6);否则,转入步骤T2-9);
步骤T2-6)根据请求URL的2个索引值hash_index1和hash_index2;检查哈希表的第hash_index1个“桶”,如果这个“桶”不为空,转入步骤T2-2);如果这个“桶”为空,转入步骤T2-7);
步骤T2-7)检查哈希表的第hash_index2个“桶”;遍历这个桶所指链表prefix_list的节点prefix_node,判断节点的前缀值和请求URL的前缀值是否相同,如果存在一个节点的前缀值和请求URL的前缀值相等,转入步骤T2-8);否则,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-8)将请求URL的第1个分隔符之前的部分和这个prefix_node节点所指向的前缀值相同的链表上url_list上的URL节点开始逐个进行匹配;如果匹配成功,则请求URL在黑名单中,转入步骤T2-14);如果匹配不成功,则请求URL不在黑名单中,转入步骤T2-14);
步骤T2-9)根据请求URL的3个索引值hash_index1、hash_index2和hash_index3;检查哈希表的第hash_index1个“桶”,如果这个“桶”不为空,转入步骤T2-2);如果这个“桶”为空;检查哈希表的第hash_index2个“桶”;如果这个“桶”不为空,转入步骤T2-10);否则,转入步骤T2-12);
步骤T2-10)遍历这个桶所指链表prefix_list的节点prefix_node,判断节点的前缀值和请求URL的前缀值是否相同,如果存在一个节点的前缀值和请求URL的前缀值相等,转入步骤T2-11);否则,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-11)将请求URL的第2个分隔符之前的部分和这个prefix_node节点所指向的前缀值相同的链表上url_list上的URL节点开始逐个进行匹配;如果匹配成功,则请求URL在黑名单中,转入步骤T2-14);如果匹配不成功,则请求URL不在黑名单中,转入步骤T2-14);
步骤T2-12)检查哈希表的第hash_index3个“桶”,如果这个“桶”为空,则这个请求URL不在黑名单中,转到步骤T2-14);如果这个“桶”不为空,遍历这个桶所指链表prefix_list的节点prefix_node,判断节点的前缀值和请求URL的前缀值是否相同,如果存在一个节点的前缀值和请求URL的前缀值相等,转入步骤T2-13);否则,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-13)将请求URL的第3个分隔符之前的部分和这个prefix_node节点所指向的前缀值相同的链表上url_list上的URL节点开始逐个进行匹配;如果匹配成功,则请求URL在黑名单中,转入步骤T2-14);如果匹配不成功,则请求URL不在黑名单中,转入步骤T2-14);
步骤T2-14)获取匹配查询结果,查询完毕
本发明的优点在于:本发明的方法既具备哈希算法的高效性能,同时又能支持前缀匹配,提高了查找效率。
附图说明
图1为本发明的种黑名单URL的哈希表的建立方法的流程图;
图2为本发明的哈希表的示意图
图3为本发明的请求URL查询过程的流程图。
具体实施方式
下面结合附图和具体实施例对本发明的进一步的详细描述。
如图1所示,一种黑名单URL的哈希表的建立方法,所述方法包括:
步骤S1)遍历黑名单中的URL字符串,按照分隔符的个数将黑名单中的URL分为三类;计算三类URL所占的比例,计算出分配给三类URL的哈希表的“桶”数;具体包括:
步骤S1-1)将黑名单中的URL分为三类:第一类是URL字符串只包含一个分隔符‘/’,第二类是URL字符串包含两个分隔符‘/’,第三类是包含三个及三个以上分隔符‘/’;
步骤S1-2)通过遍历黑名单中的URL字符串,得到三类URL占总URL的比例;
步骤S1-3)计算哈希表分配给三类URL的“桶”的数目;
分配给第一类URL“桶”的数目为:num1=HASHTABLESIZE*ratio_1,其中,ratio_1为第一类URL所占的比例;
分配给第二类URL“桶”的数目为:num2=HASHTABLESIZE*ratio_2,其中,ratio_2为第二类URL所占的比例;
分配给第三类URL“桶”的数目为:num3=HASHTABLESIZE*ratio_3,其中ratio_3为第三类URL所占的比例。
步骤S2)通过哈希函数处理得到每个URL的哈希值h,计算其对应的“桶”的索引值;然后将每个URL插入到哈希表的“桶”上,当所有的URL插入到哈希表的“桶”上时,黑名单URL的哈希表建立完毕。
步骤S2-1)通过哈希函数处理,得到黑名单中每个URL的哈希值h;
步骤S2-2)根据步骤S1-2)所得到的分配给各类URL的“桶”的数目和每个URL的哈希值h计算其对应的“桶”的索引值;
根据第一类URL字符串的哈希值h计算其索引值:hash_index=h%num1,将第一类URL字符串的哈希值限定1~num1内;
根据第二类URL字符串的哈希值h计算其索引值:hash_index=h%num2+num1,将第一类URL字符串的哈希值限定num1~num1+num2范围内;
根据第三类URL字符串的哈希值h计算其索引值:hash_index=h%num3+num1+num2;将第三类URL字符串的哈希值限定在num1+num2~num1+num2+num3范围内。
步骤S2-3)根据每个URL的“桶”的索引值,将每个URL插入到哈希表的“桶”上,建立哈希表;
首先查看URL的索引值对应的“桶”是否为空;如果“桶”为空,计算该URL的前缀哈希值,申请一个节点prefix_node,这个节点的前缀值为这个URL的前缀哈希值,同时这个节点也指向一个链表url_list,将这个URL字符串加入到链表url_list中;如果“桶”不为空,那么首先要遍历这个“桶”所指向的链表prefix_list中的prefix_node节点,检查节点的前缀值是否和这个URL的前缀哈希值相等,如果有一个节点的前缀值和这个URL的前缀哈希值相等,那么将这个URL添加到这个节点所指向的链表url_list中。如果这个链表上所有节点的前缀值都和这个URL字符串的前缀值不相等,那么给这个链表增加一个prefix_node节点,这个节点的前缀值为URL字符串的前缀哈希值,并且再建立一个这个节点指向的url_list链表,将这个URL添加到url_list链表上;如图2所示,当所有黑名单的URL插入哈希表后,哈希表建立完毕。
基于上述方法建立的哈希表,本发明还提供了一种请求URL的查询方法,用于在哈希表中查询请求URL;所述方法包括:
步骤T1)逐个处理请求URL中的字符,得到包含的分隔符‘/’数目;根据分隔符的数目计算每个分隔符之前的所有字符的哈希值,计算其对应的“桶”的索引值;
当请求URL只包含一个分隔符‘/’,计算这个分隔符之前的所有字符组成的字符串的哈希值h,根据哈希值h计算“桶”的索引值hash_index1;
当请求URL包含两个分隔符‘/’,计算第一个分隔符之前的所有字符的哈希值h1,其对应的“桶”的索引值为hash_index1;得到第二个分隔符之前的所有字符串得到的哈希值h2,其对应的“桶”的索引值为hash_index2;
当请求URL包含三个以及以上各分隔符,计算由第一个分隔符之前的所有字符组成的字符串的哈希值h1,其对应的“桶”的索引值为hash_index1;计算第二个分隔符之前的所有字符串的哈希值h2,其对应的“桶”的索引值为hash_index2;计算第三个分隔符之前的所有字符串的哈希值h3,其对应的“桶”的索引值为hash_index3;如果请求URL包含3个以上分隔符,第三个分隔符后面的字符不再继续处理。
步骤T2)根据请求URL的分隔符的个数和索引值在所述哈希表中查找请求URL;
如图3所示,所述步骤T2)具体包括:
步骤T2-1)判断分隔符的个数是否等于1,如果判断结果是肯定的,转入步骤T2-2);否则,转入步骤T2-5);
步骤T2-2)根据其索引值hash_index1查找哈希表的第hash_index1个“桶”;如果这个“桶”为空,则这个请求URL不在黑名单中,转到步骤T2-14);否则,转入步骤T2-3);
步骤T2-3)遍历这个桶所指链表prefix_list的节点prefix_node,判断prefix_node节点的前缀值和请求URL的前缀值是否相等,如果存在一个节点的前缀值和请求URL的前缀值相等,转入步骤T2-4);否则,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-4)将请求URL和这个prefix_node节点所指向的前缀值相同的链表上url_list上的URL节点开始逐个进行匹配:首先判断请求URL长度是否大于等于URL节点上URL的长度,如果请求URL的长度小于URL节点上URL的长度,则前缀匹配失败,进行下一个节点上的前缀匹配;否则,比较请求URL和URL节点上URL是否相等;如果请求URL和URL节点上URL相等,则匹配成功,判定请求URL在黑名单中,转入步骤T2-14);否则继续下一个节点上的URL匹配;如果这个url_list上所有URL节点都和请求URL不相等,则匹配失败,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-5)判断分隔符的个数是否等于2,如果判断结果是肯定的,转入步骤T2-6);否则,转入步骤T2-9);
步骤T2-6)根据请求URL的2个索引值hash_index1和hash_index2;检查哈希表的第hash_index1个“桶”,如果这个“桶”不为空,转入步骤T2-2);如果这个“桶”为空,转入步骤T2-7);
步骤T2-7)检查哈希表的第hash_index2个“桶”;遍历这个桶所指链表prefix_list的节点prefix_node,判断节点的前缀值和请求URL的前缀值是否相同,如果存在一个节点的前缀值和请求URL的前缀值相等,转入步骤T2-8);否则,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-8)将请求URL的第1个分隔符之前的部分和这个prefix_node节点所指向的前缀值相同的链表上url_list上的URL节点开始逐个进行匹配;如果匹配成功,则请求URL在黑名单中,转入步骤T2-14);如果匹配不成功,则请求URL不在黑名单中,转入步骤T2-14);
步骤T2-9)根据请求URL的3个索引值hash_index1、hash_index2和hash_index3;检查哈希表的第hash_index1个“桶”,如果这个“桶”不为空,转入步骤T2-2);如果这个“桶”为空;检查哈希表的第hash_index2个“桶”;如果这个“桶”不为空,转入步骤T2-10);否则,转入步骤T2-12);
步骤T2-10)遍历这个桶所指链表prefix_list的节点prefix_node,判断节点的前缀值和请求URL的前缀值是否相同,如果存在一个节点的前缀值和请求URL的前缀值相等,转入步骤T2-11);否则,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-11)将请求URL的第2个分隔符之前的部分和这个prefix_node节点所指向的前缀值相同的链表上url_list上的URL节点开始逐个进行匹配;如果匹配成功,则请求URL在黑名单中,转入步骤T2-14);如果匹配不成功,则请求URL不在黑名单中,转入步骤T2-14);
步骤T2-12)检查哈希表的第hash_index3个“桶”,如果这个“桶”为空,则这个请求URL不在黑名单中,转到步骤T2-14);如果这个“桶”不为空,遍历这个桶所指链表prefix_list的节点prefix_node,判断节点的前缀值和请求URL的前缀值是否相同,如果存在一个节点的前缀值和请求URL的前缀值相等,转入步骤T2-13);否则,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-13)将请求URL的第3个分隔符之前的部分和这个prefix_node节点所指向的前缀值相同的链表上url_list上的URL节点开始逐个进行匹配;如果匹配成功,则请求URL在黑名单中,转入步骤T2-14);如果匹配不成功,则请求URL不在黑名单中,转入步骤T2-14);
步骤T2-14)获取匹配结果,查询完毕。
在建立哈希表和查找请求URL用哈希函数做哈希处理的过程中,只处理前3个分隔符之前的数据,这是因为一般加入到黑名单中的URL都很短,很少会包含3个以上的分隔符。而实际请求URL一般却很长,处理整个请求URL会增大查找时间。因为黑名单中的URL很短,不用处理完整个URL就可以判断请求URL是否在黑名单中或者是黑命单中URL的子部分。只处理请求URL字符串的部分,既可以达到查找的目的,又减小了处理时间。
下面以实例对上述方法进行说明。
假设黑名单中URL为100万条,哈希表的表项有80万,3类URL的比例为1/2、1/4、1/4,那么分配给三类URL“桶”的个数分别为40万个、20万、20万。那么第一类URL将被插入到哈希表的第0~40万个“桶”上,第二类URL将被插入到哈希表的第40~60万个的“桶”上,第三类URL将被插入到哈希表的第60~80万个的“桶”上。
以黑名单中的URL http://image.baidu.com/channel和https://www.taobao.com为例:
(1)据分隔符“://”将原始URL分为两项,http和image.baidu.com/channel,忽略分隔符“://”前面的部分,即协议部分;只处理image.baidu.com/channel这一部分。
(2)检查剩下部分image.baidu.com/channel这一部分包含分隔符“/”的个数。可以知道包含分隔符“/”的个数为2,没有超过3个,对除去协议部分的余下的URL整个做哈希处理,得到哈希值h;因为要将这个URL插入到哈希表的第40万~60万的某个“桶”上,根据哈希值计算索引值:hash_index=h%num2+num1,得到最终的索引值hash_index=467147
这里使用的哈希函数是文献《两种对URL的散列效果很好的函数》中介绍的哈希函数_hf,定义如下:
int_hf(char*url,int size)
{
int result=0;
char*ptr=url;
int c;
for(int i=1;c=*ptr++;i++)
result+=c*3*i;
if(result<0)
result=-result;
return result%size;
}
检查哈希表,Hashtable[hash_index]处的“桶”是否为空。此时Hashtable[hash_index]处为空,将此URL(image.baidu.com/channel/star)插入到这个“桶”指向链表的第一个节点上,并记录这个节点的前缀值prefix=30583。计算前缀值是取URL字符串的前两个字节,计算公式如下:
unsigned short prefix_hash(unsigned char*url)
{
return(unsigned short)((*url)<<8|*(url+1));
}
这里为了处理哈希冲突,即有多个URL被哈希到同一表项,则采用链式存储结构。
https://www.taobao.com插入到哈希表的第73229个“桶”上,前缀值prefix=30583。
例1:请求URL为:https://www.taobao.com/market/nvzhuang
将请求URL去除协议https部分,只对余下部分www.taobao.com/market/nvzhuang处理。这部分包含3个分隔符,使用建立哈希表过程中使用的哈希函数。首先得到www.taobao.com部分的哈希值h1,www.taobao.com/market部分的哈希值h2,www.taibao.com/market/nvzhuang部分的哈希值h3,计算索引值:
hash_index1=h1%num=73229
hash_index2=h%num2+num1=408664
hash_index3=h%num2+num1+num2,hash_index3=605580。
首先检查哈希表的第hash_index1个“桶”。这个桶上有一个节点,这个节点的前缀值prefix=30583,和请求URL:www.taobao.com/market/nvzhuang的前缀值相同,则将请求URL第一个分隔符“/”之前的部分www.taobao.com和这个节点所指向的链表上的URL节点www.taobao.com开始匹配,前缀匹配成功。请求URL在黑名单中;不再继续检查哈希表的第hash_index1和第hash_index2个“桶”。
例2:请求http://image.baidu.com/channel
计算两个索引值hash_index1=76550,hash_index2=467147。首先检查哈希表的第hash_index1“桶”;这个桶上有一个节点,这个节点的前缀值prefix=30583,和请求URL(image.baidu.com/channel)的前缀值不同,在这个“桶”上没有产生匹配,再检查哈希表的第hash_index2个“桶”;
哈希表的第hash_index2个“桶”上有一个节点,这个节点的前缀值prefix=26989,和请求URL(image.baidu.com/channel)的前缀值相同,则将请求URL个这个节点所指向的链表上的URL节点image.baidu.com/channel开始匹配,前缀匹配成功。请求URL在黑名单中。
例3:请求http://weibo.com
计算索引值hash_index1=30563,检查哈希表的第hash_index1个“桶”;这个“桶”为空,请求URL不在黑名单中。
在上述查找过程中,会根据请求URL包含的分隔符“/”的数目得到不同数量的哈希值。得到哈希值之后,计算得到索引值,然后查找索引值处的哈希表的“桶”。以得到2个索引值hash_index1,hash_index2为例。首先会查找hash_index1处的“桶”,hash_index1处的“桶”上的黑名单中的URL只包含一个分隔符,代表的往往是此处的URL只包含域名。先将请求URL和只包含域名的黑名单中URL进行前缀比较,即检查请求URL是否和黑名单中URL相等或者是黑名单中URL域名下的某一路径或者子路径等。
例1中查找请求https://www.taobao.com/market/nvzhuang中检查哈希表hash_index1=76550处的“桶”,将请求URL:https://www.taobao.com/market/nvzhuang和hash_index1=73229处节点上的URL:https://www.taobao.com前缀比较就是这个过程。
Claims (7)
1.一种黑名单URL的哈希表的建立方法,所述方法包括:
步骤S1)遍历黑名单中的URL字符串,按照分隔符的个数将黑名单中的URL分为三类;计算三类URL所占的比例,计算出分配给三类URL的哈希表的“桶”数;
步骤S2)通过哈希函数处理得到每个URL的哈希值h,计算其对应的“桶”的索引值;然后将每个URL插入到哈希表的“桶”上,当所有的URL插入到哈希表的“桶”上时,黑名单URL的哈希表建立完毕。
2.根据权利要求1所述的黑名单URL的哈希表的建立方法,其特征在于,所述步骤S1)具体包括:
步骤S1-1)将黑名单中的URL分为三类:第一类是URL字符串只包含一个分隔符‘/’,第二类是URL字符串包含两个分隔符‘/’,第三类是包含三个及三个以上分隔符‘/’;
步骤S1-2)通过遍历黑名单中的URL字符串,得到三类URL占总URL的比例;
步骤S1-3)计算哈希表分配给三类URL的“桶”的数目;
分配给第一类URL“桶”的数目为:num1=HASHTABLESIZE*ratio_1,其中,ratio_1为第一类URL所占的比例;
分配给第二类URL“桶”的数目为:num2=HASHTABLESIZE*ratio_2,其中,ratio_2为第二类URL所占的比例;
分配给第三类URL“桶”的数目为:num3=HASHTABLESIZE*ratio_3,其中ratio_3为第三类URL所占的比例。
3.根据权利要求2所述的黑名单URL的哈希表的建立方法,其特征在于,所述步骤S2)具体包括:
步骤S2-1)通过哈希函数处理,得到黑名单中每个URL的哈希值h;
步骤S2-2)根据步骤S1-2)所得到的分配给各类URL的“桶”的数目和每个URL的哈希值h,计算其对应的“桶”的索引值;
根据第一类URL字符串的哈希值h计算其索引值:hash_index=h%num1,将第一类URL字符串的哈希值限定1~num1范围内;
根据第二类URL字符串的哈希值h计算其索引值:hash_index=h%num2+num1,将第一类URL字符串的哈希值限定num1~num1+num2范围内;
根据第三类URL字符串的哈希值h计算其索引值:hash_index=h%num3+num1+num2;将第三类URL字符串的哈希值限定在num1+num2~num1+num2+num3范围内;
步骤S2-3)根据每个URL的“桶”的索引值,将每个URL插入到哈希表的“桶”上,当所有的URL插入到哈希表的“桶”上时,黑名单URL的哈希表建立完毕。
4.根据权利要求3所述的黑名单URL的哈希表的建立方法,其特征在于,所述步骤S2-3)中的将每个URL插入到哈希表的“桶”上的实现过程为:
首先查看URL的索引值对应的“桶”是否为空;如果“桶”为空,计算该URL的前缀哈希值,申请一个节点prefix_node,这个节点的前缀值为这个URL的前缀哈希值,同时这个节点也指向一个链表url_list,将这个URL字符串加入到链表url_list中;如果“桶”不为空,那么首先要遍历这个“桶”所指向的链表prefix_list中的prefix_node节点,检查节点的前缀值是否和这个URL的前缀哈希值相等,如果有一个节点的前缀值和这个URL的前缀哈希值相等,那么将这个URL添加到这个节点所指向的链表url_list中;如果这个链表上所有节点的前缀值都和这个URL字符串的前缀值不相等,那么给这个链表增加一个prefix_node节点,这个节点的前缀值为URL字符串的前缀哈希值,并且再建立一个这个节点指向的url_list链表,将这个URL添加到url_list链表上。
5.一种请求URL的查询方法,基于权利要求1-4之一所述的黑名单URL的哈希表的建立方法建立的哈希表实现,用于在哈希表中查询请求URL;所述方法包括:
步骤T1)逐个处理请求URL中的字符,得到包含的分隔符‘/’数目;根据分隔符的数目计算每个分隔符之前的所有字符的哈希值,计算其对应的“桶”的索引值;
步骤T2)根据请求URL的分隔符的个数和索引值在所述哈希表中查询请求URL,返回查询结果,查询完毕。
6.根据权利要求5所述的请求URL的查询方法,其特征在于,所述步骤T1)的具体实现过程为:
当请求URL只包含一个分隔符‘/’,计算这个分隔符之前的所有字符组成的字符串的哈希值h,根据哈希值h计算“桶”的索引值hash_index1;
当请求URL包含两个分隔符‘/’,计算第一个分隔符之前的所有字符的哈希值h1,其对应的“桶”的索引值为hash_index1;得到第二个分隔符之前的所有字符串得到的哈希值h2,其对应的“桶”的索引值为hash_index2;
当请求URL包含三个以及以上各分隔符,计算由第一个分隔符之前的所有字符组成的字符串的哈希值h1,其对应的“桶”的索引值为hash_index1;计算第二个分隔符之前的所有字符串的哈希值h2,其对应的“桶”的索引值为hash_index2;计算第三个分隔符之前的所有字符串的哈希值h3,其对应的“桶”的索引值为hash_index3;如果请求URL包含3个以上分隔符,第三个分隔符后面的字符不再继续处理。
7.根据权利要求6所述的请求URL的查询方法,其特征在于,所述步骤T2)具体包括:
步骤T2-1)判断分隔符的个数是否等于1,如果判断结果是肯定的,转入步骤T2-2);否则,转入步骤T2-5);
步骤T2-2)根据其索引值hash_index1查找哈希表的第hash_index1个“桶”;如果这个“桶”为空,则这个请求URL不在黑名单中,转到步骤T2-14);否则,转入步骤T2-3);
步骤T2-3)遍历这个桶所指链表prefix_list的节点prefix_node,判断prefix_node节点的前缀值和请求URL的前缀值是否相等,如果存在一个节点的前缀值和请求URL的前缀值相等,转入步骤T2-4);否则,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-4)将请求URL和这个prefix_node节点所指向的前缀值相同的链表上url_list上的URL节点开始逐个进行匹配:首先判断请求URL长度是否大于等于URL节点上URL的长度,如果请求URL的长度小于URL节点上URL的长度,则前缀匹配失败,进行下一个节点上的前缀匹配;否则,比较请求URL和URL节点上URL是否相等;如果请求URL和URL节点上URL相等,则匹配成功,判定请求URL在黑名单中,转入步骤T2-14);否则继续下一个节点上的URL匹配;如果这个url_list上所有URL节点都和请求URL不相等,则匹配失败,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-5)判断分隔符的个数是否等于2,如果判断结果是肯定的,转入步骤T2-6);否则,转入步骤T2-9);
步骤T2-6)根据请求URL的2个索引值hash_index1和hash_index2;检查哈希表的第hash_index1个“桶”,如果这个“桶”不为空,转入步骤T2-2);如果这个“桶”为空,转入步骤T2-7);
步骤T2-7)检查哈希表的第hash_index2个“桶”;遍历这个桶所指链表prefix_list的节点prefix_node,判断节点的前缀值和请求URL的前缀值是否相同,如果存在一个节点的前缀值和请求URL的前缀值相等,转入步骤T2-8);否则,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-8)将请求URL的第1个分隔符之前的部分和这个prefix_node节点所指向的前缀值相同的链表上url_list上的URL节点开始逐个进行匹配;如果匹配成功,则请求URL在黑名单中,转入步骤T2-14);如果匹配不成功,则请求URL不在黑名单中,转入步骤T2-14);
步骤T2-9)根据请求URL的3个索引值hash_index1、hash_index2和hash_index3;检查哈希表的第hash_index1个“桶”,如果这个“桶”不为空,转入步骤T2-2);如果这个“桶”为空;检查哈希表的第hash_index2个“桶”;如果这个“桶”不为空,转入步骤T2-10);否则,转入步骤T2-12);
步骤T2-10)遍历这个桶所指链表prefix_list的节点prefix_node,判断节点的前缀值和请求URL的前缀值是否相同,如果存在一个节点的前缀值和请求URL的前缀值相等,转入步骤T2-11);否则,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-11)将请求URL的第2个分隔符之前的部分和这个prefix_node节点所指向的前缀值相同的链表上url_list上的URL节点开始逐个进行匹配;如果匹配成功,则请求URL在黑名单中,转入步骤T2-14);如果匹配不成功,则请求URL不在黑名单中,转入步骤T2-14);
步骤T2-12)检查哈希表的第hash_index3个“桶”,如果这个“桶”为空,则这个请求URL不在黑名单中,转到步骤T2-14);如果这个“桶”不为空,遍历这个桶所指链表prefix_list的节点prefix_node,判断节点的前缀值和请求URL的前缀值是否相同,如果存在一个节点的前缀值和请求URL的前缀值相等,转入步骤T2-13);否则,请求URL不在黑名单中,转入步骤T2-14);
步骤T2-13)将请求URL的第3个分隔符之前的部分和这个prefix_node节点所指向的前缀值相同的链表上url_list上的URL节点开始逐个进行匹配;如果匹配成功,则请求URL在黑名单中,转入步骤T2-14);如果匹配不成功,则请求URL不在黑名单中,转入步骤T2-14);
步骤T2-14)获取匹配查询结果,查询完毕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610022119.8A CN106970917B (zh) | 2016-01-13 | 2016-01-13 | 一种黑名单url的哈希表的建立及请求url的查找方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610022119.8A CN106970917B (zh) | 2016-01-13 | 2016-01-13 | 一种黑名单url的哈希表的建立及请求url的查找方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106970917A true CN106970917A (zh) | 2017-07-21 |
CN106970917B CN106970917B (zh) | 2019-11-19 |
Family
ID=59335148
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610022119.8A Active CN106970917B (zh) | 2016-01-13 | 2016-01-13 | 一种黑名单url的哈希表的建立及请求url的查找方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106970917B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113886743A (zh) * | 2021-12-08 | 2022-01-04 | 北京金山云网络技术有限公司 | 缓存资源的刷新方法、装置及系统 |
CN114817147A (zh) * | 2022-07-01 | 2022-07-29 | 北京网藤科技有限公司 | 一种通过二级索引进行文件特征值快速检索的方法和系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101605129A (zh) * | 2009-06-23 | 2009-12-16 | 北京理工大学 | 一种用于url过滤系统的url查找方法 |
CN102110132A (zh) * | 2010-12-08 | 2011-06-29 | 北京星网锐捷网络技术有限公司 | 统一资源定位符匹配查找方法、装置和网络侧设备 |
CN102780681A (zh) * | 2011-05-11 | 2012-11-14 | 中兴通讯股份有限公司 | Url过滤系统及过滤url的方法 |
CN103544316A (zh) * | 2013-11-06 | 2014-01-29 | 苏州大拿信息技术有限公司 | Url过滤的系统及其实现方法 |
CN104636340A (zh) * | 2013-11-06 | 2015-05-20 | 腾讯科技(深圳)有限公司 | 网页url过滤方法、装置及系统 |
-
2016
- 2016-01-13 CN CN201610022119.8A patent/CN106970917B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101605129A (zh) * | 2009-06-23 | 2009-12-16 | 北京理工大学 | 一种用于url过滤系统的url查找方法 |
CN102110132A (zh) * | 2010-12-08 | 2011-06-29 | 北京星网锐捷网络技术有限公司 | 统一资源定位符匹配查找方法、装置和网络侧设备 |
CN102780681A (zh) * | 2011-05-11 | 2012-11-14 | 中兴通讯股份有限公司 | Url过滤系统及过滤url的方法 |
CN103544316A (zh) * | 2013-11-06 | 2014-01-29 | 苏州大拿信息技术有限公司 | Url过滤的系统及其实现方法 |
CN104636340A (zh) * | 2013-11-06 | 2015-05-20 | 腾讯科技(深圳)有限公司 | 网页url过滤方法、装置及系统 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113886743A (zh) * | 2021-12-08 | 2022-01-04 | 北京金山云网络技术有限公司 | 缓存资源的刷新方法、装置及系统 |
CN113886743B (zh) * | 2021-12-08 | 2022-05-03 | 北京金山云网络技术有限公司 | 缓存资源的刷新方法、装置及系统 |
CN114817147A (zh) * | 2022-07-01 | 2022-07-29 | 北京网藤科技有限公司 | 一种通过二级索引进行文件特征值快速检索的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106970917B (zh) | 2019-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101909079B (zh) | 一种骨干网链路中用户上网行为数据采集方法和系统 | |
Niaz et al. | Merkle hash tree based techniques for data integrity of outsourced data. | |
CN102110132B (zh) | 统一资源定位符匹配查找方法、装置和网络侧设备 | |
CN108039943B (zh) | 一种可验证的加密搜索方法 | |
US9098601B2 (en) | Ternary content-addressable memory assisted packet classification | |
CN101727464B (zh) | 获取别称匹配对的方法及装置 | |
US6662184B1 (en) | Lock-free wild card search data structure and method | |
CN102664935B (zh) | 一种web类用户行为和用户信息的关联输出方法及系统 | |
CN103973684A (zh) | 规则编译匹配方法及装置 | |
CN103136372B (zh) | 网络可信性行为管理中url快速定位、分类和过滤方法 | |
CN105678188A (zh) | 数据库防泄露协议识别方法及装置 | |
CN106506729A (zh) | 一种基于dns视图的dns策略解析方法及装置 | |
CN102405622A (zh) | 二叉树建立、压缩和查找的方法和装置 | |
CN104579941A (zh) | 一种OpenFlow交换机中的报文分类方法 | |
CN104135737B (zh) | 一种lte网络基站网元配置数据获取方法 | |
CN101605097A (zh) | IPv6/IPv4地址分级访问权限控制方法和访问控制网关 | |
CN104954345B (zh) | 基于对象分析的攻击识别方法及装置 | |
CN109698831A (zh) | 数据防护方法和装置 | |
CN106970917A (zh) | 一种黑名单url的哈希表的建立及请求url的查找方法 | |
CN105426474A (zh) | 统一资源定位符url匹配的方法及装置 | |
CN103209170A (zh) | 文件类型识别方法及识别系统 | |
CN110245195B (zh) | 基于蜜罐系统的结构化查询语言注入检测方法及装置 | |
CN103036848B (zh) | 协议的逆向工程方法及系统 | |
CN108073808A (zh) | 基于pdb调试信息生成攻击者画像的方法及系统 | |
CN106383848A (zh) | 一种实现的多音字汉字转拼音的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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 |