一种互联网空间数据的搜索系统及方法与流程

文档序号:16087855发布日期:2018-11-27 22:39阅读:306来源:国知局

本发明涉及互联网数据搜索领域,特别是涉及一种互联网空间数据的搜索系统及方法。



背景技术:

在互联网空间中存在着无数的主机与终端设备,它们虽然每日产生巨量的数据信息,但是用户却不能对其有效的掌握,我们可以通过抓取这些数据并存入数据库,通过构建搜索系统来完成对这些数据信息的搜索,从而方便用户利用。

现有的搜索系统大多采用爬虫的方法爬取数据,但大多采用直接将数据导入搜索服务器,从而实现其搜索数据的功能。但是,由于现有技术中搜索系统的数据存储结构与搜索结构不明确,易产生阻塞。另外,由于互联网中不同数据类型的主机间关联程度较低,采用爬虫框架得到的数据量会远远小于实际存在的数据量,偏差过大。



技术实现要素:

本发明的目的是提供一种互联网空间数据的搜索系统及方法,能够提高搜索系统的存储和搜索读取效率。

为实现上述目的,本发明提供了如下方案:

一种互联网空间数据的搜索系统,所述系统包括:探测模块、抓取模块、清洗模块、存储模块、搜索模块和中间件,所述探测模块用于探测互联网中存活的主机和设备,抓取模块用于获取存活的主机和设备的数据信息;清洗模块用于对所述数据信息进行清洗;存储模块用于将清洗后的数据信息保存到数据库;所述中间件连接所述存储模块和所述搜索模块,所述中间件用于将所述存储模块中的数据索引同步到所述搜索模块中;搜索模块用于从所述数据索引搜索中搜索设备或主机的数据信息。

可选的,所述中间件为Monstache模块。

可选的,所述存储模块为MongoDB存储服务器。

可选的,所述所述搜索模块为ElasticSearch搜索服务器。

本发明还提供了一种互联网空间数据的搜索方法,所述方法应用于如权利要求1-4中任一项所述的互联网空间数据的搜索系统,所述方法包括:

探测互联网中存活的各种主机和设备;

获取存活的主机和设备的数据信息;

对所述数据信息进行清洗;

将清洗后的数据信息保存到数据库;

采用中间件将数据库中的数据信息的索引同步于搜索服务器ElasticSearch;

采用所述搜索服务器ElasticSearch对同步的数据信息的索引搜索主机或设备的数据信息。

可选的,所述探测互联网中存活的各种设备和主机,具体包括:

扫描互联网中的主机或设备;

向扫描到的主机或设备发出握手请求;

根据所述主机或设备对握手请求的响应确定所述主机或设备是否存活。

可选的,所述获取存活的主机和设备的数据信息,具体包括:

采用zmap与zgrab的集群方法并行获取存活的所述主机或设备的数据信息,所述数据信息包括所述主机或设备在互联网空间展示的内容、所述主机或设备的组件信息和地理信息。

可选的,所述对所述数据信息进行清洗,具体包括:

将所述数据信息读入内存;

删除存在404或ERROR数据;

删除匹配字段信息为Data:{}的数据;

删除包含数组的数据。

可选的,所述将清洗后的数据信息保存到数据库,具体包括:

采用多线程读取清洗后的数据信息,并调用数据导入功能,将读取的数据信息写入数据库,所述数据信息格式为json格式。

根据本发明提供的具体实施例,本发明公开了以下技术效果:本发明提供的互联网空间数据的搜索系统及方法,通过中间件来同步存储模块与搜索模块中的数据,将数据存储与搜索划分为不同的模块,避免了同时进行存储和搜索功能所产生的IO阻塞,使数据导入与搜索互不影响,提高系统存储和读取效率。此外,数据获取采用了zmap与zgrab的集群方法,对互联网空间中所有活动的设备和主机进行数据抓取,保证了数据量。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例互联网空间数据的搜索系统结构图;

图2为本发明实施例互联网空间数据的搜索方法流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的目的是提供一种互联网空间数据的搜索系统及方法,能够提高搜索系统的存储和搜索读取效率。

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

图1为本发明实施例互联网空间数据的搜索系统结构图,如图1所示,本发明提供的互联网空间数据的搜索系统包括:探测模块101、抓取模块102、清洗模块103、存储模块104、搜索模块106和中间件105,所述探测模块101用于探测互联网中存活的设备和主机,抓取模块102用于获取存活的主机和设备的数据信息;清洗模块103用于对所述数据信息进行清洗;存储模块104用于将清洗后的数据信息保存到数据库;所述中间件连接所述存储模块104和所述搜索模块106,所述中间件105用于将所述存储模块104中的数据索引同步到所述搜索模块106中;搜索模块106用于从所述数据索引搜索中搜索设备或主机的数据信息。其中,中间件105可以为Monstache模块。存储模块104可以为MongoDB存储服务器,选用MongoDB作为存储服务器,利用其数据库的特性可以实现快速的存储数据。搜索模块106可以为ElasticSearch搜索服务器。在使用系统搜索时,仅检索ElasticSearch的数据索引,不去干扰MongDB,这样实现了存储和搜索的分离。

探测模块:

对于互联网空间中主机设备的探测是通过使用Zmap执行主机与设备的端口扫描完成的,从握手派生结构化字段(例如,证书主体或TLS密码套件)与主机设备进行完整的应用程序握手,随后保存这次的握手信息,进行对下一个主机设备的握手。根据主机设备对这些握手请求的响应,从而判断主机设备存货与否。

此外,探测的模块也具备几个特点。首先,虽然通常的探测仅仅基于一个协议,但为了满足探测的准确性,需采用多个方面的探测,如某些HTTPS服务器仅支持SSLv3,但同时还存在TLS服务器,所以对HTTPS服务器探测需要同时用TLS扫描和SSLv3扫描。其次,设备模型可能只能基于其HTTP页面进行识别,所以通过协议收集后,还需要进行分组。另外,为了面对互联网上激增的设备和主机,采用可扩展的方法,即对协议的识别数量将随着时间的推移而增长。

抓取模块:

主机、设备指定端口的数据信息的抓取主要利用了ZGrab。ZGrab支持HTTP,HTTP代理,HTTPS,SMTP,IMAP,POP3,FTP,CWMP,SSH和Modbus的应用程序握手,以及StartTLS,Heartbleed,SSLv3和特定的密码套件检查。ZGrab由go语言来编写,可以根据其高并发的特点,使其并行处理多个请求。默认情况下ZGrab只会执行一个事件连接,只是打开一个TCP连接。经过配置可使其实现多个网络事件的串行链。

数据抓取需要首先对主机设备端口发送数据请求信息,并保持请求内容基于相应的协议支持,就可以得到逐渐设备相应的响应内容,其中包括但不仅限于响应头head,响应体body,server信息,country等等。目前我们已经成功收集到了1.37T的数据量,包括HTTP、HTTPS服务器80端口和443端口的指纹信息,另外包括ftp的21端口信息,SSH的23端口响应,与工控设备的502端口的数据。

清洗模块:由于抓取模块获得的信息可能存在不符合我们要求的内容,需要对其进行数据清洗和数据预处理。通过python脚本,即可实现对其自动化的筛查和处理。

按行将原始数据文件读入内存;

判断是否存在404和ERROR,若存在,即删除该条数据;

使用正则表达式匹配字段信息为Data:{}的数据,这些数据即为缺少关键信息、无用的数据,若匹配到则删除该条数据;

当脚本读取到特殊字符时,即会产生读取异常,将这个特殊字符以数组形式存储。对每次读入的数据,对这个包含特殊字符的数组匹配,匹配到的情况下,删除该特殊字符,然后将数据写入json文件;

每次文件写入需要计数,当计数达到20000时,关闭该数据文件并创建新json文件,并返回第一步。

存储模块:

由于数据文件的内容格式问题,数据内容中字段信息可能存在不一致,所以采用了MongoDB作为数据存储媒介。MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,提供了可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,所以可以保证数据的存储结构化的特点。MongoDB支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型,满足数据收集模块数据的存储。它的特点是高性能、易部署、易使用,存储数据非常方便。

数据存储功能实现,也采用python脚本形式,并使用了多线程的处理,从而加快存储速度。

创建新线程,并读取清洗后的json数据文件;

调用MongoImport数据导入功能,将读取的json文件写入MongoDB;

完成后关闭该线程并返回第一步。

数据搜索模块:

数据搜索模块选用ElasticSearch来实现,它是用Java开发的基于Lucene的全文搜索服务器,是一个面向文档的搜索型数据库,每个文档都对应一个数据,用JSON作为文档序列化的格式实现数据存储,并通过减少磁盘寻道次数来提高查询性能。ElasticSearch直接通过内存查找term,term index不需要存下所有的term,而仅仅是他们的一些前缀与Term Dictionary的block之间的映射关系,再结合FST(Finite State Transducers)的压缩技术,可以使term index缓存到内存中。从term index查到对应的term dictionary的block位置之后,再去磁盘上找term,大大减少了磁盘随机读的次数。同时它采用了数据的分片机制,将同一个索引分成多个分片(sharding),这点类似于HDFS的块机制,用分而治之的方式来提升处理效率。这样就实现了对数据的快速检索,而且由于提供了RESTful web接口,我们可以使用javaAPI和HTTP的RestfulAPI方式进行数据访问。

互联网空间数据搜索系统采用了将数据存储与数据搜索相分离的方式,所以我们使用了中间件Monstache来结合搜索与存储模块,经由Monstache连结可以将mongodb中存储的数据实时同步到搜索模块ElasticSearch中。首先要将mongodb工作在复制集的状态,这样Mongodb工作过程中就会产生oplog,它包含了数据库的改动操作信息,Monstache主要通过追踪MongoDB oplog来完成同步的工作。在Monstache运行时对MongoDB的任何更改都会反映在ElasticSearch中。中间件Monstache是一个用Go编写的同步守护进程,它不断将MongoDB集合索引到ElasticSearch中。

最终的数据搜索交互系统——WEBUI采用了基于php的laravel框架,Laravel是一个Web应用程序框架,我们可以通过插件Laravel Scout来满足web端与数据检索服务器ElasticSearch的结合。Scout是针对Eloquent模型开发的一个简单的,基于驱动的全文检索系统,它会自动保持检索索引与Eloquent记录同步。通过结合scout和ElasticSearch,用户即可通过WEBUI与数据搜索系统交互,根据IP、地理、内容等对应搜索互联网空间中的设备、主机的数据信息。

现有技术中,由于其数据存储和搜索功能在一个模块进行,在同时进行存储和搜索功能时,会产生IO阻塞,即数据资源在被存储功能占用时,数据搜索功能会需要等待数据资源被存储功能释放之后才能实现,同时数据资源被搜索功能占用时,也会造成数据存储无法进行。这样架构会导致系统同时进行两个功能时,互相等待,造成系统的效率过低。而本发提供的互联网空间数据的搜索系统,模块分明、条理清晰,将数据存储与搜索划分不同模块,使数据导入与搜索互不影响,不会因为系统要同时要实现搜索和存储功能而造成数据IO阻塞,即数据搜索只访问了搜索模块,存储则调用存储模块,提高系统存储和读取效率。数据抓取采用了zmap与zgrab的集群方法,对互联网空间中所有活动的设备和主机进行数据抓取,保证数据量。

互联网空间数据搜索系统采用了数据存储与搜索相分离的架构。选用MongoDB作为存储服务器,利用其数据库的特性实现了快速的存储数据。

ElasticSearch通过中间件来同步MongoDB存储的数据,实现数据搜索的功能,在使用系统搜索时,仅检索ElasticSearch的数据索引,不去干扰MongDB,这样实现了存储和搜索的分离。

本发明还提供了一种互联网空间数据的搜索方法,该方法应用于本发明提供的互联网空间数据的搜索系统,图2为本发明实施例互联网空间数据的搜索方法流程图,如图2所示,所述方法包括:

步骤201:探测互联网中存活的各种设备和主机;

步骤202:获取存活的主机和设备的数据信息;

步骤203:对所述数据信息进行清洗;

步骤204:将清洗后的数据信息保存到数据库;

步骤205:采用中间件将数据库中的数据信息同步于搜索服务器ElasticSearch;

步骤206:采用所述搜索服务器ElasticSearch对同步的数据信息进行搜索。

其中,步骤201具体包括:

扫描互联网中的主机或设备;

向扫描到的主机或设备发出握手请求;

根据所述主机或设备对握手请求的响应确定所述主机或设备是否存活。

步骤202具体包括:

采用ZGrab并行获取存活的所述主机或设备的数据信息,所述数据信息包括所述主机或设备在互联网空间展示的内容、所述主机或设备的组件信息和地理信息。

步骤203具体包括:

将所述数据信息读入内存;

删除存在404或ERROR数据;

删除匹配字段信息为Data:{}的数据;

删除包含数组的数据。

步骤204具体包括:

采用多线程读取清洗后的数据信息,并调用MongoImport数据导入功能,将读取的数据信息写入数据库,所述数据信息格式为json格式。

本发明提供的互联网空间数据的搜索方法,通过中间件来同步存储模块与搜索模块中的数据,将数据存储与搜索划分为不同的模块,避免了同时进行存储和搜索功能所产生的IO阻塞,使数据导入与搜索互不影响,提高系统存储和读取效率。此外,数据获取采用了zmap与zgrab的集群方法,对互联网空间中所有活动的设备和主机进行数据抓取,保证了数据量。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1