一种插件调度的方法、装置及存储介质与流程

文档序号:27495297发布日期:2021-11-22 15:38阅读:98来源:国知局
一种插件调度的方法、装置及存储介质与流程

1.本技术涉及网络安全技术领域,尤其涉及一种插件调度的方法、装置及存储介质。


背景技术:

2.当前,漏洞扫描工具在扫描漏洞时,是按照主机为粒度调度插件的,这就需要调用一个或多个插件集合。在插件的调度过程中,需要多次遍历有向无环图来确定下次需要调度的插件;并且,插件间不同的依赖关系,每时每刻存在的插件数量或执行的插件数量不一致,导致资源使用情况波动较大。
3.由于多次遍历有向无环图来确定下次需要调度的插件浪费了大量时间,且每时每刻执行的插件数量不均衡,损害了漏洞扫描工具的性能。因此,现有技术中,插件的调度方法存在效率低的问题。


技术实现要素:

4.本发明申请提供一种插件调度的方法、装置及存储介质,用以解决现有插件调度方法效率低的问题。
5.第一方面,为解决上述问题,本发明申请提供一种插件调度的方法,所述方法包括:
6.待插件加载后,获取构建插件执行序列和执行插件执行序列所需的变量参数;其中,插件执行序列是指,将插件按照预设规则排列组合;
7.利用所述构建插件执行序列所需的变量参数,构建插件执行序列;
8.读取漏洞扫描任务中的使能配置,根据所述使能配置确定所述插件执行序列中的可执行插件;其中,所述使能配置指示在所述漏洞扫描任务中的可执行插件;
9.基于所述插件执行序列以及执行插件执行序列所需的变量参数,调度并执行所述漏洞扫描任务对应的可执行插件。
10.上述本技术实施例所提供的方法,基于插件执行序列调度并执行所述漏洞扫描任务对应的可执行插件,避免了插件调度过程中多次遍历有向无环图的步骤,从而提高了插件调度的效率。
11.一种可能的实施方式,所述构建插件执行序列和执行插件执行序列所需的变量参数包括:
12.所述构建插件执行序列所需的变量参数包括,
13.结构体数组:包含插件执行序列中每个插件与其它插件之间的依赖关系属性的插件属性集;
14.插件指针:指向插件执行序列中当前的插件;
15.next指针:指向插件执行序列中的下一个插件;
16.所述执行插件执行序列所需的变量参数包括,
17.第一可执行元组的指针:用于读取漏洞扫描任务以后,指示插件执行序列所包含
的插件中第一个被执行的插件;
18.运行级别:用于指示插件执行序列中每个插件所对应的级别;
19.运行级别的引用计数:用于指示当前运行级别下正在执行的插件数量;
20.插件指针:指向插件执行序列中当前的插件;
21.next指针:指向插件执行序列中下一个被执行的插件。
22.一种可能的实施方式,所述构建插件执行序列之前,还包括:
23.基于插件的依赖关系,确定每个插件的依赖插件数目;并基于所述依赖插件数目对插件进行排序;其中,所述排序的排序规则包括:按照依赖插件数目从小到大的顺序排序。
24.一种可能的实施方式,所述基于所述插件执行序列以及执行插件序列所需的变量参数,调度并执行所述漏洞扫描任务对应的可执行插件包括:
25.获取所述漏洞扫描任务中的插件调度上限值与主机数量;根据所述插件调度上限值和主机数量,利用插件执行序列完成插件的调度;其中,所述插件调度上限值指示在所述插件调度过程中,每次调度的插件数量的最大值。
26.一种可能的实施方式,若所述主机数量为单主机,根据所述插件调度上限值与主机数量,利用插件执行序列完成插件的调度包括:
27.基于运行级别由低到高的顺序,调度并执行每一个运行级别的插件;其中,每一个运行级别中的插件根据插件执行序列中插件的排序依次调度并执行;在调度任一运行级别的插件时,当所述任一运行级别的插件数量大于所述插件调度上限,先调度并执行所述任一运行级别中,数量为插件调度上限值的插件,再调度并执行当前运行级别的剩余插件;并且,当前运行级别所对应的插件执行完,则执行其它运行级别的插件。
28.通过所述单主机插件调度的方法:根据所述插件执行序列确定插件的调度顺序,进行插件的调度,避免了每次插件调度前,遍历有向无环图,从而提高了插件执行率。
29.一种可能的实施方式,若所述主机数量为多主机,根据所述插件调度上限值与主机数量,利用插件执行序列完成插件的调度包括:
30.选取所述漏洞扫描任务中的任一主机,当所述任一主机对应的任一运行级别插件数目小于所述漏洞扫描任务的插件调度上限值,调度所述任一主机的相邻主机的插件,补充在所述任一主机对应的当前插件执行序列中;调度后,所述当前插件执行序列的每个运行级别中,插件数量和所述漏洞扫描任务的插件调度上限值一致。
31.通过所述多主机插件调度的方法:根据所述插件执行序列确定每个主机中插件的调度顺序;并使任一插件执行序列中,任一运行级别的插件数量与所述插件调度上限值一致。这样可以避免每次插件调度前,遍历有向无环图;同时也保证了插件调度过程中,可执行插件数量均衡在插件调度上限值,使插件执行率在单位时间内可以稳定在最大值,因此,整体插件执行率得到了明显提高。
32.第二方面,本发明申请提供一种插件调度的装置,该装置包括:
33.获取单元,待插件加载后,获取构建插件执行序列和执行插件执行序列所需的变量参数;其中,插件执行序列是指,将插件按照预设规则排列组合;
34.构建单元,利用所述构建插件执行序列所需的变量参数,构建插件执行序列;
35.确定单元,读取漏洞扫描任务中的使能配置,根据所述使能配置确定所述插件执
行序列中的可执行插件;其中,所述使能配置指示在所述漏洞扫描任务中的可执行插件;
36.调度单元,基于所述插件执行序列以及执行插件执行序列所需的变量参数,调度并执行所述漏洞扫描任务对应的可执行插件。
37.一种可能的实施方式,所述获取单元,具体用于获取所述构建插件执行序列和执行插件执行序列所需的变量参数;
38.所述构建插件执行序列所需的变量参数包括,结构体数组:包含插件执行序列中每个插件与其它插件之间的依赖关系属性的插件属性集;插件指针:指向插件执行序列中当前的插件;next指针:指向插件执行序列中的下一个插件;
39.所述执行插件执行序列所需的变量参数包括,第一可执行元组的指针:用于读取漏洞扫描任务以后,指示插件执行序列所包含的插件中第一个被执行的插件;运行级别:用于指示插件执行序列中每个插件所对应的级别;运行级别的引用计数:用于指示当前运行级别下正在执行的插件数量;插件指针:指向插件执行序列中当前的插件;next指针:指向插件执行序列中下一个被执行的插件。
40.一种可能的实施方式,所述构建单元,具体用于基于插件的依赖关系,确定每个插件的依赖插件数目;并基于所述依赖插件数目对插件进行排序;其中,所述排序的排序规则包括:按照依赖插件数目从小到大的顺序排序;按照所述依赖插件数目分别将所有插件划分为n个运行级别;其中,同一个运行级别中插件的依赖插件数目在设定区间范围内;n为整数。
41.一种可能的实施方式,所述调度单元,具体用于获取所述漏洞扫描任务中的插件调度上限值与主机数量;根据所述调度上限值与主机数量,利用插件执行序列完成插件的调度。
42.其中,所述插件调度上限值指示在所述插件调度过程中,每次调度的插件数量的最大值。
43.一种可能的实施方式,所述调度单元,还用于若所属主机数量为单主机,所述插件的调度方法包括,基于运行级别由低到高的顺序,调度并执行每一个运行级别的插件;其中,每一个运行级别中的插件根据插件执行序列中插件的排序依次调度并执行;在调度任一运行级别的插件时,当所述任一运行级别的插件数量大于所述插件调度上限,先调度并执行所述任一运行级别中,数量为插件调度上限值的插件,再调度并执行当前运行级别的剩余插件;并且,只有当每个运行级别的插件执行完,调整所述运行级别后,才可以调度并执行下一个运行级别的插件;
44.若所述主机数量为多主机,所属插件调度方法包括,选取所述漏洞扫描任务中的任一主机,当所述任一主机中每个运行级别插件数目小于插件调度上限值,调度相邻主机的插件,补充在当前插件执行序列中;调度后,在每个运行级别中,插件数量和所述漏洞扫描任务的插件调度上限值一致。
45.第三方面,本发明申请提供一种可读存储介质,其中,包括:
46.存储器,
47.所述存储器用于存储指令,当所述指令处理器执行时,使得包括所述可读存储介质的装置完成如第一方面以及任意一种实施方式所述的方法。
附图说明
48.图1为一个插件集合的有向无环图;
49.图2为本技术提供的一种插件调度方法的流程图;
50.图3为一个主机的插件执行序列;
51.图4为本技术提供的一种插件调度方法装置的结构示意图。
具体实施方式
52.当前,漏洞扫描工具在扫描漏洞时,是按照主机为粒度调度插件。但是,插件的调度存在效率低的问题。为了解决所述插件调度效率低的问题,本发明实施例提供一种插件调度的方法:构建执行插件执行序列,插件进行调度时可以直接执行插件执行序列,这样可以避免多次遍历有向无环图,尤其在多主机任务中,每时每刻插件执行数量都可以稳定在调度上限值,保证了单位时间插件的执行率稳定在最高水平,从而提高了插件调度的效率。
53.下面首先对本发明实施例中使用到的术语进行解释:
54.有向无环图(directed acyclic graph,dag):指在图论和计算机科学中,一个无回路的有向图,可以用于表示插件的依赖关系。
55.依赖:指一种逻辑关系。在本技术实施例中依赖可以解释为一种插件和插件之间调度的先后顺序。
56.例如,插件p1依赖插件p2,插件p2依赖插件p3,p3不依赖。那么,当需要调度p1时,需先调度p2;又因为插件p2依赖插件p3,p3不依赖,所以在调度p2之前,要先调度p3。因此,根据插件的依赖关系就可以获得这组插件的调度顺序:首先调度p3,然后调度p2,最后调度p1。
57.依赖插件数目(deps_num):指一个插件依赖插件的数量。例如,在一个插件集合中,插件p1同时依赖插件pa,pb,pc,那么,插件p1的依赖插件数目是3。
58.被依赖次数(a_dep_num):指一个插件被其它插件依赖的数量。例如,在一个插件集合中,插件p1同时被插件pa,pb,pc依赖,那么,插件p1的被依赖次数为3。
59.遍历:根据插件依赖关系的有向无环图,确定插件调度顺序的过程。其中,插件的调度顺序是按插件依赖的插件个数从小到大调度—将插件从不依赖任何插件的插件开始调度,然后调度依赖1个插件的插件,这样依次调度,直到插件集合中所有插件调度完。
60.需要说明的是,对插件集合进行遍历,是为了寻找插件集合中,依赖插件数目更小的插件来调度。因此,对一个插件集合的调度,会首先调度依赖插件数目为0的插件,然后调度依赖插件数目为1的插件,依次递增,直到插件集合中所有插件调度完成。其中,对所述插件集合中所有插件的遍历过程及执行过程,为插件的调度过程。
61.例如,图1为一个插件集合中插件依赖关系的有向无环图,可以通过多次遍历图1中各插件确定所述插件集合中所有插件的调度顺序。具体实现步骤如下:
62.步骤a:开始发现插件p1未执行,准备执行插件p1。
63.步骤b:检查到插件p1依赖插件p2,p6,pa;基于依赖关系,从p2,p6,pa中任意选择1个插件作为下一个可以调度的插件,所述可以调度的插件可以是p2,因此,准备执行插件p2。
64.步骤c:检查插件p2依赖插件p3,因此,调度插件p3,并准备执行插件p3。
65.步骤d:同样的,可以依次发现:插件p3依赖p4,插件p4依赖插件p5,p5不依赖任何插件,所以执行插件p5。
66.步骤e:和上述步骤b~d类似的方式,基于有向无环图中插件依赖关系,检查插件p6,pa依赖的插件,进行遍历,可以实现上述插件集合的遍历过程,通过上述遍历过程确定该插件集合中插件pc、p8、p5不依赖任何插件,所以在该插件集合中,首先执行插件pc、p8、p5。
67.为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
68.如图2所示,为本发明实施例提供的一种插件调度方法的流程示意图,该方法包括:
69.步骤201:待插件加载后,获取构建插件执行序列以及执行插件执行序列所需的变量参数;其中,插件执行序列是指,将插件按照预设规则排列组合。
70.其中,所述构建插件执行序列所需的变量参数包括:
71.结构体数组:包含插件执行序列中每个插件与其它插件之间的依赖关系属性的插件属性集。因此,根据结构体数组中插件的依赖关系,可以得到依赖插件数目和被依赖次数。
72.插件指针:指向插件执行序列中当前的插件。
73.next指针:指向插件执行序列中下一个可执行插件。
74.例如,结构体数组中有插件a依赖插件x、y、z;另有一个插件结构体数组中有插件x依赖m,n;则根据上述两个插件结构体数组可以得到对于插件a,它的依赖插件数目为3,被依赖次数0,插件指针指向插件a,next指针可以指向插件x、y、z中的任意一个;对于插件x,它的依赖插件数目为2,被依赖次数为1,插件指针指向插件x,next指针可以指向插件m、n中的任意一个。
75.其中,所述执行插件执行序列所需的变量参数包括:
76.第一可执行元组的指针:用于读取漏洞扫描任务以后,指示插件执行序列所包含的插件中,漏洞扫描任务对应的第一个被执行的插件。
77.运行级别:用于指示插件执行序列中每个插件所对应的级别;其中,该级别由插件的依赖插件数目确定。
78.运行级别的引用计数:用于指示当前运行级别下正在执行的插件数量。
79.插件指针:指向插件执行序列中当前的插件。
80.next指针:指向插件执行序列中下一个被执行的插件。
81.步骤202:利用所述构建插件执行序列所需的变量参数,构建插件执行序列。
82.其中,基于插件的依赖关系,确定每个插件的依赖插件数目;并基于所述依赖插件数目对插件进行排序;所述排序的排序规则包括:按照依赖插件数目从小到大的顺序排序。具体地,如图3所示,是插件执行序列实例,每一行是一个插件序列项,一个插件序列项中包含可以表示一个插件的变量参数。
83.结合图3,插件执行序列从第一个插件序列项,到最后一个插件序列项,依赖插件
数目顺序增加,依次为0,1,2,3,4;其中,依赖插件数目相同的插件所在的插件序列项之间不间隔其它依赖插件数目的插件序列项。
84.步骤203:读取漏洞扫描任务中的使能配置,根据所述使能配置确定所述插件执行序列中的可执行插件;其中,所述使能配置指示在所述漏洞扫描任务中的可执行插件。
85.根据所述使能配置,可以将插件执行序列中的插件分为两类,一类为所述漏洞扫描任务中需要执行的插件,作为可执行插件,即使能配置中指示的是当前漏洞扫描任务中可以执行的插件,所述可执行插件所在的插件序列项为可执行插件序列项;另一类为所述漏洞扫描任务不需要执行的插件。
86.例如,图3中的插件执行序列中,根据使能配置确定插件是否使能,得到可执行插件序列项,标记为带阴影的序列项。
87.具体地,调度并执行所述插件执行序列中的插件时,可以利用next指针从插件执行序列中选择出使能配置所指示的可执行插件。因此,next指针可以指向插件执行序列中的可执行插件序列项。
88.值得注意的是,漏洞扫描任务中可以包含多个主机或单个主机,每个主机对应多个插件;而对于包含多主机的漏洞扫描任务,所有主机的插件执行序列相同。
89.步骤204:基于所述插件执行序列以及执行插件执行序列所需的变量参数,调度并执行所述漏洞扫描任务对应的可执行插件。
90.具体地,读取漏洞扫描任务中插件调度上限值及主机数量;根据所述插件调度上限值与主机数量,利用插件执行序列完成插件的调度。其中,所述插件调度上限值指示在所述插件调度过程中,每次调度的插件数量的最大值。
91.由于插件执行序列中的插件按照依赖插件数目进行排序,因此,可以按照所述依赖插件数目分别将所有插件划分为n个运行级别;其中,同一个运行级别中插件的依赖插件数目在设定区间范围内;n为正整数。
92.第一种情况,若所述主机数量为单主机,则插件调度方法是:基于运行级别由低到高的顺序,调度并执行每一个运行级别的插件;其中,每一个运行级别中的插件根据插件执行序列中插件的排序依次调度并执行。
93.在调度任一运行级别的插件时,当所述任一运行级别的插件数量大于所述插件调度上限,先调度并执行所述任一运行级别中,数量为插件调度上限值的插件,再调度并执行当前运行级别的剩余插件;并且,当前运行级别所对应的插件执行完,则执行其它运行级别的插件。例如:执行图3中的插件执行序列,first_ptr指针依次指向run_level=0的插件,当且仅当run_level=0的插件执行完后,才会执行run_level=1的插件。
94.下面详细描述根据单主机的插件执行序列调度插件的具体过程:
95.步骤301:将主机所对应的插件执行序列初始化:确定该主机中将要执行的第一个插件。
96.具体地,结合图3,可以将第一可执行元组的指针(first_ptr)、运行级别(run_level)初始化。
97.其中,第一可执行元组的指针(first_ptr)初始化后,指向插件执行序列中的第一个可执行插件序列项。如果运行级别包括n级,级别由低到高分别标示为0~(n

1),run_level可以初始化为0,标识插件需要从运行级别为0的插件开始执行。
98.通过上述操作,可以确定所述插件执行序列中,运行级别为0的插件中第一个可执行插件序列项。
99.步骤302:根据第一可执行元组指针(first_ptr)读取第一个可执行插件序列项,完成第1个插件的调度,执行所述第一个可执行插件序列项中的插件。此时运行级别引用计数(run_level_u)加1,表示执行了一个当前运行级别的插件。
100.步骤303:将第一可执行元组指针(first_ptr)指向该序列项中next指针指向的下一个可执行插件序列项。读取插件序列项,完成第2个插件的调度,执行该插件序列项中的插件。
101.此时,运行级别引用计数(run_level_u)加1。其中,当某个插件执行完成时,运行级别引用计数(run_level_u)减1,表示当前运行级别中有1个插件已经执行完。
102.步骤304:重复步骤301~303,根据第一可执行元组指针和next指针,依次调度并执行插件执行序列中的插件,直到当前运行级别的插件执行完。此时,第一可执行元组指针(first_ptr)指向的可执行插件序列项为next指针指向的下一个可执行插件序列项,而next指向的可执行插件序列项为下一个运行级别的可执行插件序列项,其中的依赖插件数目也发生变化:比上一运行级别的依赖插件数目多1,则此时插件序列项中依赖插件数目(deps_num)大于当前的运行级别(run_level),且运行级别引用计数(run_level_u)为0,代表所述运行级别的插件已全部执行完。
103.步骤305:将当前运行级别(run_level)加1,执行下一运行级别的插件,执行方法和步骤301~303一致,这里不再赘述。
104.重复步骤301~305,就可以将所述主机中插件及补充插件从运行级别为0的插件依次执行,直至将运行级别为n

1的插件执行完。
105.通过所述单主机插件调度的方法,避免了每次插件调度前,遍历有向无环图这一步骤,提高了插件执行率。
106.第二种情况,若所述主机数量为多主机,插件调度方法为,选取所述漏洞扫描任务中的任一主机,当所述任一主机对应的任一运行级别插件数目小于所述漏洞扫描任务的插件调度上限值,调度所述任一主机的相邻主机的插件,补充在所述任一主机对应的当前插件执行序列中;调度后,所述当前插件执行序列的每个运行级别中,插件数量和所述漏洞扫描任务的插件调度上限值一致。
107.具体地,在调度相邻主机的插件之前,需要先确定每个运行级别插件的调度数量,以确定每个运行级别中插件的补充数量,具体实施步骤如下:
108.首先,将所述插件执行序列初始化:将第一可执行元组的指针(first_ptr)、运行级别(run_level)初始化。具体初始化方法和单主机中插件执行序列的初始化方法一致,可参考步骤301,在此不做赘述。
109.其次,将插件调度上限值n与run_level=0的插件数量na进行对比。
110.假设当前序列中调度插件数量可以是n;插件调度上限值n,当前运行级别为run_level=0,run_level=0的插件数量na,则具体实现可以是:
111.若n具体实,则从相邻主机的插件中调度run_level=0的插件n

na个,此时n=n,补充在当前插件执行序列后,便可调度所述插件执行序列中下个运行级别的插件。
112.例如,当调度上限值为10,第一个主机运行初,由插件执行序列得到运行级别为0
的插件数量为6,小于调度上限值。因此,任意选取相邻主机中运行级别为0的插件4个,补充在当前主机的插件执行序列中。
113.若n<na,则首先执行n个run_level=0的插件,此时n=n;当至少有一个插件执行完成时,n>n。
114.更进一步地,将剩余需要调度的run_level=0的插件的数量t和n

n对比。
115.若t>n

n,则继续执行run_level=0的插件,执行数量为n

n个。
116.直到t到n,执,则从相邻主机中调度run_level=0的插件补充在当前执序列中,调度的插件数量为n

n

t;
117.最后,在所述插件执行序列中,当运行级别(run_level=0)的插件数量与所述漏洞扫描任务的调度上限值一致,便可调度所述插件执行序列中下个运行级别的插件。
118.重复上述步骤,即可确定所述漏洞扫描任务中,所有主机中所有运行级别的插件调度数量。
119.通过所述多主机插件调度的方法:根据插件执行序列确定插件的调度顺序,避免了每次插件调度前,遍历有向无环图;同时保证了插件调度过程中,可执行插件数量均衡在插件调度上限值,使插件执行率在单位时间内可以稳定在最大值,因此,整体插件执行率得到了提高。
120.示例性的,结合图1,假设图3为图1的插件执行序列。则当前主机数量为单主机。插件p5,p8,pc的deps_num为0,它们的run_level为0,则图3中前三个阴影行是插件p5,p8,pc的插件序列项。需要说明的是,同一运行级别的插件可以任意排序。开始执行所述插件执行序列,first_ptr指向第一个带阴影的插件序列项,第一个带阴影的插件序列项可以是p5,此时deps_num字段为0,与当前run_level相等。那么,提取p5所在的序列项,执行p5,run_level_u加1变为1。然后,first_ptr指向next指向的下一个可执行插件序列项,next可以指向p8,run_level_u加1变为2。接着,first_ptr指向next指向的下一个可执行插件序列项,next可以指向pc所在的可执行插件序列项,run_level_u加1变为3。其中,每执行完p5,p8,pc中的任意一个插件,run_level_u减1。
121.此时,first_ptr可以指向p4,p4的deps_num字段为1,当前run_level为0,deps_num大于run_level。若此时,run_level_u是,同,则等待所有0级插件执行完毕,使run_level_u=0。
122.待run_level_u=0,将run_level加1,当前run_level变为1,deps_num=run_level,此时可以调度run_level=1的插件。
123.重复上述步骤,直到该主机中所有插件执行完。
124.示例性的,假设当前主机数量为多主机,且在插件执行过程中,同时开始执行的插件可以同时结束。现接收到漏洞扫描任务中有2个主机,命名为a,b。分别构建a、b的插件执行序列。该漏洞扫描任务中插件的调度上限值为6,a包含run_level=0(即0级插件)和run_level=1(即1级插件)的插件。其中,a的0级插件个数为10,1级插件个数为5。根据所述插件执行序列,对于包含多个运行级别插件的主机,首先执行0级插件。
125.由于漏洞扫描任务中插件调度上限值6小于a的0级插件个数10,因此,任意执行a中6个run_level=0的插件,当6个插件同时执行完,此时,a中剩余run_level=0的插件数量为4,则可以调度b中2个run_level=0的插件,补充在a的插件序列中,此时,可以执行的
run_level=0插件的数量和插件调度上限值一致。当执行完a中0级插件,便可继续调度下一运行级别的插件。对比插件调度上限值,可以从b中调度1个run_level=1的插件,补充在a的插件执行序列中。此时,可以执行run_level=1插件数量和插件调度上限值一致。
126.重复上述步骤,便可完成所述当前主机中的所有插件的调度执行。
127.需要说明的是,所述申请实施例中插件执行序列只是每个主机中插件组合顺序的具体实施例之一。具体实施中还可以构建其它规则对主机中插件组合排序,以确定插件的调度顺序。
128.基于同一发明构思,本技术实施例提供一种插件调度的装置,该装置与前述图2所述插件调度方法对应,该装置的具体实施方式可参见前述方法实施例部分的描述,重复之处不再赘述,参见图4,该装置包括:
129.获取单元401,待插件加载后,获取构建插件执行序列和执行插件执行序列所需的变量参数;其中,插件执行序列是指,将插件按照预设规则排列组合;
130.具体地,所述构建插件执行序列所需的变量参数包括,结构体数组:包含插件执行序列中每个插件与其它插件之间的依赖关系属性的插件属性集;运行级别:用于指示插件执行序列中每个插件所对应的级别;插件指针:指向插件执行序列中当前的插件;next指针:指向插件执行序列中的下一个插件;
131.所述执行插件执行序列所需的变量参数包括,第一可执行元组的指针:用于读取漏洞扫描任务以后,指示插件执行序列所包含的插件中第一个被执行的插件;运行级别:用于指示插件执行序列中每个插件所对应的级别;运行级别的引用计数:用于指示当前运行级别下正在执行的插件数量;插件指针:指向插件执行序列中当前的插件;next指针:指向插件执行序列中下一个被执行的插件。
132.构建单元402,利用所述构建插件执行序列所需的变量参数,构建插件执行序列;
133.具体地,基于插件的依赖关系,确定每个插件的依赖插件数目;并基于所述依赖插件数目对插件进行排序;其中,所述排序的排序规则包括:按照依赖插件数目从小到大的顺序排序;按照所述依赖插件数目分别将所有插件划分为n个运行级别;其中,同一个运行级别中插件的依赖插件数目在设定区间范围内;n为整数。
134.确定单元403,读取漏洞扫描任务中的使能配置,根据所述使能配置确定所述插件执行序列中的可执行插件;其中,所述使能配置指示在所述漏洞扫描任务中的可执行插件。
135.调度单元404,基于所述插件执行序列以及执行插件执行序列所需的变量参数,调度并执行所述漏洞扫描任务对应的可执行插件。
136.具体地,获取所述漏洞扫描任务中的插件调度上限值与主机数量;根据所述插件调度上限值与主机数量,利用插件执行序列完成插件的调度。其中,插件调度上限值指示在所述插件调度过程中,每次调度的插件数量的最大值。
137.若所属主机数量为单主机,所述插件的调度方法包括,基于运行级别由低到高的顺序,调度并执行每一个运行级别的插件;其中,每一个运行级别中的插件根据插件执行序列中插件的排序依次调度并执行;在调度任一运行级别的插件时,当所述任一运行级别的插件数量大于所述插件调度上限,先调度并执行所述任一运行级别中,数量为插件调度上限值的插件,再调度并执行当前运行级别的剩余插件;并且,只有当每个运行级别的插件执行完,调整所述运行级别,才可以调度并执行下一个运行级别的插件;
138.若所述主机数量为多主机,所属插件调度方法包括,选取所述漏洞扫描任务中的任一主机,当所述任一主机中每个运行级别插件数目小于插件调度上限值,调度相邻主机的插件,补充在当前插件执行序列中;调度后,在每个运行级别中,插件数量和所述漏洞扫描任务的插件调度上限值一致。
139.基于同一发明构思,本技术实施例还提供一种可读存储介质,包括:
140.存储器,
141.所述存储器用于存储指令,当所述指令处理器执行时,使得包括所述可读存储介质的装置完成如上所述的插件调度的方法。
142.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
143.在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
144.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
145.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
146.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:通用串行总线闪存盘(执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质)、移动硬盘、只读存储器(read

only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
147.显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1