一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种容器异常识别方法、系统、电子设备及存储介质与流程

2022-02-20 03:05:07 来源:中国专利 TAG:


1.本发明属于计算机安全技术领域,尤其涉及一种容器异常识别方法、系统、电子设备及存储介质。


背景技术:

2.云计算的迅猛发展伴随着云安全的出现,然而云安全面临的问题不仅是数据的丢失或泄露,还有不安全的应用程序接口,包括内部人员的安全威胁,账户、服务的通信劫持,漏洞利用和未知风险等。随着docker容器技术在国外和国内企业得到广泛应用,容器自身的安全问题越来越受到关注,同时容器本身的漏洞和威胁也越来越多。在美国国家漏洞库中,有103个漏洞与容器相关,其中43个是高危漏洞,因此保护容器安全刻不容缓,而基于容器的安全检测技术是容器安全的一个重要方面。
3.容器的异常检测是一类针对容器防御恶意攻击的广泛策略,需要对云计算的执行单元容器进行安全检测,发现容器内程序的恶意行为,从而实现防御。安全检测主要可以分为误用检测和异常检测。这两种方法的实现流程都需要对需要检测的正常应用程序建立模型,然后建立签名,检测时进行比较和判别。误用检测的检测签名技术会自动建立所有已知入侵的签名,并将这些签名用于检测入侵企图。对于每种类型的入侵,都需要存储这些入侵模式的签名,并且系统可能需要立刻更新相应入侵的签名,这严重影响了误用检测技术的性能。
4.由于docker容器自身的安全特性,容器非常容易发生容器逃逸问题,即恶意应用通过容器获取所在宿主机的更高权限,从而达到控制宿主机的目的。同时docker容器相较于宿主机更容易被攻击,受攻击的面更加广泛,伴随着入侵类型的增多,对计算机即时计算存储性能提出更高要求,而现有的容器异常检测性能普遍较差。


技术实现要素:

5.有鉴于此,本发明实施例提供了一种容器异常识别方法、系统、电子设备及存储介质,用于解决现有容器异常检测性能较差的问题。
6.在本发明实施例的第一方面,提供了一种容器异常识别方法,包括:
7.监视docker容器内的应用程序,获取预设时长docker容器内所有进程的系统调用,并分析所有进程间的调用关系,构造正常docker容器对应的进程树;
8.提取docker容器系统调用信息中的进程特征,所述进程特征至少包括系统调用序列频率特征和重复子序列特征;
9.通过特征相似度比较算法,将待测docker容器的进程特征与正常docker容器的进程特征比对,并判断待测docker容器的父进程特征与正常docker容器进程树相应位置的父进程节点特征相似度是否满足预设要求,以判定待测docker容器是否异常。
10.在本发明实施例的第二方面,提供了一种容器异常识别系统,包括:
11.调用信息获取模块,用于监视docker容器内的应用程序,获取预设时长docker容
器内所有进程的系统调用;
12.进程关系分析模块,用于分析所有进程间的调用关系,构造正常docker容器对应的进程树;
13.特征提取模块,用于提取docker容器系统调用信息中的进程特征,所述进程特征至少包括系统调用序列频率特征和重复子序列特征;
14.异常判定模块,用于通过特征相似度比较算法,将待测docker容器的进程特征与正常docker容器的进程特征比对,并判断待测docker容器的父进程特征与正常docker容器进程树相应位置的父进程节点特征相似度是否满足预设要求,以判定待测docker容器是否异常。
15.在本发明实施例的第三方面,提供了一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例第一方面所述方法的步骤。
16.在本发明实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。
17.本发明实施例中,基于系统调用的进程特征,从调用频率特征和重复子序列特征两个维度,对正常部署的容器行为和被恶意应用攻击后的容器异常行为进行特征比对,从而能够准确识别异常容器,减少误报率,提高容器异常检测性能。同时,基于进程间父子进程的关系比对,能够识别恶意程序的行为特征,通过比对正常容器与异常容器可以避免大量入侵模式的签名认证。
附图说明
18.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单介绍,显而易见地,下面描述的附图仅仅是本发明的一些实施例,对本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获取其他附图。
19.图1为本发明一个实施例提供的一种容器异常识别方法的流程示意图;
20.图2为本发明一个实施例提供的一种容器异常识别方法的另一流程示意图;
21.图3为本发明一个实施例提供的一种容器异常识别系统的结构示意图。
22.图4为本发明的一个实施例提供的一种电子设备的结构示意图。
具体实施方式
23.为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
24.应当理解,本发明的说明书或权利要求书及上述附图中的术语“包括”以及其他相近意思表述,意指覆盖不排他的包含,如包含一系列步骤或单元的过程、方法或系统、设备
没有限定于已列出的步骤或单元。此外,“第一”“第二”用于区分不同对象,并非用于描述特定顺序。
25.需要说明的是,针对现有检测方法中存在的诸多问题:
26.(1)对于每种类型的入侵,误用检测都需要存储这些入侵模式的签名,并且系统可能需要立刻更新相应入侵的签名,这严重影响了误用检测技术的性能。随着入侵的种类和数量越来越多,误用检测越来越不能满足应用需求。
27.(2)采用teiresias算法去获取linux进程的变长系统调用特征时,当存在超过阈值的重复子序列,该算法将不适用。
28.(3)恶意应用程序的行为特征也可能存在于正常行为模型中,比如对于数据库而言,删除文件操作是一个正常行为,但某些恶意程序也会进行恶意删除,因为删除操作的特征会存在于正常行为模型中,那么这种情况将无法识别出异常。
29.本发明实施例中,对docker容器中每个进程的系统调用序列进行分析,而非抽取整个系统调用序列的行为特征。同时,考虑进程间的相互关系,对异常操作行为进行判断,不需要建立签名即可进行判断,并能识别恶意程序的正常行为。
30.具体请参阅图1,本发明实施例提供的一种容器异常识别方法的流程示意图,包括:
31.s101、监视docker容器内的应用程序,获取预设时长docker容器内所有进程的系统调用,并分析所有进程间的调用关系,构造正常docker容器对应的进程树;
32.所述docker容器是一个开源的应用容器引擎,可以将应用程序及依赖包打包至可移植的docker容器中,并发布至linux或windows等机器上提供服务。通过监听容器内应用程序可以得到应用程序的进程调用信息。
33.需要说明的是,传统的异常检测方法通常是在完整的操作系统层面抽取整个系统调用序列的行为特征,比如在linux中抽取系统调用序列,通常包含多个进程的系统调用信息。本发明实施例,在容器的一般使用场景中,一个容器中的进程通常是一个服务产生的,程序的行为特征隐藏在进程之中的,通过对每个进程的系统调用序列进行分析,能更好的检测异常行为。
34.其中,通过strace工具获取docker容器产生的系统调用。strace是一个用于诊断、调试和教学的linux用户空间跟踪器,可监控用户空间进程和内核的交互,如系统调用、进程状态变更等。
35.对容器产生的系统调用进行采集,采集的数据中每行表示一次系统调用的完成信息,包括pid、调用时间、调用函数的参数及返回值。
36.一般的,在linux系统中,docker容器在宿主机中根据应用服务的需要生成多个进程,进程间调用关系呈树形结构。其中,通过pstree指令获取docker容器的进程树信息,进程树中存储有容器内进程间的关系。
37.所述进程树用于表示进程间的相互关系,是一种list结构,其包括父进程和子进程。
38.s102、提取docker容器的系统调用信息中的进程特征,所述进程特征至少包括系统调用序列频率特征和重复子序列特征;
39.在系统内存中建立系统调用字典,用于存储不同进程的系统调用特征信息,从系
统调用信息中提取系统调用序列频率特征和重复子序列特征。
40.对系统调用的每个进程进行分析,可以得到相应的频率特征和重复子序列特征。其中,所述调用序列频率特征指的是某一进程的系统调用频率,所述重复子序列特征指的是当前进程调用的高频子进程特征。从进程的两个特征维度进行提取分析,可以更准确的描述进程行为。
41.具体的,基于系统内存中的系统调用字典,获取不同进程的系统调用序列频率特征;通过teiresias算法获取系统调用序列中的高频重复子序列特征。
42.扫描整个系统调用序列,然后规定一个频率阈值k,获取所有的规定长度子序列,计算每个子序列出现的次数,将出现频率大于频率阈值k的子序列以及其位置信息进行保留。接着从高到低按照子序列频率对所有满足阈值条件的子序列进行排序,然后对于每个重复子序列不断向后扩展,如果子序列的频次大于k,继续拓展,否则将该子序列删除,这是一个递归的过程。通过teiresias算法就可以获得变长的出现频率高于阈值k的子序列特征。
43.其中,若所述高频重复子序列特征不能满足预设的进程行为表征要求,则通过定长特征抽取方法获取各进程的重复子序列特征。若高频重复子序列不能很好地表征系统调用序列的特征,则只能使用定长的特征获取方法,因为定长子序列系统调用子序列是程序行为的直接特征。
44.s103、通过特征相似度比较算法,将待测docker容器的进程特征与正常docker容器的进程特征比对,并判断待测docker容器的父进程特征与正常docker容器进程树相应位置的父进程节点特征相似度是否满足预设要求,以判定待测docker容器是否异常。
45.其中,所述相似度比较算法至少包括余弦相似度、汉明距离、编辑距离和动态时间规整算法。
46.所述余弦相似度通过两个n维矢量间夹角的余弦值来表示两个矢量间的相似程度;所述汉明距离是原本用在差错控制编码里面的一个算法,它表示字符串对应位置的不相同字符或者1,0的数量;所述编辑距离是指一个字符串转成另一个字符串所需要的最少操作次数;所述动态时间规整算法一般用于克服同一音而发音时间长短的不同,采用对输入语音信号进行伸长或缩短直到与标准模式的长度一致的一种算法,也可以描述测试模板和参考模板的时间对应关系,求解两模板匹配时累计距离最小所对应的规整函数。
47.进一步的,在比对两个进程特征时,根据字典key的字母顺序将value值转化为相同长度的字符串,计算两个字符串的汉明距离;或者,将两个进程的频率特征作为相同长度的矢量,计算进程间的余弦相似度;对于不定长度的高频重复子序列特征,采用动态时间规整算法或编辑距离算法计算特征相似度;对于不完整的进程特征,计算系统调用序列顺序特征相似度时,通过编辑距离算法计算特征相似度。
48.一般的,正常部署的docker容器可以认为其是正常的,因为该容器符合用户的服务需求,不发生通常意义上的异常,同时,该容器没有受到过入侵,内部的应用程序都是合法的。因此在对测试容器内的应用程序进行异常识别时,需要将该进程的系统调用特征依次与特征树上的进程特征比较,并判断该程序的行为特征是否存在于进程特征树中,从而能够判断该程序是否发生异常。
49.在web服务器的真实使用场景中,删除文件属于web服务器的正常操作,因此对于
web服务器的特征树模型中,会存在删除操作的行为特征节点。另一方面,恶意用户也会去恶意删除重要文件,仅仅比较测试进行的行为将无法识别这种情况的异常,因此需要去判断该进程的父进程是否位于进程树的相应位置,根据进程间的父子关系进行评估。
50.具体的,异常识别的判断是从根节点采用bfs遍历,计算待测容器进程的频率特征和顺序特征是否与正常容器节点特征相似度满足要求,若是,则还需要计算测试进程的父进程的频率特征和顺序特征是否与节点的父节点的特征相似度满足要求,如果还满足要求,即该进程的父进程仍然在特征树的相应位置,则认为该进程正常。
51.如图2所示,对于正常容器的正常数据和待测容器的测试数据,通过预处理提取序列频率特征和重复子序列特征,其中,包括识别进程间关系,构建进程树。基于进程特征树,分别比对进程特征和相关进程特征,即特征相似度比对及父进程特征比对,判断待测容器是否异常。
52.本实施例中,从两个不同的维度去分析系统调用进程的行为特征,对测试容器获取其系统调用信息,提取进程的行为特征后,与正常部署的进程特征进行比较判断是否发生异常,同时,比对该进程的父进程是否与正常容器的特征树中相应位置相同,从而可以排除特征树中属于异常的行为,比如恶意删除,能显著降低误报率,提升异常识别准确率,本实施例的方案在识别各种异常应用程序或恶意样本时表现良好,且具有较高的检测性能。
53.在另一实施例中,为了统一格式且方便使用,将所有的系统调用建立了索引字典,每个系统调用采用一个4位的字符串表示,具体格式如下表,前面是数字,后面是对应的系统调用,作为key-value对存入python的字典中。需要说明的是,在实验主机ubuntu18.04版本的操作系统中,系统调用共有313个,所以采用3位数字即可。因为系统调用序列是多个系统调用连续组成的,因此采用#将两个系统调用进行隔开。
54.进程树是一个list,其中保存的是进程的相互关系,实际在应用中在process类中添加ppid属性和children_list,分别代表其父进程pid和子进程pid,因为process类是一个字典,所以可以实现随机访问。
55.进程类是一个字典,key是该进程的pid,value是一个拥有两个元素的list,第一个元素是该进程的频率特征,第二个元素是该进程的重复子序列特征。
56.频率特征类是一个元素是字典的列表,每一个元素代表一个系统调用类型,字典的key是系统调用名称,value是该系统调用在系统调用序列中的频率。
57.重复子序列特征一个元素是字典的列表。每一个元素代表一个重复次数超过阈值的重复子序列,字典的key是重复子序列的字符串形式,value是该重复子序列出现的次数。
58.观察到真实应用环境中的不同类型应用程序一般使用的系统调用类型和数量有较大的区别,因此认为系统调用的频率信息可以表征应用程序的行为。同时同一个类型的应用程序会执行大量相同的任务,比如redis数据库会执行大量相同的插入、删除和查询操作,nginx反向代理服务器每天处理很多访问和更改的请求,同时不同的操作会产生相应的系统调用,那么可以认为这些高频出现的重复子序列能够作为程序的特征信息,用来比对正常程序行为和测试程序行为的相似度。
59.对于分系统调用类型提取其频率特征相对比较简单,只需要在内存建立系统调用字典,存储不同进程的系统调用特征信息即可。而获取系统调用序列中的重复子序列特征的方法则比较复杂,采用teiresias算法来获取系统调用序列中的高频重复子序列。其主要
的实现流程如下:首先扫描整个系统调用序列,然后定义一个频率阈值k,获取所有的规定长度子序列,比如系统调用序列为[1,2,3,4,5,6],n=3,那么得到的子序列为[1,2,3],[2,3,4],[3,4,5],[4,5,6],计算每个子序列出现的次数,将出现频率大于频率阈值k的子序列以及其位置信息进行保留,用作拓展阶段的原始数据。接着是扩展阶段,首先从高到低按照子序列频率对所有满足阈值条件的子序列进行排序,然后对于每个重复子序列不断向后扩展,如果子序列的频次大于k,继续拓展,否则将该子序列删除,这是一个递归的过程。通过teiresias算法我们就可以获得变长的出现频率高于阈值k的子序列特征。如果在系统调用序列中没有频率高于阈值的子序列,或者高频重复子序列不能很好地表征系统调用序列的特征,则只能使用定长的特征获取方法,因为定长子序列系统调用子序列是程序行为的直接特征。
[0060]
进程特征包括两个维度:频率特征和顺序特征。频率特征可以看作是不同系统调用序列及其出现频率的矢量,顺序特征即重复子序列特征,由多个系统调用序列组成,可以看作变长字符串。通常比较进程特征相似度可以使用的方法有余弦相似度计算,汉明距离,编辑距离和动态时间规整算法等。
[0061]
对于docker容器而言,在进程管理上有一些特殊之处,通常需要每个容器中只运行一个进程,因此适用于使用基于单个进程的微服务体系结构的应用程序。但是,某些传统应用程序由多个紧密耦合的进程组成,解耦的过程非常复杂且耗时,因此一般一个容器中运行着同一应用服务的多个进程,这些进程统统是为了该服务而产生的,因此我们可以通过去分析docker容器的父子关系,来应用到异常识别中去,来提高异常识别的准确性,减少误报率。
[0062]
示例性的,在真实部署的redis容器中进行验证:
[0063] set20set50set100get20get50get100set500.91nn0.45nnset1000.930.94n0.310.230.22
[0064]
表1
[0065] set20set50set100get20get50get100get500.62nn0.88nnget1000.430.420.420.880.900.90
[0066]
表2
[0067]
表1和表2分别是对插入key-value对、查询所有key-value对操作所产生的系统调用序列进行异常识别和误报检测的评估结果,表的第一列表示查询不同次数所产生的测试数据特征,表的第一行表示插入和查询不同次数所产生的训练数据特征。每格中的小数表示根据基于编辑距离计算的加权ratio值,表中的n表示该格的数据无效,因为要求正常训练数据的数据量要大于测试数据,只有这样才能保证数据是有效的。
[0068] set20set50set100get20get50get100del500.560.440.440.330.330.30del1000.420.310.310.320.300.30
[0069]
表3
[0070][0071][0072]
表4
[0073]
表3是对插入key-value对并进行查询的操作所产生的系统调用序列进行功能评估的结果,表5-10是对插入key-value对并对其进行删除的操作所产生的系统调用序列进行功能评估的结果。表格的小数是对应位置的训练数据和测试数据分别计算得到的系统调用序列的重复子序列特征计算得到的编辑距离加权ratio值。比如纵坐标setkey100和横坐标set100交叉处得到的结果,表示根据setkey100得到的数据建立特征,然后对set100提取特征,与特征树进行比对,计算得到编辑距离加权ratio值。根据以上表格可以得出以下结论,对于正常部署的容器应用程序,比如redis数据库,通过训练正常应用特征模型,可以识别出没有出现过的异常行为,异常识别方法是有效的。
[0074]
在真实部署的ubuntu容器中对恶意样本进行识别:
[0075][0076]
表5
[0077]
表5是对恶意应用程序异常识别评估的结果表,可以看出,对于四个不同的恶意应用程序,根据其与正常部署的ubuntu容器特征模型计算得到的频率特征余弦相似度和编辑距离加权ratio值可以判断出其发生了异常,即该系统准确识别了异常,识别率高达100%。
[0078]
应理解,上述实施例中各步骤的序号大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
[0079]
图3为本发明实施例提供的一种容器异常识别系统的结构示意图,该系统包括:
[0080]
调用信息获取模块310,用于监视docker容器内的应用程序,获取预设时长docker容器内所有进程的系统调用;
[0081]
其中,通过strace工具获取docker容器产生的系统调用;
[0082]
进程关系分析模块320,用于分析所有进程间的调用关系,构造正常docker容器对应的进程树;
[0083]
其中,通过pstree指令获取docker容器的进程调用关系,生成进程树。
[0084]
特征提取模块330,用于提取docker容器系统调用信息中的进程特征,所述进程特征至少包括系统调用序列频率特征和重复子序列特征;
[0085]
具体的,基于系统内存中的系统调用字典,获取不同进程的系统调用序列频率特
征;通过teiresias算法获取系统调用序列中的高频重复子序列特征。
[0086]
进一步的,若所述高频重复子序列特征不能满足预设的进程行为表征要求,则通过定长特征抽取方法获取各进程的重复子序列特征。
[0087]
异常判定模块340,用于通过特征相似度比较算法,将待测docker容器的进程特征与正常docker容器的进程特征比对,并判断待测docker容器的父进程特征与正常docker容器进程树相应位置的父进程节点特征相似度是否满足预设要求,以判定待测docker容器是否异常。
[0088]
其中,所述相似度比较算法至少包括余弦相似度、汉明距离、编辑距离和动态时间规整算法。
[0089]
具体的,在比对两个进程特征时,根据字典key的字母顺序将value值转化为相同长度的字符串,计算两个字符串的汉明距离;或者,将两个进程的频率特征作为相同长度的矢量,计算进程间的余弦相似度;对于不定长度的高频重复子序列特征,采用动态时间规整算法或编辑距离算法计算特征相似度;对于不完整的进程特征,计算系统调用序列顺序特征相似度时,通过编辑距离算法计算特征相似度。
[0090]
所述异常判定模块340还可以包括:
[0091]
警报模块,当检测到容器内应用程序发生异常时,发送警报信息给指定用户。
[0092]
所述领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置和模块的具体工作过程可以参考前述方法实施例中对应的过程,在此不再赘述。
[0093]
图4是本发明一实施例提供的一种电子设备的结构示意图。所述电子设备用于docker容器异常识别,通常为计算机。如图4所示,该实施例的电子设备4包括:存储器410、处理器420以及系统总线430,所述存储器410包括存储其上的可运行的程序4101,本领域技术人员可以理解,图4中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0094]
下面结合图4对电子设备的各个构成部件进行具体的介绍:
[0095]
存储器410可用于存储软件程序以及模块,处理器420通过运行存储在存储器410的软件程序以及模块,从而执行电子设备的各种功能应用以及数据处理。存储器410可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据(比如缓存数据)等。此外,存储器410可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0096]
在存储器410上包含网络请求方法的可运行程序4101,所述可运行程序4101可以被分割成一个或多个模块/单元,所述一个或多个模块/单元被存储在所述存储器410中,并由处理器420执行,以实现容器异常检测等,所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序4101在所述电子设备4中的执行过程。例如,所述计算机程序4101可以被分割为调用信息获取模块、进程关系分析模块、特征提取模块和异常判定模块。
[0097]
处理器420是电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器410内的软件程序和/或模块,以及调用存储在存储
器410内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体状态监控。可选的,处理器420可包括一个或多个处理单元;优选的,处理器420可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器420中。
[0098]
系统总线430是用来连接计算机内部各功能部件,可以传送数据信息、地址信息、控制信息,其种类可以是例如pci总线、isa总线、vesa总线等。处理器420的指令通过总线传递至存储器410,存储器410反馈数据给处理器420,系统总线430负责处理器420与存储器410之间的数据、指令交互。当然系统总线430还可以接入其他设备,例如网络接口、显示设备等。
[0099]
在本发明实施例中,该电子设备所包括的处理420执行的可运行程序包括:
[0100]
监视docker容器内的应用程序,获取预设时长docker容器内所有进程的系统调用,并分析所有进程间的调用关系,构造正常docker容器对应的进程树;
[0101]
提取docker容器的系统调用信息中的进程特征,所述进程特征至少包括系统调用序列频率特征和重复子序列特征;
[0102]
通过特征相似度比较算法,将待测docker容器的进程特征与正常docker容器的进程特征比对,并判断待测docker容器的父进程特征与正常docker容器进程树相应位置的父进程节点特征相似度是否满足预设要求,以判定待测docker容器是否异常。
[0103]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0104]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
[0105]
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献