CN110955758A - 代码检测方法、代码检测服务器及索引服务器 - Google Patents
代码检测方法、代码检测服务器及索引服务器 Download PDFInfo
- Publication number
- CN110955758A CN110955758A CN201911310781.3A CN201911310781A CN110955758A CN 110955758 A CN110955758 A CN 110955758A CN 201911310781 A CN201911310781 A CN 201911310781A CN 110955758 A CN110955758 A CN 110955758A
- Authority
- CN
- China
- Prior art keywords
- open source
- feature
- open
- code
- target
- 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.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 188
- 239000013598 vector Substances 0.000 claims abstract description 48
- 238000000034 method Methods 0.000 claims description 27
- 238000004590 computer program Methods 0.000 claims description 14
- 238000004891 communication Methods 0.000 claims description 4
- 238000000605 extraction Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
Images
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/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/3332—Query translation
- G06F16/3334—Selection or weighting of terms from queries, including natural language queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/31—Indexing; Data structures therefor; Storage structures
- G06F16/316—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Software Systems (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明提供一种代码检测方法、代码检测服务器及索引服务器,通过确定开源代码文件;若所述开源代码文件符合预设的下载条件,则下载所述开源代码文件;对所述开源代码文件进行特征提取,以生成所述开源代码文件对应的开源特征向量,所述开源特征向量包括:开源特征摘要;根据所述开源特征向量,生成开源特征索引数据,所述开源特征索引数据为MAP结构;将所述开源特征索引数据发送至代码检测服务器,用于所述代码检测服务器将所述开源特征摘要与目标代码文件中的目标特征摘要进行对比,以获得检测结果,由于索引服务器能自动判断并下载开源代码,提高了检索开源代码的效率,并提高了开源代码的识别率和检测效率,降低了软件开发总体成本。
Description
技术领域
本发明涉及软件技术领域,尤其涉及一种代码检测方法、代码检测服务器及索引服务器。
背景技术
开放源代码软件就是在开放源代码许可证下发布的软件,以保障软件用户自由使用及接触源代码的权利;随着开源软件和开源代码越来越多的涌现,软件开发者在软件的开发工程中,也越来越多的使用网络上的开源代码来实现特定的软件功能,由于开源代码免费向开发者开放,因此在一定程度上,降低了软件开发工程的成本,但是另一方面,由于很多开源代码在稳定性和功能性上存在一定缺陷,或者存在一些使用权限方面的限制,导致使用开源代码开发的软件,容易出现性能方面或者法律版权方面的问题,因此,作为软件开发者,对开发的软件产品一般都会进行开源代码检测,以确定在软件产品的源代码中存在多少开源代码的成分。
目前对软件的源代码进行开源代码检测的方法,主要是依靠开发人员对代码内容进行人工识别,再通过与常用的开源代码进行内容比对,从而确定源代码中开源代码的成分。
但是,依靠人工进行代码比对的代码检测方式,效率低下,准确率低,增加了软件开发总体成本。
发明内容
本发明提供一种代码检测方法、代码检测服务器及索引服务器,用以解决现有的代码检测方式,效率低下,准确率低,增加软件开发成本的问题。
根据本公开实施例的第一方面,本发明提供了一种代码检测方法,所述方法应用于索引服务器,所述索引服务器与代码检测服务器通信,所述方法包括:
确定开源代码文件;
若所述开源代码文件符合预设的下载条件,则下载所述开源代码文件;
对所述开源代码文件进行特征提取,以生成所述开源代码文件对应的开源特征向量,所述开源特征向量包括:开源特征摘要;
根据所述开源特征向量,生成开源特征索引数据,所述开源特征索引数据为MAP结构;
将所述开源特征索引数据发送至代码检测服务器,用于所述代码检测服务器将所述开源特征摘要与目标代码文件中的目标特征摘要进行对比,以获得检测结果。
可选地,所述对所述开源代码文件进行特征提取,以生成所述开源代码文件对应的开源特征向量,包括:
根据开源代码文件的语言类型、软件的名称、文件路径、文件大小、开源特征摘要生成开源特征向量。
可选地,根据SimHash算法对所述开源代码文件进行计算,以生成开源特征摘要。
可选地,对所述开源代码文件进行特征提取,以生成所述开源代码文件对应的开源特征向量之后,还包括:
根据所述开源特征向量,生成开源特征索引数据,所述开源特征索引数据为MAP结构;
相应地,将所述开源特征索引数据发送至代码检测服务器。
根据本公开实施例的第二方面,本发明提供了一种代码检测方法,所述方法应用于代码检测服务器,所述代码检测服务器分别与所述索引服务器和所述客户端进行通信,所述方法包括:
接收客户端发送的代码检测请求,所述代码检测请求中包括:目标下载地址和特征标识;
根据所述目标下载地址获取目标代码文件;
根据所述目标代码文件,生成目标特征摘要;
获取开源特征索引数据中与所述特征标识对应的开源特征摘要;所述开源特征索引数据是索引服务器发送的;
对所述目标特征摘要和所述对应的开源特征摘要进行对比,以获得检测结果。
可选地,所述根据所述目标代码文件,生成目标特征摘要,包括:
提取所述目标代码文件的内容;
根据所述文件内容,生成目标特征摘要。
可选地,所述对所述目标特征摘要和所述对应的开源特征摘要进行对比,以获得检测结果,包括:
计算所述目标特征摘要和所述开源特征摘要的相似度;
将所述相似度与预设相似度阈值进行对比;
若所述相似度大于所述预设相似度阈值,则确定目标代码文件中包括开源代码;
若所述相似度小于或等于所述预设相似度阈值,则确定目标代码文件中不包括开源代码。
可选地,
所述特征标识包括语言类型和软件名称,所述获取开源特征索引数据中与所述特征标识对应的开源特征摘要,包括:
确定所述开源特征索引数据中与所述语言类型和软件名称相匹配的匹配开源特征索引数据;
确定与所述匹配开源特征索引数据对应的开源特征摘要。
根据本公开实施例的第三方面,本发明提供了一种索引服务器,包括:存储器,处理器以及计算机程序;
其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行如本公开实施例第一方面任一项所述的代码检测方法。
根据本公开实施例的第四方面,本发明提供了一种代码检测服务器,包括:存储器,处理器以及计算机程序;
其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行如本公开实施例第二方面任一项所述的代码检测方法。
本发明提供的一种代码检测方法、代码检测服务器及索引服务器,通过确定开源代码文件;若所述开源代码文件符合预设的下载条件,则下载所述开源代码文件;对所述开源代码文件进行特征提取,以生成所述开源代码文件对应的开源特征向量,所述开源特征向量包括:开源特征摘要;根据所述开源特征向量,生成开源特征索引数据,所述开源特征索引数据为MAP结构;将所述开源特征索引数据发送至代码检测服务器,用于所述代码检测服务器将所述开源特征摘要与目标代码文件中的目标特征摘要进行对比,以获得检测结果,由于索引服务器能自动判断并下载开源代码,提高了检索开源代码的效率,同时,利用开源代码对应的开源特征摘要与目标代码文件中的目标特征摘要进行对比,提高了开源代码的识别率和检测效率,降低了软件开发总体成本。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1为本发明实施例提供的一种代码检测系统的架构图;
图2为本发明实施例一提供的代码检测方法的流程图;
图3为本发明实施例二提供的代码检测方法的流程图;
图4为本发明实施例三提供的代码检测方法的流程图;
图5为本发明实施例四提供的代码检测方法的流程图;
图6为本发明实施例五提供的代码检测方法的信令流程图;
图7为本发明实施例六提供的索引服务器的结构示意图;
图8为本发明实施例七提供的代码检测服务器的结构示意图。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
图1为本发明实施例提供的一种代码检测系统的架构图,如图1所示,本发明实施例提供的代码检测系统包括:代码检测服务器1、索引服务器2和客户端3。代码检测服务器1分别与索引服务器2和客户端3进行通信,索引服务器2与代码检测服务器1分别运行对应的代码检测方法。
在一个具体地应用场景中,索引服务器2按照预设的任务计划,通过互联网获取不同的开源代码,并将符合要求的开源代码下载到本地,对本地化后的开源代码进行处理后,发送至代码检测服务器1,用于支持代码检测服务器1进行代码检测作业。用户通过电脑终端的浏览器登录WEB客户端3,并发送代码检测请求后,该请求会通过网络传达到代码检测服务器1,并建立相应的代码检测任务;代码检测服务器1响应该代码检测任务,确定用户发送的代码检测请求中携带的目标代码文件对应的地址,从该地址下载目标代码文件并进行检测,并将检测结果返回客户端3,使用户获得目标代码的检测结果。
本发明实施例提供的代码检测方法,通过索引服务器能自动判断并下载开源代码,提高了检索开源代码的效率,同时,对开源代码进行处理后,利用开源代码对应的开源特征摘要与目标代码文件中的目标特征摘要进行对比,相对于将开源代码的全部内容进行对比检测,效率更高,准确性更好,因此提高了开源代码的识别率和检测效率,降低了软件开发总体成本。
下面以具体地实施例对本发明的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。
图2为本发明实施例一提供的代码检测方法的流程图,应用于索引服务器,索引服务器与代码检测服务器进行通信,如图2所示,本实施例提供的代码检测方法包括以下几个步骤:
步骤S201,确定开源代码文件。
开源代码文件,就是开放源代码软件对应的源代码文件,开发者用户可以根据需要从开源代码的发布方处获取,例如,从A科技公司的网站上,获取A科技公司发布开源代码文件Afile.cpp。由于目前开放源代码软件的数量众多,因此,对应的开源代码文件数量也十分众多,需要索引服务器去检索并确定不同的开源代码文件。
可选地,确定开源代码文件,包括索引服务器运行网络爬虫程序从互联网上获取多种开源代码文件。具体地,包括:
根据预设的采集参数,执行网络爬虫程序,获取目标地址上的开源代码文件。其中,如何通过网络爬虫技术抓取特定网站上的数据为现有技术,此处不再赘述。采集参数包括如下参数中的一种或多种:软件名称、下载地址、采集频率、上次采集时间、软件版本号、语言类型、爬虫类型、存储路径。上述采集参数可以根据实际需要,使用一个或多个,以使网络爬虫程序执行具体的确定开源代码文件的任务。
步骤S202,若开源代码文件符合预设的下载条件,则下载开源代码文件。
可选地,开源代码文件符合预设的下载条件,包括该开源代码文件与上次开源代码文件确定任务中,确定的开源代码文件不相同。在前置步骤中确定了开源代码文件后,由于开源代码文件的更新频率不固定,因此,可能确定的开源代码文件与前次确定开源代码文件的任务中,确定的开源代码文件相同,重复下载会浪费网络资源和存储资源,即,在判断确定的开源代码文件是新版本的文件后,才对该开源代码文件进行下载,节约网络资源和存储资源,同时提高开源代码文件的采集效率。
步骤S203,对开源代码文件进行特征提取,以生成开源代码文件对应的开源特征向量,开源特征向量包括:开源特征摘要。
开源代码文件中包含的信息很多,除了数量众多的代码行外,还包括文件名称、文件大小、文件签名、文件日期等文件自身的文件属性信息,直接对文件进行比较,准确性和效率很低,因此,通过对开源代码文件进行特征提取,以生成开源代码文件对应的开源特征向量,将开源特征向量中包括的开源特征摘要,作为表现开源代码文件特征的参数,进行后续的对比检验步骤。
步骤S204,根据开源特征向量,生成开源特征索引数据,开源特征索引数据为MAP结构。
步骤S205,将开源特征向量发送至代码检测服务器,用于代码检测服务器将开源特征摘要与目标代码文件中的目标特征摘要进行对比,以获得检测结果。
将包含开源特征摘要的开源特征向量发送至代码检测服务器,代码检测服务器,根据需要,调用该开源特征向量,由于该开源特征向量内包含了索引服务器下载的众多不同的开源代码文件对应的特征,因此利用该开源特征向量中的开源特征摘要作为对比项,与待检测的目标代码文件对应的目标特征摘要进行对比,能够实现检测目标代码文件中开源代码的成分,提高代码检测的效率和精确度。
本实施例中,通过确定开源代码文件;若开源代码文件符合预设的下载条件,则下载开源代码文件;对开源代码文件进行特征提取,以生成开源代码文件对应的开源特征向量,开源特征向量包括:开源特征摘要;根据开源特征向量生成特征索引数据后,将特征索引数据发送至代码检测服务器,用于代码检测服务器将开源特征摘要与目标代码文件中的目标特征摘要进行对比,以获得检测结果,由于索引服务器能自动判断并下载开源代码,提高了检索开源代码的效率,同时,利用开源代码对应的开源特征摘要与目标代码文件中的目标特征摘要进行对比,提高了开源代码的识别率和检测效率,降低了软件开发总体成本。
图3为本发明实施例二提供的代码检测方法的流程图,如图3所示,本实施例提供的代码检测方法在图2所示实施例提供的代码检测方法的基础上,对步骤S203进一步细化,并在步骤S203之后增加了生成开源特征索引数据并发送至代码检测服务器的步骤。则本实施例提供的代码检测方法包括以下几个步骤:
步骤S301,确定开源代码文件。
步骤S302,若开源代码文件符合预设的下载条件,则下载开源代码文件。
步骤S303,根据开源代码文件的语言类型、软件的名称、文件路径、文件大小、开源特征摘要生成开源特征向量。
具体地,开源代码文件中包括如下信息:文件名称、文件大小、文件存放的完整路径和文件内容。其中,文件名称是文件前置步骤S302中下载后的开源代码文件的名称,如Afile.cpp,该名称可能与开源代码文件发布时的文件名称一致,也可能不一致,此处不做具体限定;文件存放的完整路径是开源代码文件在本地存放的具体位置,根据文件存放的完整路径,可以准确定位该文件;文件内容是指开源代码文件中的开源代码。通过读取开源代码文件,可以获得以上信息,具体的实现方法为本领域常用技术手段,此处不再赘述。
根据开源代码文件中主要的文件信息,可以实现两个不同的开源代码文件的区分。但为了进一步地提高检测精确度和检测效率,对该信息进行处理,生成开源特征摘要,开源特征摘要即开源代码文件的特征摘要,特征摘要具有信息总量较少,但数据冗余度更低,对开源代码文件的特征表现更加精确的特性,因此,特征摘要对于开源代码文件具有更好的特征表现力,通过特征摘要,进行代码文件的对比,能够提高代码文件对比的准确性和效率。
可选地,步骤S303的一个具体的实施方式为:
根据SimHash算法对开源代码文件进行计算,以生成开源特征摘要。
SimHash算法作为局部敏感哈希算法(locality sensitive hash)的一种,可以用于文本特征对比检测,通过将高维的特征向量映射成低维的特征向量,实现特征降维,再通过两个向量的汉明距离(Hamming Distance)来确定文本是否重复或者高度近似。其中,实施例方案中,利用SimHash算法生成低维的开源特征摘要,能够方便实现后续方法步骤中的不同代码文件之间的相似度检测,提高了检测效率和检测精确度。SimHash算法的具体实现方法,为现有技术,在此不再赘述。
步骤S304,根据开源特征向量,生成开源特征索引数据,开源特征索引数据为MAP结构。
可选地,对开源特征向量进行组织,生成MAP结构的开源特征索引数据,具体地,MAP结构中包括key值和与key值对应的value值,MAP结构为现有技术,此处不再赘述。可选地,MAP结构为多层MAP结构,在一个具体的实施例中,开源特征索引数据为三层MAP结构,第一层的key值为语言类型,例如c++、java、python、go等,第一层的value值为第二层的MAP;第二层的key值为软件名称,例如redis、durid、kafka等,第二层的value至为第三层的MAP;第三层的key值为文件名称,例如Afile.cpp。如上,由于索引服务器确定并下载的开源代码文件数量庞大,因此,对应的开源特征向量数量也十分庞大,对其中的某个特定开源代码文件进行调用时,需要消耗大量服务器的计算能力进行检索,通过三层结构的开源特征索引数据,能够将多个开源特征向量组织到一起,提高对开源特征向量的检索效率,降低计算资源开销。
步骤S305,将开源特征索引数据发送至代码检测服务器。
与步骤S304相似的,将包含开源特征向量的开源特征索引数据发送至代码检测服务器,供代码检测服务器进行检测任务时调用,由于开源特征索引数据采用了MAP结构,能够提高对开源特征向量的检索效率,提高代码检测服务器的运行效率,降低资源开销。
本实施例中,步骤S301-步骤S302的实现方式与本发明图2所示实施例中的步骤S201-步骤S202的实现方式相同,在此不再一一赘述。
图4为本发明实施例四提供的代码检测方法的流程图,应用于代码检测服务器,代码检测服务器分别与索引服务器和客户端进行通信,如图4所示,本实施例提供的代码检测方法包括以下几个步骤:
步骤S401,接收客户端发送的代码检测请求,代码检测请求中包括:目标下载地址和特征标识。
具体地,客户端可以为B/S架构的客户端,也可以是C/S架构的客户端,此处不做具体限定,用户登录客户端后,提交代码检测请求,例如,用户将待检测的目标代码文件对应的目标下载地址和特征标识输入客户端,并点击“开始检测”的触发按钮,向客户端提交代码检测请求。客户端与代码检测服务器进行通讯,将包含目标下载地址和特征标识的代码检测请求发送至代码检测服务器进行处理。
步骤S402,根据目标下载地址获取目标代码文件。
具体地,由于需要检测的目标代码文件体积较大,直接目标代码输入文件效率较低,便捷性差,因此,可选地,根据输入的目标下载地址,代码检测服务器从目标下载地址下载目标代码文件,该地址为目标代码文件的仓库地址。
步骤S403,根据目标代码文件,生成目标特征摘要。
具体地,代码检测服务器接收到代码检测请求后,获取目标代码文件,即将目标代码文件本地化,准备后续对该目标代码文件进行检测。与图3的实施例中步骤S303和步骤S304类似的,为了与开源特征向量进行对比检测,需要对目标代码文件进行处理,而获得目标代码文件对应的目标特征摘要,目标代码文件与开源特征向量都是代码文件,例如,开源特征向量为Afile.cpp,目标代码文件为Bfile.cpp,因此,对目标代码文件与开源特征向量进行处理,以获取对应的特征摘要的方法步骤也是类似的,可参见与图3的实施例中步骤S303和步骤S304,此处不再赘述。
步骤S404,获取开源特征索引数据中与特征标识对应的开源特征摘要;开源特征索引数据是索引服务器发送的。
具体地,代码检测请求中还包括特征标识,特征标识确定用于检测目标代码文件的开源代码文件。根据特征标识,可以确定在开源代码文件中,哪些作为对照组,去与目标代码文件进行特征对比,从而确定目标代码文件中是否含有特征标识对应的开源代码文件。特征标识可以是由字母、数字、符号中的一种或多种组成的标识,例如,特征标识为A021S2;也可以是特定的数据结构,例如,特征标识为A{“软件名称”:“carshop”;“语言类型”:“java”},此处,对特征标识的具体实现形式,不做具体限制。通常,开源软件对应不同的语言,会有不同的实现方式,也会相应的有多个版本,因此,在对目标代码文件进行检验前,应该首先确定作为对照组的开源代码文件的语言、软件名称等信息,防止开源代码文件匹配错误,提高代码检测的正确率。
根据特征标识,可以确定对应的开源特征向量,在对开源特征向量进行处理,可以获得对应的开源特征摘要。
步骤S405,对目标特征摘要和对应的开源特征摘要进行对比,以获得检测结果。
在获取目标特征摘要和开源特征摘要后,对目标特征摘要和开源特征摘要进行比较,可以得到检测结果。其中,具体的特征比较方法,与特征摘要的生成方法有关,例如,使用SimHash算法生成的目标特征摘要和开源特征摘要,通过计算目标特征摘要和开源特征摘要的汉明距离,确定二者的重复度和相似度,以此来确定目标代码文件中是否含有开源代码成分。
本实施例中,通过根据目标代码文件,生成目标特征摘要;获取开源特征索引数据中与特征标识对应的开源特征摘要;开源特征索引数据是索引服务器发送的;对目标特征摘要和对应的开源特征摘要进行对比,以获得检测结果,由于索引服务器能自动判断并下载开源代码,提高了检索开源代码的效率,同时,利用开源代码对应的开源特征摘要与目标代码文件中的目标特征摘要进行对比,提高了开源代码的识别率和检测效率,降低了软件开发总体成本。
图5为本发明实施例五提供的代码检测方法的流程图,如图5所示,本实施例提供的代码检测方法在图4所示实施例提供的代码检测方法的基础上,对步骤S403-步骤S405进行了细化,则本实施例提供的代码检测方法包括以下几个步骤:
步骤S501,接收客户端发送的代码检测请求,代码检测请求中包括:目标下载地址和特征标识。
步骤S502,根据目标下载地址获取目标代码文件
步骤S503,根据目标代码文件,生成目标特征摘要。
目标代码文件与开源代码文件的文件结构类似,例如,均为文本文件,因此,步骤S503中提取目标代码文件中目标特征摘要。,与图3所示的实施例中,步骤S303的实现方式相同,此处不再赘述。
步骤S504,确定开源特征索引数据中与语言类型和软件名称相匹配的匹配开源特征索引数据;
可选地,特征标识包括语言类型和软件名称,根据特征标识中的内容,可以获得语言类型和软件名称,例如,特征标识为A{“软件名称”:“carshop”;“语言类型”:“java”}。根据语言类型和软件名称对开源特征索引数据进行检索,确定其中与语言类型和软件名称对应的匹配开源特征索引数据。
步骤S505,确定与匹配开源特征索引数据对应的开源特征摘要。
相应的,由于开源特征索引数据中,包括开源特征摘要,确定了开源特征索引数据即可以相应的确定开源特征摘要。因此,根据匹配开源特征索引数据,可以获得对应的开源特征摘要。
目前开源软件项目众多,其对应的开源代码文件数量更加庞大,索引服务器对开源代码文件进行检索和下载后,形成了大量的开源代码文件作为对照组供代码检测服务器进行检测比对,通过特征标识可以在大量开源特征向量中,直接确定与检测目标相匹配的匹配开源特征向量,实现了快速确定对照组的目的。同时,通过设置多组特征标识,可以同时将多个开源特征索引数据作为对照组对待检测的目标代码文件进行检测,提高检测精确度和检测效率。
步骤S506,计算目标特征摘要和开源特征摘要的相似度。
在获取目标特征摘要和开源特征摘要后,具体的相似度比较方法,与特征摘要的生成方法有关,例如,使用SimHash算法生成的目标特征摘要和开源特征摘要,通过计算目标特征摘要和开源特征摘要的汉明距离,计算二者的相似度,汉明距离越大,相似度越低,反之亦然。通过SimHash算法计算相似度的方法,为现有技术,此处不再赘述。
步骤S507,将相似度与预设相似度阈值进行对比;若相似度大于预设相似度阈值,则确定目标代码文件中包括开源代码;若相似度小于或等于预设相似度阈值,则确定目标代码文件中不包括开源代码。
具体地,相似度越大,说明目标代码中包括开源代码的概率越大,通过预设相似度阈值,可以通过相似度判断,获得一个合理的概率结果,即目标代码中是否含有开源代码。例如,相似度阈值为3,若计算得到的目标特征摘要和开源特征摘要的相似度大于或等于3,则判断目标代码文件中包含至少部分的开源代码,若计算得到的目标特征摘要和开源特征摘要的相似度小于3,则判断目标代码文件中不包含开源代码。
可选地,特征标识中包括相似度阈值,不同的开源特征向量对应不同的相似度阈值,可通过特征标识获取与匹配开源特征向量对应的相似度阈值。
本实施例中,步骤S501-S502的实现方式与本发明图4所示实施例中步骤S401-S402的实现方式相同,在此不再一一赘述。
图6为本发明实施例六提供的代码检测方法的信令流程图,如图6所示,本实施例提供的代码检测方法包括:
步骤S601,索引服务器确定开源代码文件。
步骤S602,索引服务器对于开源代码文件进行判断,若符合预设的下载条件,则下载开源代码文件。
本实施例中,索引服务器通过对开源代码文件进行检索和下载,将开源代码文件本地化,可选地,索引服务器可根据预先设置的任务指令,执行上述步骤,例如,每隔1周对开源代码文件进行一次确定,以获得最近的开源代码文件的更新。
步骤S603,索引服务器对开源代码文件进行特征提取,以生成开源代码文件对应的开源特征索引数据,开源特征向量包括:开源特征摘要。
步骤S604,索引服务器将开源特征生成特征索引数据,然后将特征索引数据发送至代码检测服务器,以使代码检测服务器将开源特征摘要与目标代码文件中的目标特征摘要进行对比,以获得检测结果。
本实施例中,索引服务器对本地化后的开源代码进行处理,提取开源特征摘要,并将包含开源特征摘要的开源特征索引数据发送至代码检测服务器,供代码检测服务器作为检测依据,对目标代码文件进行检测。
步骤S605,代码检测服务器接收客户端发送的代码检测请求,代码检测请求中包括:目标下载地址和特征标识。
步骤S606,根据目标下载地址获取目标代码文件。
本实施例中,代码检测服务器根据用户由客户端发送来的代码检测请求,对目标代码文件进行检测。可选地,代码检测请求可以是直接需要代码检测服务器响应并立即执行的即时指令,也可以是任务指令,当代码检测服务器收到客户端发来的任务指令后,将该指令加入任务队列,根据负载或者其他预设规则,执行任务队列中的任务指令。
可选地,代码检测服务器包括检测服务器和缓存服务器,检测服务器和缓存服务器之间可以进行数据交换,索引服务器发送的代码特征文件,先存入缓存服务器中,检测服务器根据检测指令或检测任务,调取缓存服务器中的代码特征文件,本地化之后在检测服务器内部与目标代码文件进行对比检测。可选地,检测结果存储在缓存服务器内,检测服务器从缓存服务器内调取检测结果,并传输给客户端,使用户获得检测结果。通过设置缓存服务器,能够降低检测服务器的负担,提高检测服务器的检测效率。
步骤S607,代码检测服务器根据目标代码文件,生成目标特征摘要。
步骤S608,代码检测服务器获取开源特征索引数据中与特征标识对应的开源特征摘要;开源特征索引数据是索引服务器发送的。
步骤S609,代码检测服务器对目标特征摘要和对应的开源特征摘要进行对比,以获得检测结果。
可选地,在步骤S609之后,还包括步骤S610:将检测结果返回客户端。
本实施例中,代码检测服务器获得检测结果后,发送给客户端,以使用户能够获得检测结果。可选地,代码检测服务器和索引服务器,可以是同一地点的由一台或多台主机组成的服务器中心。也可以是在不同地点,通过网络连接的分布式服务器,此处不做具体限定。
图7为本发明一个实施例提供的索引服务器的示意图,如图7所示,本实施例提供的索引服务器包括:存储器701,处理器702以及计算机程序。
其中,计算机程序存储在存储器701中,并被配置为由处理器702执行以实现本发明图2-图3所对应的实施例中任一实施例提供的代码检测方法。
其中,存储器701和处理器702通过总线703连接。
相关说明可以对应参见图2-图3的步骤所对应的相关描述和效果进行理解,此处不做过多赘述。
图8为本发明一个实施例提供的代码检测服务器的示意图,如图8所示,本实施例提供的代码检测服务器包括:存储器801,处理器802以及计算机程序。
其中,计算机程序存储在存储器801中,并被配置为由处理器802执行以实现本发明图4-图5所对应的实施例中任一实施例提供的代码检测方法。
其中,存储器801和处理器802通过总线803连接。
相关说明可以对应参见图4-图5的步骤所对应的相关描述和效果进行理解,此处不做过多赘述。
本发明一个实施例提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行以实现本发明图2-图5所对应的实施例中任一实施例提供的代码检测方法。
其中,计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求书指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求书来限制。
Claims (9)
1.一种代码检测方法,其特征在于,所述方法应用于索引服务器,所述索引服务器与代码检测服务器进行通信,所述方法包括:
确定开源代码文件;
若所述开源代码文件符合预设的下载条件,则下载所述开源代码文件;
对所述开源代码文件进行特征提取,以生成所述开源代码文件对应的开源特征向量,所述开源特征向量包括:开源特征摘要;
根据所述开源特征向量,生成开源特征索引数据,所述开源特征索引数据为MAP结构;
将所述开源特征索引数据发送至代码检测服务器,用于所述代码检测服务器将所述开源特征摘要与目标代码文件中的目标特征摘要进行对比,以获得检测结果。
2.根据权利要求1所述的方法,其特征在于,所述对所述开源代码文件进行特征提取,以生成所述开源代码文件对应的开源特征向量,包括:
根据开源代码文件的语言类型、软件的名称、文件路径、文件大小、开源特征摘要生成开源特征向量。
3.根据权利要求2所述的方法,其特征在于,根据SimHash算法对所述开源代码文件进行计算,以生成开源特征摘要。
4.一种代码检测方法,其特征在于,所述方法应用于代码检测服务器,所述代码检测服务器分别与所述索引服务器和所述客户端进行通信,所述方法包括:
接收客户端发送的代码检测请求,所述代码检测请求中包括:目标下载地址和特征标识;
根据所述目标下载地址获取目标代码文件;
根据所述目标代码文件,生成目标特征摘要;
获取开源特征索引数据中与所述特征标识对应的开源特征摘要;所述开源特征索引数据是索引服务器发送的;
对所述目标特征摘要和所述对应的开源特征摘要进行对比,以获得检测结果。
5.根据权利要求4所述的方法,其特征在于,所述根据所述目标代码文件,生成目标特征摘要,包括:
提取所述目标代码文件的内容;
根据所述文件内容,生成目标特征摘要。
6.根据权利要求4所述的方法,其特征在于,所述对所述目标特征摘要和所述对应的开源特征摘要进行对比,以获得检测结果,包括:
计算所述目标特征摘要和所述开源特征摘要的相似度;
将所述相似度与预设相似度阈值进行对比;
若所述相似度大于所述预设相似度阈值,则确定目标代码文件中包括开源代码;
若所述相似度小于或等于所述预设相似度阈值,则确定目标代码文件中不包括开源代码。
7.根据权利要求4所述的方法,其特征在于,所述特征标识包括语言类型和软件名称,所述获取开源特征索引数据中与所述特征标识对应的开源特征摘要,包括:
确定所述开源特征索引数据中与所述语言类型和软件名称相匹配的匹配开源特征索引数据;
确定与所述匹配开源特征索引数据对应的开源特征摘要。
8.一种索引服务器,其特征在于,包括:存储器,处理器以及计算机程序;
其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现如权利要求1-3中任一项所述的代码检测方法。
9.一种代码检测服务器,其特征在于,包括:存储器,处理器以及计算机程序;
其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现如权利要求4-7中任一项所述的代码检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911310781.3A CN110955758A (zh) | 2019-12-18 | 2019-12-18 | 代码检测方法、代码检测服务器及索引服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911310781.3A CN110955758A (zh) | 2019-12-18 | 2019-12-18 | 代码检测方法、代码检测服务器及索引服务器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110955758A true CN110955758A (zh) | 2020-04-03 |
Family
ID=69982644
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911310781.3A Pending CN110955758A (zh) | 2019-12-18 | 2019-12-18 | 代码检测方法、代码检测服务器及索引服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110955758A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111813378A (zh) * | 2020-07-08 | 2020-10-23 | 北京迪力科技有限责任公司 | 一种代码库构建系统、方法和相关装置 |
CN112148359A (zh) * | 2020-10-10 | 2020-12-29 | 中国人民解放军国防科技大学 | 一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质 |
CN112698861A (zh) * | 2021-03-25 | 2021-04-23 | 深圳开源互联网安全技术有限公司 | 源代码克隆识别方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080209399A1 (en) * | 2007-02-27 | 2008-08-28 | Michael Bonnet | Methods and systems for tracking and auditing intellectual property in packages of open source software |
CN106951743A (zh) * | 2017-03-22 | 2017-07-14 | 上海英慕软件科技有限公司 | 一种软件代码侵权检测方法 |
CN107066262A (zh) * | 2017-03-10 | 2017-08-18 | 苏州棱镜七彩信息科技有限公司 | 源代码文件克隆邻接表合并检测方法 |
CN107169358A (zh) * | 2017-05-24 | 2017-09-15 | 中国人民解放军信息工程大学 | 基于代码指纹的代码同源性检测方法及其装置 |
CN108229170A (zh) * | 2018-02-02 | 2018-06-29 | 中科软评科技(北京)有限公司 | 利用大数据和神经网络的软件分析方法和装置 |
CN109062792A (zh) * | 2018-07-21 | 2018-12-21 | 东南大学 | 一种基于串匹配和特征匹配的开源代码检测方法 |
-
2019
- 2019-12-18 CN CN201911310781.3A patent/CN110955758A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080209399A1 (en) * | 2007-02-27 | 2008-08-28 | Michael Bonnet | Methods and systems for tracking and auditing intellectual property in packages of open source software |
CN107066262A (zh) * | 2017-03-10 | 2017-08-18 | 苏州棱镜七彩信息科技有限公司 | 源代码文件克隆邻接表合并检测方法 |
CN106951743A (zh) * | 2017-03-22 | 2017-07-14 | 上海英慕软件科技有限公司 | 一种软件代码侵权检测方法 |
CN107169358A (zh) * | 2017-05-24 | 2017-09-15 | 中国人民解放军信息工程大学 | 基于代码指纹的代码同源性检测方法及其装置 |
CN108229170A (zh) * | 2018-02-02 | 2018-06-29 | 中科软评科技(北京)有限公司 | 利用大数据和神经网络的软件分析方法和装置 |
CN109062792A (zh) * | 2018-07-21 | 2018-12-21 | 东南大学 | 一种基于串匹配和特征匹配的开源代码检测方法 |
Non-Patent Citations (1)
Title |
---|
ANTHONY NORTHRUP: "《Windows NT网络实现 路由器、代理和Web服务》", vol. 1, 机械工业出版社, pages: 175 - 177 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111813378A (zh) * | 2020-07-08 | 2020-10-23 | 北京迪力科技有限责任公司 | 一种代码库构建系统、方法和相关装置 |
CN111813378B (zh) * | 2020-07-08 | 2023-03-21 | 北京迪力科技有限责任公司 | 一种代码库构建系统、方法和相关装置 |
CN112148359A (zh) * | 2020-10-10 | 2020-12-29 | 中国人民解放军国防科技大学 | 一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质 |
CN112698861A (zh) * | 2021-03-25 | 2021-04-23 | 深圳开源互联网安全技术有限公司 | 源代码克隆识别方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110955758A (zh) | 代码检测方法、代码检测服务器及索引服务器 | |
CN107633016B (zh) | 数据处理方法及装置和电子设备 | |
CN107665233A (zh) | 数据库数据处理方法、装置、计算机设备和存储介质 | |
CN101231651A (zh) | 计算计算机网络上电子文档的重要性的计算机装置和方法 | |
CN110532107B (zh) | 接口调用方法、装置、计算机设备及存储介质 | |
US20220052976A1 (en) | Answer text processing methods and apparatuses, and key text determination methods | |
CN113961768B (zh) | 敏感词检测方法、装置、计算机设备和存储介质 | |
CN112257436A (zh) | 文本检测方法及装置 | |
CN116414948A (zh) | 基于云数据和人工智能的异常数据挖掘方法及软件产品 | |
CN112784029A (zh) | 基于自然语言处理的业务处理方法、装置和计算机设备 | |
CN112100092B (zh) | 一种信息缓存方法、装置、设备及介质 | |
CN115328759A (zh) | 表单的校验方法及装置 | |
CN106202440B (zh) | 数据处理方法、装置及设备 | |
CN112835856A (zh) | 一种日志数据查询方法及装置、设备、介质 | |
CN111932076A (zh) | 一种规则配置和发布方法、装置及计算设备 | |
CN110706035B (zh) | 一种更新效果的评价方法、装置、存储介质及电子设备 | |
CN111752838A (zh) | 问题排查方法、装置、服务器及存储介质 | |
CN114564206A (zh) | 一种数据非空校验方法、装置、设备及可读存储介质 | |
CN110895538A (zh) | 数据检索方法、装置、存储介质和处理器 | |
CN114201701A (zh) | 运行环境的识别方法及装置、存储介质、服务端、客户端 | |
CN114579580A (zh) | 存储数据的方法、查询数据的方法和装置 | |
CN114282940A (zh) | 用于意图识别的方法及装置、存储介质及电子设备 | |
CN113935847A (zh) | 线上流程的风险处理方法、装置、服务器及介质 | |
CN113791809A (zh) | 应用异常处理方法、装置以及计算机可读存储介质 | |
US10671505B2 (en) | System and method for monitoring service |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200403 |