一种识别软件的方法和装置
技术领域
本发明涉及一种识别软件的方法和装置。
背景技术
随着计算机技术的日益发展,软件产品层出不穷,软件的版本也在时常更新。在软件进行升级时,首先要做的就是对软件进行识别。识别时不仅识别出是哪个软件,而且识别出是该软件的哪个版本。因为软件识别主要用于进行版本升级,所以识别软件时,关键是识别出软件的版本。
识别软件的工作对于一些服务器来说显得格外重要。例如有的服务器上安装了服务软件,用来帮助开发者实现程序功能的开发,这类服务软件往往数量众多,在长期的使用过程中服务器的维护人员难以确定这些软件的当前更新状态,在进行升级操作例如对软件进行批量升级时需对软件进行识别。
现有的一种识别软件的方式基于软件的安装。软件在安装时由操作系统记录了软件的一些信息,其中一般包括软件当前的版本,因此可以通过查找操作系统中的记录来确定软件的版本。这种方式依赖于操作系统的记录,对于一些绿色化即不需安装的软件来说,由于操作系统中没有记录软件的相关信息或记录不全面,无法从操作系统中的记录来获得软件的版本。
有些软件自身带有版本信息文件,可通过获取计算机中的版本信息文件来确定软件的版本。但有些软件同有这样的版本信息文件,或者对版本信息文件进行修改使软件版本信息不准确,对于这样的情况无法通过获取版本信息文件来确定软件的版本。
发明内容
有鉴于此,本发明提出一种识别软件的方法和装置,有助于针对各种情况准确实现软件版本的识别。本发明的其他目的和效果将结合具体实施方式加以说明。
为了实现上述目的,根据本发明的一个方面,提供了一种识别软件的方法。
本发明的识别软件的方法包括:获取软件的文件指纹,将获取的文件指纹与保存的文件指纹进行比较,在比较结果为相同的情况下确认所述软件的版本为所述保存的文件指纹中当前被比的文件指纹所对应的软件版本;所述文件指纹是文件内容指纹或者文件关系指纹,或者二者的组合;其中,文件内容指纹是根据所述软件中的两个以上的文件分别得到的“文件内容的标识和/或文件名”组合唯一确定,文件关系指纹是根据所述软件中的两个以上的文件之间的预设的逻辑关系唯一确定。
可选地,所述文件内容的标识是对所述文件的预定位置的代码进行数值计算得到的字符串。
可选地,所述数值计算的方法包括哈希算法。
可选地,所述逻辑关系包括:与、或、非。
根据本发明的另一方面,提供了一种识别软件的装置。
本发明的识别软件的装置包括:获取模块,用于获取软件的文件指纹;比较模块,用于将获取的文件指纹与保存的文件指纹进行比较,在比较结果为相同的情况下确认所述软件的版本为所述保存的文件指纹中当前被比的文件指纹所对应的版本;所述文件指纹是文件内容指纹或者文件关系指纹,或者二者的组合;其中,文件内容指纹是根据所述软件中的两个以上的文件分别得到的“文件内容的标识和/或文件名”组合唯一确定,文件关系指纹是根据所述软件中的两个以上的文件之间的预设的逻辑关系唯一确定。
可选地,所述文件内容的标识是对所述文件的预定位置的代码进行数值计算得到的字符串。
可选地,所述数值计算的方法包括哈希算法。
可选地,所述逻辑关系包括:与、或、非。
根据本发明的技术方案,采用文件指纹作为软件的标识,能够确保软件的版本能够被识别,不依赖于软件在操作系统中的注册信息或者软件自带的版本信息;并且该方式因为可以灵活地选取文件内容指纹和文件关系指纹,对于文件内容指纹和文件关系指纹来说又可以灵活选取各个文件来得到,所以在实现中易于根据软件的实际特点来确定文件指纹的具体方式以及计算时所采用的文件,使文件指纹的计算较为高效并且有区别地标识多个软件的多个版本;在进行版本比较时的流程也较为简单,便于采用计算机高效执行。
附图说明
说明书附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的识别软件的方法的示意图;
图2是根据本发明实施例的识别软件的装置的基本结构的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
软件通常是由多个文件构成,这些文件一般来说具有如下特点:无论文件信息如何改变,总会有一些核心功能文件在版本更新时不会被修改;由于文件之间的依赖关系,有些文件的名称不能更改,否则将影响软件的功能。由于存在这些特点,本实施例中利用文件名、文件内容来实现软件的识别,根据文件名、文件内容来形成一个用来标识软件的字符串,本实施例中将该字符串称作文件指纹,具体包括文件内容指纹和文件关系指纹,文件指纹可以是文件内容指纹和文件关系指纹的组合,即将这两个字符串连接,也可以是文件内容指纹和文件关系指纹中的一种,可以根据软件的实际特点来定,以计算指纹较快并且避免不同软件版本计算得到相同文件指纹的情况为原则。
文件内容指纹的单元形式可以是“文件名和文件内容标识”组合,即将文件名和文件内容标识连接。文件内容标识可以是对文件的预定位置的代码进行数值计算得到的字符串,例如采用哈希算法得到的哈希值。这里的预定位置可以是一个或多个位置,在下文中结合本实施例中的识别软件的方法作进一步说明。
文件内容指纹也可以是文件名或者文件内容标识,即从二者中选出一种作为文件内容指纹。这里表述为“单元形式”,意思是文件内容指纹的完整形式是由多个单元组成,至少需两个单元。例如由文件名为file1的文件得到组合“file1和hash1”,其中hash1是根据从file1中的预定位置取出的代码进行哈希计算得到的哈希值;同样由文件名file2得到组合“file2或hash2”;这样,文件内容指纹即为上述两个组合的合并,即将上述两个组合的字符串连接。
文件关系指纹是根据软件中的两个以上的文件之间的预设的逻辑关系唯一确定,这里的逻辑关系包括与、或、非。例如,一条文件关系指纹是:file1与file2;其中file1和file2是两个文件名,则该文件关系指纹的意思是该软件既要包含文件file1,又要包含file2。又如,一条文件关系指纹是:file3与Dfile4;表示该软件是既包含文件file3,又在与file3之间的相对目录为D的目录下包含文件file4。又如,一条文件关系指纹是:file5或file6非file7,表示该软件中有文件file5或file6,但没有文件file7。
在使用文件指纹进行软件识别时,可以按照图1所示的步骤进行。图1是根据本发明实施例的识别软件的方法的示意图。
步骤S11:获取软件的文件指纹。此步骤中即按上述方式获得软件的文件指纹。在计算机中安装有多个软件的情况下,获取的则是这多个软件的指纹。
步骤S12:将获取的软件的文件指纹与保存的文件指纹进行比较。这里的保存的文件指纹一般是一个列表,列表中每一项是一个软件的一个版本的文件指纹,这些文件指纹如果包含文件内容指纹,计算文件内容标识时采用的文件中的代码的位置,在步骤S11中应当将该位置作为上述的预定位置,以保证得到的文件指纹具有可比性。上述列表的内容例如表1所示。
表1
软件版本 |
软件指纹 |
软件1,版本1.0 |
指纹1 |
软件1,版本1.1 |
指纹2 |
软件2,版本1.0 |
指纹3 |
软件2,版本1.1 |
指纹4 |
…… |
…… |
软件N |
指纹N |
步骤S13:在比较结果为相同的情况下确认软件的版本为保存的文件指纹中当前被比的文件指纹所对应的软件版本。例如,步骤S11获取了当前未知软件X的文件指纹为指纹4,在步骤S12中的比较发现与软件2的版本1.1的文件指纹相同,这样就可以确认,软件X是软件2,版本为1.1版。
图2是根据本发明实施例的识别软件的装置的基本结构的示意图。如图2所示,本发明实施例的识别软件的装置20主要包括获取模块21和比较模块22。其中获取模块21用于获取软件的文件指纹;比较模块22用于将获取的文件指纹与保存的文件指纹进行比较,在比较结果为相同的情况下确认所述软件的版本为所述保存的文件指纹中当前被比的文件指纹所对应的版本。
根据本发明实施例的技术方案,采用文件指纹作为软件的标识,能够确保软件的版本能够被识别,不依赖于软件在操作系统中的注册信息或者软件自带的版本信息;并且该方式因为可以灵活地选取文件内容指纹和文件关系指纹,对于文件内容指纹和文件关系指纹来说又可以灵活选取各个文件来得到,所以在实现中易于根据软件的实际特点来确定文件指纹的具体方式以及计算时所采用的文件,使文件指纹的计算较为高效并且有区别地标识多个软件的多个版本;在进行版本比较时的流程也较为简单,便于采用计算机高效执行。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。