本申请实施例涉及通信技术领域,特别涉及一种匹配方法和客户端,服务器以及匹配设备。
背景技术:
目前对于文本内提取URL(Uniform Resource Locator,统一资源定位符)常用的方法是基于正则表达式匹配,即收集需要提取的URL的特征,抽象成正则表达式,在文本中进行匹配,当目前该方法有以下几个缺点:
缺点1.占用内存大,运行效率低
从本质上讲,正则表达式引擎可笼统分为两类:确定性有限自动机(DFA)引擎和非确定性有限自动机(NFA)引擎。确定有限自动机的匹配过程需要占用较多的内存,匹配速度较快;非确定有限自动机是回溯引擎,可以处理更复杂的正则表达式,但是匹配速度较确定性有限自动机慢。
缺点2.匹配精准度差、不容易应付大量的变形URL的情况,正则表达式很难写的非常精确,而且利用正则表达式匹配,灵活性较差,当需要对一些新特征进行匹配时,往往需要修改整个正则表达式。
缺点3.具有安全漏洞,如果该正则表达式对外泄露或者被外界探测出,外界即可以构造出一个可以规避当前表达式的URL。
可见现有技术中利用正则表达式无法满足匹配的需要。
技术实现要素:
本申请提出了一种匹配方法和客户端,服务器以及匹配设备,用以克服现有技术中的缺陷,实现了对URL的准确识别。
本申请提出了一种匹配方法,包括:
客户端提取并存储顶级域名;
所述客户端检测待检测文本中是否存在所述顶级域名,并在检测结果为存在时,记录所述待检测文本中存在所述顶级域名的文本位置;
所述客户端将携带所述文本位置的信息的报文发送给服务器。
优选的,所述提取并存储顶级域名,包括:
所述客户端确定顶级域名获取源;
所述客户端定时从所述顶级域名获取源中获取顶级域名;
所述客户端将获取到的顶级域名存储在数据库中。
优选的,所述客户端定时从所述顶级域名获取源中获取顶级域名,包括:
所述客户端定时从定时域名获取源获取包含有顶级域名的原始数据;
所述客户端基于持久化存储需求对获取的所述原始数据进行处理后得到所述顶级域名。
优选的,所述客户端检测待检测文本中是否存在所述顶级域名,具体为:
所述客户端基于获取的顶级域名构建有限状态自动机;
所述客户端通过所述有限状态自动机检测所述待检测文本中是否存在所述顶级域名。
该方法,还包括:
所述客户端基于预设的规则对所述待检测文本中的字符进行兼容和/或识别处理,以提高URL匹配的准确率。
本申请还提出了一种匹配方法,其特征在于,包括:
服务器接收客户端发送的携带待检测文本中存在顶级域名的文本位置的信息的报文;
所述服务器基于统一资源定位符URL标准范式对所述待检测文本中所述 文本位置的前后字符进行匹配,并输出匹配结果。
优选的,该方法还包括:
所述服务器基于预设的规则对所述待检测文本中的字符进行兼容和/或识别处理,以提高URL匹配的准确率。
本申请还公开了一种匹配方法,包括:
提取并存储顶级域名;
检测待检测文本中是否存在所述顶级域名,并在检测结果为存在时,记录所述待检测文本中存在所述顶级域名的文本位置;
基于URL标准范式对所述文本位置的前后字符进行匹配,并输出匹配结果。
优选的,所述提取并存储顶级域名,包括:
确定顶级域名获取源;
定时从所述顶级域名获取源中获取顶级域名;
将获取到的顶级域名存储在数据库中。
优选的,所述定时从所述顶级域名获取源中获取顶级域名,包括:
定时从定时域名获取源获取包含有顶级域名的原始数据;
基于持久化存储需求对获取的所述原始数据进行处理后得到所述顶级域名。
优选的,所述检测待检测文本中是否存在所述顶级域名,具体为:
基于获取的顶级域名构建有限状态自动机;
通过所述有限状态自动机检测所述待检测文本中是否存在所述顶级域名。
优选的,还包括:
基于预设的规则对所述待检测文本中的字符进行兼容和/或识别处理,以提高URL匹配的准确率。
本申请还提出了一种客户端,包括:
提取模块,用于提取并存储顶级域名;
检测模块,用于检测待检测文本中是否存在所述顶级域名;
记录模块,用与在待检测文本中存在所述顶级域名时,记录所述待检测文本中存在所述顶级域名的文本位置;
发送模块,用于将携带所述文本位置的信息的报文发送给服务器
优选的,所述提取模块,具体用于:
确定顶级域名获取源;
定时从所述顶级域名获取源中获取顶级域名;
将获取到的顶级域名存储在数据库中。
优选的,所述提取模块定时从所述顶级域名获取源中获取顶级域名,具体为:
定时从定时域名获取源获取包含有顶级域名的原始数据;
基于持久化存储需求对获取的所述原始数据进行处理后得到所述顶级域名。
优选的,所述检测模块,具体用于:
基于获取的顶级域名构建有限状态自动机;
通过所述有限状态自动机检测所述待检测文本中是否存在所述顶级域名。
优选的,该客户端还包括:
处理模块,用于基于预设的规则对所述待检测文本中的字符进行兼容和/或识别处理,以提高URL匹配的准确率。
本申请还提出了一种服务器,包括:
接收模块,用于接收客户端发送的携带待检测文本中存在顶级域名的文本位置的信息的报文;
匹配模块,用于基于统一资源定位符URL标准范式对所述文本位置的前后字符进行匹配,并输出匹配结果。
优选的,该服务器,还包括:
处理模块,用于,用于基于预设的规则对所述待检测文本中的字符进行兼容和/或识别处理,以提高URL匹配的准确率。
本申请还提出了一种匹配设备,包括:
提取模块,用于提取并存储顶级域名;
检测模块,用于检测待检测文本中是否存在所述顶级域名;
记录模块,用与在待检测文本中存在所述顶级域名时,记录所述待检测文本中存在所述顶级域名的文本位置;
匹配模块,用于基于URL标准范式对所述文本位置的前后字符进行匹配,并输出匹配结果。
优选的,所述提取模块,具体用于:
确定顶级域名获取源;
定时从所述顶级域名获取源中获取顶级域名;
将获取到的顶级域名存储在数据库中。
优选的,所述提取模块定时从所述顶级域名获取源中获取顶级域名,具体为:
定时从定时域名获取源获取包含有顶级域名的原始数据;
基于持久化存储需求对获取的所述原始数据进行处理后得到所述顶级域名。
优选的,所述检测模块,具体用于:
基于获取的顶级域名构建有限状态自动机;
通过所述有限状态自动机检测所述待检测文本中是否存在所述顶级域名。
优选的,该匹配设备,还包括:
处理模块,用于基于预设的规则对所述待检测文本中的字符进行兼容和/或识别处理,以提高URL匹配的准确率。
与现有技术相比,本申请中通过检测待检测文本中是否存在所述顶级域名,并在检测结果为存在时,记录所述待检测文本中存在所述顶级域名的文本位置;基于URL标准范式对所述文本位置的前后字符进行匹配,并输出匹配结果,还利用预设的规则对文本进行兼容和/或识别处理,实现了自动匹配域名,并能通过预设的规则对变形的URL的识别,最终提高了URL的匹配准确性,同时由于采用多规则匹配,提高了安全性。
附图说明
图1为本申请实施例提出的一种匹配方法的流程示意图;
图2为本申请实施例提出的一种匹配方法的流程示意图;
图3为本申请实施例提出的一种匹配方法的流程示意图;
图4为本申请实施例提出的一种匹配方法的流程示意图;
图4A为本申请实施例提出的一种提取顶级域名的流程示意图;
图5为本申请实施例提出的一种URL范式匹配示意图;
图6为本申请实施例提出的一种匹配方法的流程示意图;
图7为本申请实施例提出的一种客户端的结构示意图;
图8为本申请实施例提出的一种服务器的结构示意图;
图9为本申请实施例提出的一种匹配设备的结构示意图。
具体实施方式
针对现有技术中存在的上述问题,本申请实施例一公开了一种匹配方法, 如图1所示,包括以下步骤:
步骤101,客户端提取并存储顶级域名;
具体的,例如待检测文本中存在URL为“http://www.sohu.com/domain/HXWZ”,由于URL中一定会存在顶级域名,例如其中包含的.com,而顶级域名的数量是比较有限的,目前已知的仅有400多个,数量比较少,且很稳定,因此通过顶级域名首先对URL(Uniform Resource Locator,统一资源定位符)进行匹配时,所需要提取的特征值(顶级域名)是比较少的,且比较稳定,可以适应各种变形URL的情况;匹配精度会提高,由于数量少,后续利用顶级域名就对URL进行筛选时速度也会提高,为此就需要提取并存储顶级域名。
而具体的提取并存储顶级域名的方式可以为:首先确定顶级域名获取源;定时从所述顶级域名获取源中获取顶级域名;将获取到的顶级域名存储在数据库中。
另外,考虑到顶级域名是会存在更新的过程的,就需要定时从域名获取源获取包含有顶级域名的原始数据;再考虑到从域名获取源中获取到的数据可能并不仅仅是本申请所要求的数据,还会存在别的数据,为此就需要基于持久化存储需求对获取的所述原始数据进行处理后得到所述顶级域名。
在具体的应用场景中,例如可以从顶级域名注册机构获取,当然也可以从顶级域名的发布机构等来源获取,再考虑到顶级域名虽然是很稳定,但还是会存在更新的过程的,为了能最大可能提高匹配的精度,就需要保持获取到的顶级域名的数据都是最新的,如此就需要定时从顶级域名获取源中获取顶级域名,例如以一周为周期,定时从顶级域名注册机构获取顶级域名,并将获取到的顶级域名存储在数据库中,当然,也可以存储在别的地方,只要能在后续进行匹配时能及时顺利的利用存储的顶级域名即可。
另外,在实际情况中,从顶级域名获取源获取的数据可能是网页等数据 形式,而不仅仅只有本申请所需要的顶级域名,还会包含有很多别的数据,为此后续由于需要利用顶级域名进行匹配,也为了便于存储顶级域名,就需要对获取的数据进行处理;例如获取到的数据时网页,就需要对获取到的网页进行处理,具体的,可以先进行去html标签处理,然后进行去javascript处理,最后根据域名、域名类型、域名申请者三个字段所在的文本相对位置,提取出这些数据,并进行保存,以此保证了存储的都是仅包含顶级域名的数据,而不会有其他多余的部分。
步骤102,客户端检测待检测文本中是否存在所述顶级域名,并在检测结果为存在时,记录所述待检测文本中存在所述顶级域名的文本位置;
具体的,以顶级域名.com,待检测文本中存在“http://www.sohu.com/domain/HXWZ”为例进行说明,会检测待检测文件中是否存在.com,会有两种结果,一种是检测存在.com,在此情况下,会记录下.com所在的位置(以上述为例来进行说明,例如在http://www.sohu.com/domain/HXWZ中,存在.com,位置为字符sohu之后,以及字符domain之前),当然也可以通过别的形式来标记位置,例如在某些文本中.com的位置是第5页第3行,只要能对.com所在的位置进行精确定位即可,当然在确定了第5页第3行中存在.com之后,仍然会继续检查待检测文本,直到检测完成待检测文本中的所有内容,保证能检测出文本中的所有存在的.com(其他顶级域名与此类似,在此不再进行赘叙),如果待检测文本中存在多个.com,会返回相应的多个位置;当然还有一种结果是检测不存在,在此情况下,会继续检测,直到检测存在或者待检测文本被检测完成为止;也即在对待检测文本进行检测时,无论当前是否已检测到顶级域名,都会把待检测文本检测完,以保证将待检测文本中的所有存在顶级域名的位置记录下来。
当然,考虑到需要提高检测效率,可以基于获取的顶级域名构建有限状 态自动机;通过所述有限状态自动机检测所述待检测文本中是否存在所述顶级域名,以此通过顶级域名构建有限状态自动机,使得有限状态自动机可以同时检测所有的顶级域名,大大提高了检测效率。
而具体的有限状态自动机,可以是一个二数组trie(单词查找树),在此,以二数组trie为例来进行说明,其构造步骤如下:
步骤1.初始化代表状态的数组base[]和用以检查前置状态的数组check[],数组类型均有int[]型。初始值:base[0]=1;check[0]=0;
步骤2.对于每一群兄弟节点,如[a1,a2,a3…an],寻找一个begin值,使得check[begin+a1…an]=0,也就是找到了n个空闲空间用以存放这些值。
步骤3.将这群兄弟节点的check值设置为check[begin+an]=begin;
步骤4.如果这个兄弟节点没有孩子,设置其base值为负值;否则,在该节点下插入孩子(begin=当前节点base值,重复步骤2)
步骤5.所有的域名均插入完成,则有限状态自动机构造完毕
仍以上述例子(即有限状态自动机是一个二数组trie)来进行说明,对应于该有限状态自动机,其对待检测文本进行检测的过程如下:
首先输入待检测文本,然后利用构造完成的二数组Trie查找待检测文本,其中查找的待检测文本中是否包含顶级域名的过程如下:
步骤1、定义当前状态p为base[0]=1,依次查询需要查找的字符串char的每一个字符;
步骤2、设当前需要查找的字符串下标为n,则新输入的字符为char[n],跳转到的新状态为base[char[n-1]]+char[n],此时检查check数组,如果check[base[char[n-1]+char[n]]]=base[char[n-1]],代表匹配成功,下一次匹配从当前状态开始。否则,匹配失败,匹配过程结束。
在步骤102中,若检测存在顶级域名,在记录下顶级域名所在的文本位置之后,执行步骤103,若检测不存在顶级域名,则继续检测直到检测到顶级 域名,或者将待检测文本检测完成。
步骤103、客户端将携带所述文本位置的信息的报文发送给服务器。
具体的,仍以上述例子来进行说明,文本中.com的位置是第5页第3行,就可以将该信息携带在报文中发送给服务器,以便后续服务器进行识别。
除了上述步骤以外,本申请的方法中还可以包括:客户端基于预设的规则对所述待检测文本中的字符进行兼容和/或识别处理,以提高URL匹配的准确率。
这是考虑到待检测文本中的某些字符的兼容性,例如因为误操作或者格式转换等原因,原本应该输入的www.taobao.com,在待检测文本中为www。taobao.com,为此就需要对待检测文本中的内容进行兼容性的识别和转换过程,将其转换为原本所要表达的含义,或者在某些特殊的情况下,例如待检测文本中存在,xxx@taobao.com(是一个邮箱),但其中的taobao.com为满足协议规范的URL,也即通过前述三个步骤,认为xxx@taobao.com是一个满足协议规范的URL,在此情况下,由于其中包含有邮箱后缀@,是不应被识别成URL的,在此情况下,就需要通过预设的规则对其进行排出处理,当然若后续基于某些需要,也可以调整预设的规则,不排除该xxx@taobao.com,具体的可以基于用户的需要进行调整,在此不再进行赘叙,以此通过预设的规则在前述三个步骤之前或之后进行兼容和/或识别处理,然后配合前述的三个步骤,以最终提高匹配的准确率。
本申请实施例二还提出了一种匹配方法,如图2所示,包括:
步骤201、服务器接收客户端发送的携带待检测文本中存在顶级域名的文本位置的信息的报文;
具体的,与客户端的步骤103对应,服务器接收客户端发送的报文,该保证中包含客户端在检测待检测文本时,检测到的存在顶级域名的文本位置, 服务器接收到该文本位置信息,例如是待检测文本中第5页第3行存在.com,后续就可以基于此找到需要检测的文本位置,并进行后续的检测。
步骤202、服务器基于统一资源定位符URL标准范式对所述待检测文本中所述文本位置的前后字符进行匹配,并输出匹配结果。
由于之前客户端仅检测了是否存在顶级域名,当存在时,只能说明存在疑似URL,为此为了进一步确定该疑似URL是否是合法的URL,可以将客户端的检测结果发送给服务器,以便服务器对检测到存在顶级域名的位置的前后字符进行检测,从而分担客户端的负担,也充分利用了服务器的资源。至于待待检测文本,可以在步骤201中,由客户端一并发送过来,或者也可以服务器自己去获取,例如客户端发送获取到的标识,该标识可以找到对应的待检测文本,后续服务器就可以基于该标识获取客户端进行检测的待检测文本。
具体检测顶级域名的位置的前后字符是否满足协议(例如可以参照的协议规范为rfc1738:http://tools.ietf.org/html/rfc1738.)规定的要求来判断该疑似URL是否是合法URL,仍以上述为例来进行说明,检测http://www.sohu.com/domain/HXWZ中.com所在位置的前面以及后面的字符是否满足协议要求,也即判断www.sohu以及domain/HXWZ是否满足协议的要求,在此,http://www.sohu以及/domain/HXWZ都是合法的,因此http://www.sohu.com/domain/HXWZ作为一个整体是合法的URL,当然若有任一部分(.com前面的字符,或者后面的字符)不合法,则认为整体不合法,以此,通过一个具体的流程来判断是否是合法的URL,而不是具有具体的某一规则或者特征值,能有效地提高识别的准确性,且不容易被规避,然后基于判断的结果输出匹配结果,例如输出的结果为第5页行第3行的URL是合法的URL。
除了上述步骤以外,本申请的方法中还可以包括:服务器基于预设的规则对所述待检测文本中的字符进行兼容和/或识别处理,以提高URL匹配的准 确率。
这是考虑到待检测文本中的某些字符的兼容性,例如因为误操作或者格式转换等原因,原本应该输入的www.taobao.com,在待检测文本中为www。taobao.com,为此就需要对待检测文本中的内容进行兼容性的识别和转换过程,将其转换为原本所要表达的含义,或者在某些特殊的情况下,例如待检测文本中存在,xxx@taobao.com(是一个邮箱),但其中的taobao.com为满足协议规范的URL,也即通过前述三个步骤,认为xxx@taobao.com是一个满足协议规范的URL,在此情况下,由于其中包含有邮箱后缀@,是不应被识别成URL的,在此情况下,就需要通过预设的规则对其进行排出处理,当然若后续基于某些需要,也可以调整预设的规则,不排除该xxx@taobao.com,具体的可以基于用户的需要进行调整,在此不再进行赘叙,以此通过预设的规则在前述的步骤之前或之后进行兼容和/或识别处理,然后可以配合前述步骤,最终提高匹配的准确率。
为了进一步对本申请进行说明,本申请实施例二公开了一种具体场景的匹配方法,如图3,图4,图4A所示,包括以下步骤:
步骤1、客户端进行全量顶级域名提取,而该步骤包括三个小的步骤,如图3所示,具体为(1)定义顶级域名获取源,(2)定时提取并解析,(3)本地持久化存储;
(1)客户端定义顶级域名获取源,也即客户端确定顶级域名获取源,在具体的场景中,顶级域名获取源可以选择internet assigned numbers authority iana(互联网号码分配委员会)所公开的数据,其中,互联网号码分配委员会定期在其的发布网页(http://www.internetassignednumbersauthority.org/domains/root/db)中公开与顶级域名相关的数据。
(2)客户端定时提取并解析从顶级域名获取源得到的数据,也即客户端定时提取从顶级域名获取源获取与顶级域名相关的数据和对获取到的数据进行处理;由于与顶级域名相关的数据会定时发布,为此,与其对应的,就需要定时从域名获取源中获取新的数据,以便保证获取到的数据是最新的,同时也保证数据的全面,具体的,可以定义的获取周期为一周。由于获取到的与顶级域名相关的数据一般不会是仅有所需要的顶级域名,还会包含很多别的数据,这样一是会占用多余的空间,再者在后续的过程中也会导致处理时间增加,还无法满足持久化存储需求,例如获取到的数据是html网页,在此情况下,在获取html网页后,需要做去html标签处理,去javascript处理,然后根据域名、域名类型、域名申请者三个字段所在的文本相对位置,提取出仅有顶级域名的数据
(3)客户端本地持久化存储处理后的数据,也即存储处理后的数据;在步骤(2)提取出仅有顶级域名的数据之后,并将提取出的数据存储在本地的数据库中。
步骤2、客户端利用获取到的顶级域名构造有限状态自动机,并利用构造的有限状态自动机检测待检测文本中是否存在顶级域名;具体的,有限状态自动机可以是一个二数组trie;其步骤如下:
(1)、首先初始化代表状态的数组base[]和用以检查前置状态的数组check[],数组类型均有int[]型。初始值:base[0]=1;check[0]=0;
(2)、对于每一群兄弟节点,如[a1,a2,a3…an],寻找一个begin值,使得check[begin+a1…an]=0,也就是找到了n个空闲空间用以存放这些值。
(3)、将这群兄弟节点的check值设置为check[begin+an]=begin;
(4)、如果这个兄弟节点没有孩子,设置其base值为负值;否则,在该节点下插入孩子(begin=当前节点base值,重复步骤2)
(5)、所有的域名均插入完成,则有限状态自动机构造完毕。
至于利用构造的有限状态自动机检测待检测文本中是否存在顶级域名,具体包括:
输入待检测文本,并利用构造完成的二数组Trie查找其中是否包含顶级域名,其过程如下:
首先定义当前状态p为base[0]=1,依次查询需要查找的字符串char的每一个字符;再者,设当前需要查找的字符串下标为n,则新输入的字符为char[n],跳转到的新状态为base[char[n-1]]+char[n],此时检查check数组,如果check[base[char[n-1]+char[n]]]=base[char[n-1]],代表匹配成功,下一次匹配从当前状态开始。否则,匹配失败,匹配过程结束。
步骤3、客户端记录在待检测文本中存在顶级域名的文本位置,并将该文本位置发送给服务器。
例如在待检测文本中的第48段存在顶级域名.com,后续就可以将该信息发送给服务器,以此同时,也可以将待检测文本一并发送给服务器。
步骤4,服务器接收到客户端发送的文本位置的信息后,利URL范式用对待检测文本中存在顶级域名的文本位置的前后进行匹配,也即检测存在顶级域名的文本位置的前后字符是否满足协议规范;具体的,可以通过协议规范为rfc1738:http://tools.ietf.org/html/rfc1738来进行判断,具体如图5所述,判断匹配成功的位置的前面的字符以及后面的字符是否满足协议规范,从而在整体上对包含有顶级域名的疑似URL进行判断,判断该疑似URL是否满足协议规范,若满足,则说明该疑似URL是合法的URL,若不满足,则说明该疑似URL是不合法的。
其中待检测文本可以通过客户端得到,也可以是服务器自己获取,只要能保证获取服务器获取到客户端检测存在顶级域名的待检测文本即可。
除上述机几个步骤以外,还可以存在一个步骤,特殊规则匹配,该特殊规则匹配需要客户端执行,同时服务器也需要执行,特殊规则时基于用户的 需要进行定义的,而该步骤在前述几个步骤的之前或之后执行,例如预设规则中可以存在的中英文标点符号兼容识别,可以将“www。taobao.com”识别成“www.taobao.com”(具体实现方式可以为维护一个词典转换库,在匹配过程中将预定义的中文转义成英文),该步骤可以是客户端在步骤2之前执行;而规则中可以存在的中英文字符兼容识别,可以将“www点taobao.com”可以识别成“www.taobao.com”(具体的,实现方式可以为在URL标准范式匹配阶段中,当判断前置字符已不符合URL规范时,插入该条规则进行匹配);该步骤也可以在步骤2之前执行;而若其中包含的规则时排除特定场景识别,例如“xxx@taobao.com”是邮箱,其中的“taobao.com”为满足协议规范的URL,但在该场景中,代表的是邮箱后缀,不应被识别成URL。在此情况下,该步骤需要排除掉“xxx@taobao.com”(具体的实现方式可以为在提取完成之前,判断当前提取到的URL是否为顶级域名且前一字符为@),该步骤就可以是服务器在步骤4之后执行,具体的基于定义的规则以及用户的需要进行设置,在此不再进行赘叙。
本申请实施例三还公开了一种匹配方法,如图6所示,包括以下步骤:
步骤601,提取并存储顶级域名;
具体的,例如待检测文本中存在URL为“http://www.sohu.com/domain/HXWZ”,由于URL中一定会存在顶级域名,例如其中包含的.com,而顶级域名的数量是比较有限的,目前已知的仅有400多个,数量比较少,且很稳定,因此通过顶级域名首先对URL(Uniform Resource Locator,统一资源定位符)进行匹配时,所需要提取的特征值(顶级域名)是比较少的,且比较稳定,可以适应各种变形URL的情况;匹配精度会提高,由于数量少,后续利用顶级域名就对URL进行筛选时速度也会提高,为此就需要提取并存储顶级域名。
而具体的提取并存储顶级域名的方式可以为:首先确定顶级域名获取源;定时从所述顶级域名获取源中获取顶级域名;将获取到的顶级域名存储在数据库中。
另外,考虑到顶级域名是会存在更新的过程的,就需要定时从域名获取源获取包含有顶级域名的原始数据;再考虑到从域名获取源中获取到的数据可能并不仅仅是本申请所要求的数据,还会存在别的数据,为此就需要基于持久化存储需求对获取的所述原始数据进行处理后得到所述顶级域名。
在具体的应用场景中,例如可以从顶级域名注册机构获取,当然也可以从顶级域名的发布机构等来源获取,再考虑到顶级域名虽然是很稳定,但还是会存在更新的过程的,为了能最大可能提高匹配的精度,就需要保持获取到的顶级域名的数据都是最新的,如此就需要定时从顶级域名获取源中获取顶级域名,例如以一周为周期,定时从顶级域名注册机构获取顶级域名,并将获取到的顶级域名存储在数据库中,当然,也可以存储在别的地方,只要能在后续进行匹配时能及时顺利的利用存储的顶级域名即可。
另外,在实际情况中,从顶级域名获取源获取的数据可能是网页等数据形式,而不仅仅只有本申请所需要的顶级域名,还会包含有很多别的数据,为此后续由于需要利用顶级域名进行匹配,也为了便于存储顶级域名,就需要对获取的数据进行处理;例如获取到的数据时网页,就需要对获取到的网页进行处理,具体的,可以先进行去html标签处理,然后进行去javascript处理,最后根据域名、域名类型、域名申请者三个字段所在的文本相对位置,提取出这些数据,并进行保存,以此保证了存储的都是仅包含顶级域名的数据,而不会有其他多余的部分。
步骤602,检测待检测文本中是否存在所述顶级域名,并在检测结果为存在时,记录所述待检测文本中存在所述顶级域名的文本位置;
具体的,以顶级域名.com,待检测文本中存在“http: //www.sohu.com/domain/HXWZ”为例进行说明,会检测待检测文件中是否存在.com,会有两种结果,一种是检测存在.com,在此情况下,会记录下.com所在的位置(以上述为例来进行说明,例如在http://www.sohu.com/domain/HXWZ中,存在.com,位置为字符sohu之后,以及字符domain之前),当然也可以通过别的形式来标记位置,例如在某些文本中.com的位置是第5页第3行,只要能对.com所在的位置进行精确定位即可,当然在确定了第5页第3行中存在.com之后,仍然会继续检查待检测文本,直到检测完成待检测文本中的所有内容,保证能检测出文本中的所有存在的.com(其他顶级域名与此类似,在此不再进行赘叙),如果待检测文本中存在多个.com,会返回相应的多个位置;当然还有一种结果是检测不存在,在此情况下,会继续检测,直到检测存在或者待检测文本被检测完成为止;也即在对待检测文本进行检测时,无论当前是否已检测到顶级域名,都会把待检测文本检测完,以保证将待检测文本中的所有存在顶级域名的位置记录下来。
当然,考虑到需要提高检测效率,可以基于获取的顶级域名构建有限状态自动机;通过所述有限状态自动机检测所述待检测文本中是否存在所述顶级域名,以此通过顶级域名构建有限状态自动机,使得有限状态自动机可以同时检测所有的顶级域名,大大提高了检测效率。
而具体的有限状态自动机,可以是一个二数组trie(单词查找树),在此,以二数组trie为例来进行说明,其构造步骤如下:
步骤1.初始化代表状态的数组base[]和用以检查前置状态的数组check[],数组类型均有int[]型。初始值:base[0]=1;check[0]=0;
步骤2.对于每一群兄弟节点,如[a1,a2,a3…an],寻找一个begin值,使得check[begin+a1…an]=0,也就是找到了n个空闲空间用以存放这些值。
步骤3.将这群兄弟节点的check值设置为check[begin+an]=begin;
步骤4.如果这个兄弟节点没有孩子,设置其base值为负值;否则,在该节点下插入孩子(begin=当前节点base值,重复步骤2)
步骤5.所有的域名均插入完成,则有限状态自动机构造完毕
仍以上述例子(即有限状态自动机是一个二数组trie)来进行说明,对应于该有限状态自动机,其对待检测文本进行检测的过程如下:
首先输入待检测文本,然后利用构造完成的二数组Trie查找待检测文本,其中查找的待检测文本中是否包含顶级域名的过程如下:
步骤1、定义当前状态p为base[0]=1,依次查询需要查找的字符串char的每一个字符;
步骤2、设当前需要查找的字符串下标为n,则新输入的字符为char[n],跳转到的新状态为base[char[n-1]]+char[n],此时检查check数组,如果check[base[char[n-1]+char[n]]]=base[char[n-1]],代表匹配成功,下一次匹配从当前状态开始。否则,匹配失败,匹配过程结束。
在步骤602中,若检测存在顶级域名,在记录下顶级域名所在的文本位置之后,执行步骤603,若检测不存在顶级域名,则继续检测直到检测到顶级域名,或者将待检测文本检测完成。
步骤603、基于URL标准范式对所述文本位置的前后字符进行匹配,并输出匹配结果。
在步骤602中,仅仅检测了是否存在顶级域名,当存在时,只能说明存在疑似URL,为此为了进一步确定该疑似URL是否是合法的URL,就需要对检测到存在顶级域名的位置的前后字符进行检测,具体检测顶级域名的位置的前后字符是否满足协议(例如可以参照的协议规范为rfc1738:http://tools.ietf.org/html/rfc1738.)规定的要求来判断该疑似URL是否是合法URL,然后基于判断的结果输出匹配结果,例如输出的结果为第5页行第3行的URL是合法的URL。
除了上述步骤以外,本申请的方法中还可以包括:基于预设的规则对所述待检测文本中的字符进行兼容和/或识别处理,以提高URL匹配的准确率。
这是考虑到待检测文本中的某些字符的兼容性,例如因为误操作或者格式转换等原因,原本应该输入的“www.taobao.com”,在待检测文本中为“www。taobao.com”,为此就需要对待检测文本中的内容进行兼容性的识别和转换过程,将其转换为原本所要表达的含义,或者在某些特殊的情况下,例如待检测文本中存在,“xxx@taobao.com”(是一个邮箱),但其中的“taobao.com”为满足协议规范的URL,也即通过前述三个步骤,认为“xxx@taobao.com”是一个满足协议规范的URL,在此情况下,由于其中包含有邮箱后缀@,是不应被识别成URL的,在此情况下,就需要通过预设的规则对其进行排出处理,当然若后续基于某些需要,也可以调整预设的规则,不排除该“xxx@taobao.com”,具体的可以基于用户的需要进行调整,在此不再进行赘叙,以此通过预设的规则在前述三个步骤之前或之后进行兼容和/或识别处理,然后配合前述的三个步骤,以最终提高匹配的准确率。
本申请实施例三还公开了一种客户端,如图7所示,包括:
提取模块701,用于提取并存储顶级域名;
检测模块702,用于检测待检测文本中是否存在所述顶级域名;
记录模块703,用于在待检测文本中存在所述顶级域名时,记录所述待检测文本中存在所述顶级域名的文本位置;
发送模块704,用于将携带所述文本位置的信息的报文发送给服务器。
具体的,所述提取模块701,具体用于:确定顶级域名获取源;定时从所述顶级域名获取源中获取顶级域名;将获取到的顶级域名存储在数据库中。
所述提取模块701定时从所述顶级域名获取源中获取顶级域名,具体为:
定时从定时域名获取源获取包含有顶级域名的原始数据;
基于持久化存储需求对获取的所述原始数据进行处理后得到所述顶级域名。
所述检测模块702,具体用于:基于获取的顶级域名构建有限状态自动机;
通过所述有限状态自动机检测所述待检测文本中是否存在所述顶级域名。
处理模块,用于基于预设的规则对所述待检测文本中的字符进行兼容和/或识别处理,以提高URL匹配的准确率。
本申请实施例还公开了一种服务器,如图8所示,包括:
接收模块801,用于接收客户端发送的携带待检测文本中存在顶级域名的文本位置的信息的报文;
匹配模块802,用于基于统一资源定位符URL标准范式对所述文本位置的前后字符进行匹配,并输出匹配结果。
具体的,服务器还包括:
处理模块,用于,用于基于预设的规则对所述待检测文本中的字符进行兼容和/或识别处理,以提高URL匹配的准确率。
本申请实施例还公开了一种匹配设备,如图9所示,包括:
提取模块901,用于提取并存储顶级域名;
检测模块902,用于检测待检测文本中是否存在所述顶级域名;
记录模块903,用与在待检测文本中存在所述顶级域名时,记录所述待检测文本中存在所述顶级域名的文本位置;
匹配模块904,用于基于URL标准范式对所述文本位置的前后字符进行匹配,并输出匹配结果。
具体的,所述提取模块901,具体用于:确定顶级域名获取源;定时从所述顶级域名获取源中获取顶级域名;将获取到的顶级域名存储在数据库中。
所述提取模块901定时从所述顶级域名获取源中获取顶级域名,具体为:
定时从定时域名获取源获取包含有顶级域名的原始数据;
基于持久化存储需求对获取的所述原始数据进行处理后得到所述顶级域名。
所述检测模块902,具体用于:基于获取的顶级域名构建有限状态自动机;
通过所述有限状态自动机检测所述待检测文本中是否存在所述顶级域名。
处理模块,用于基于预设的规则对所述待检测文本中的字符进行兼容和/或识别处理,以提高URL匹配的准确率。
与现有技术相比,本申请中通过检测待检测文本中是否存在所述顶级域名,并在检测结果为存在时,记录所述待检测文本中存在所述顶级域名的文本位置;基于URL标准范式对所述文本位置的前后字符进行匹配,并输出匹配结果,还利用预设的规则对文本进行兼容和/或识别处理,实现了对自动频自动匹配域名,并能通过预设的规则对变形的URL的识别,最终提高了URL的匹配准确性,同时由于采用多规则匹配,提高了安全性
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施场景所述的方法。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本申请所必须的。
本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可 以进一步拆分成多个子模块。
上述本申请序号仅仅为了描述,不代表实施场景的优劣。
以上公开的仅为本申请的几个具体实施场景,但是,本申请并非局限于此,任何本领域的技术人员能思之的变化都应落入本申请的保护范围。