nuclei/pkg/core/engine.go

63 lines
1.8 KiB
Go
Raw Normal View History

2021-10-27 16:50:36 +05:30
package core
import (
"github.com/projectdiscovery/nuclei/v3/pkg/output"
"github.com/projectdiscovery/nuclei/v3/pkg/protocols"
"github.com/projectdiscovery/nuclei/v3/pkg/types"
2021-10-27 16:50:36 +05:30
)
2021-11-03 02:23:48 +05:30
// Engine is an executer for running Nuclei Templates/Workflows.
2021-10-27 16:50:36 +05:30
//
// The engine contains multiple thread pools which allow using different
// concurrency values per protocol executed.
//
// The engine does most of the heavy lifting of execution, from clustering
2022-02-07 16:41:55 +02:00
// templates to leading to the final execution by the work pool, it is
2021-10-27 16:50:36 +05:30
// handled by the engine.
type Engine struct {
workPool *WorkPool
options *types.Options
executerOpts protocols.ExecutorOptions
Callback func(*output.ResultEvent) // Executed on results
2021-10-27 16:50:36 +05:30
}
// New returns a new Engine instance
func New(options *types.Options) *Engine {
engine := &Engine{
options: options,
2021-10-27 16:50:36 +05:30
}
engine.workPool = engine.GetWorkPool()
2021-10-27 16:50:36 +05:30
return engine
}
2024-04-03 18:50:46 +02:00
func (e *Engine) GetWorkPoolConfig() WorkPoolConfig {
config := WorkPoolConfig{
InputConcurrency: e.options.BulkSize,
TypeConcurrency: e.options.TemplateThreads,
HeadlessInputConcurrency: e.options.HeadlessBulkSize,
HeadlessTypeConcurrency: e.options.HeadlessTemplateThreads,
2024-04-03 18:50:46 +02:00
}
return config
}
// GetWorkPool returns a workpool from options
func (e *Engine) GetWorkPool() *WorkPool {
return NewWorkPool(e.GetWorkPoolConfig())
}
2021-10-27 16:50:36 +05:30
// SetExecuterOptions sets the executer options for the engine. This is required
// before using the engine to perform any execution.
func (e *Engine) SetExecuterOptions(options protocols.ExecutorOptions) {
2021-10-27 16:50:36 +05:30
e.executerOpts = options
}
// ExecuterOptions returns protocols.ExecutorOptions for nuclei engine.
func (e *Engine) ExecuterOptions() protocols.ExecutorOptions {
2021-10-27 16:50:36 +05:30
return e.executerOpts
}
// WorkPool returns the worker pool for the engine
func (e *Engine) WorkPool() *WorkPool {
return e.workPool
}