mirror of https://github.com/daffainfo/nuclei.git
deprecating rlm
parent
3c62b56fd9
commit
620287f76b
|
@ -15,6 +15,7 @@ import (
|
||||||
"github.com/projectdiscovery/utils/auth/pdcp"
|
"github.com/projectdiscovery/utils/auth/pdcp"
|
||||||
"github.com/projectdiscovery/utils/env"
|
"github.com/projectdiscovery/utils/env"
|
||||||
_ "github.com/projectdiscovery/utils/pprof"
|
_ "github.com/projectdiscovery/utils/pprof"
|
||||||
|
stringsutil "github.com/projectdiscovery/utils/strings"
|
||||||
|
|
||||||
"github.com/projectdiscovery/goflags"
|
"github.com/projectdiscovery/goflags"
|
||||||
"github.com/projectdiscovery/gologger"
|
"github.com/projectdiscovery/gologger"
|
||||||
|
@ -329,7 +330,8 @@ on extensive configurability, massive extensibility and ease of use.`)
|
||||||
|
|
||||||
flagSet.CreateGroup("rate-limit", "Rate-Limit",
|
flagSet.CreateGroup("rate-limit", "Rate-Limit",
|
||||||
flagSet.IntVarP(&options.RateLimit, "rate-limit", "rl", 150, "maximum number of requests to send per second"),
|
flagSet.IntVarP(&options.RateLimit, "rate-limit", "rl", 150, "maximum number of requests to send per second"),
|
||||||
flagSet.IntVarP(&options.RateLimitMinute, "rate-limit-minute", "rlm", 0, "maximum number of requests to send per minute"),
|
flagSet.DurationVarP(&options.RateLimitDuration, "rate-limit-duration", "rld", time.Second, "maximum number of requests to send per second"),
|
||||||
|
flagSet.IntVarP(&options.RateLimitMinute, "rate-limit-minute", "rlm", 0, "maximum number of requests to send per minute (DEPRECATED)"),
|
||||||
flagSet.IntVarP(&options.BulkSize, "bulk-size", "bs", 25, "maximum number of hosts to be analyzed in parallel per template"),
|
flagSet.IntVarP(&options.BulkSize, "bulk-size", "bs", 25, "maximum number of hosts to be analyzed in parallel per template"),
|
||||||
flagSet.IntVarP(&options.TemplateThreads, "concurrency", "c", 25, "maximum number of templates to be executed in parallel"),
|
flagSet.IntVarP(&options.TemplateThreads, "concurrency", "c", 25, "maximum number of templates to be executed in parallel"),
|
||||||
flagSet.IntVarP(&options.HeadlessBulkSize, "headless-bulk-size", "hbs", 10, "maximum number of headless hosts to be analyzed in parallel per template"),
|
flagSet.IntVarP(&options.HeadlessBulkSize, "headless-bulk-size", "hbs", 10, "maximum number of headless hosts to be analyzed in parallel per template"),
|
||||||
|
@ -597,10 +599,10 @@ Note: Make sure you have backup of your custom nuclei-templates before proceedin
|
||||||
gologger.Fatal().Msgf("could not read response: %s", err)
|
gologger.Fatal().Msgf("could not read response: %s", err)
|
||||||
}
|
}
|
||||||
resp = strings.TrimSpace(resp)
|
resp = strings.TrimSpace(resp)
|
||||||
if strings.EqualFold(resp, "y") || strings.EqualFold(resp, "yes") {
|
if stringsutil.EqualFoldAny(resp, "y", "yes") {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if strings.EqualFold(resp, "n") || strings.EqualFold(resp, "no") || resp == "" {
|
if stringsutil.EqualFoldAny(resp, "n", "no", "") {
|
||||||
fmt.Println("Exiting...")
|
fmt.Println("Exiting...")
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
|
@ -314,11 +314,17 @@ func New(options *types.Options) (*Runner, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if options.RateLimitMinute > 0 {
|
if options.RateLimitMinute > 0 {
|
||||||
runner.rateLimiter = ratelimit.New(context.Background(), uint(options.RateLimitMinute), time.Minute)
|
gologger.Warning().Msgf("rate limit per minute is deprecated - use rate-limit-duration")
|
||||||
} else if options.RateLimit > 0 {
|
options.RateLimit = options.RateLimitMinute
|
||||||
runner.rateLimiter = ratelimit.New(context.Background(), uint(options.RateLimit), time.Second)
|
options.RateLimitDuration = time.Minute
|
||||||
} else {
|
}
|
||||||
|
if options.RateLimit > 0 && options.RateLimitDuration == 0 {
|
||||||
|
options.RateLimitDuration = time.Second
|
||||||
|
}
|
||||||
|
if options.RateLimit == 0 && options.RateLimitDuration == 0 {
|
||||||
runner.rateLimiter = ratelimit.NewUnlimited(context.Background())
|
runner.rateLimiter = ratelimit.NewUnlimited(context.Background())
|
||||||
|
} else {
|
||||||
|
runner.rateLimiter = ratelimit.New(context.Background(), uint(options.RateLimit), options.RateLimitDuration)
|
||||||
}
|
}
|
||||||
|
|
||||||
if tmpDir, err := os.MkdirTemp("", "nuclei-tmp-*"); err == nil {
|
if tmpDir, err := os.MkdirTemp("", "nuclei-tmp-*"); err == nil {
|
||||||
|
|
13
lib/multi.go
13
lib/multi.go
|
@ -42,11 +42,16 @@ func createEphemeralObjects(base *NucleiEngine, opts *types.Options) (*unsafeOpt
|
||||||
Parser: base.parser,
|
Parser: base.parser,
|
||||||
}
|
}
|
||||||
if opts.RateLimitMinute > 0 {
|
if opts.RateLimitMinute > 0 {
|
||||||
u.executerOpts.RateLimiter = ratelimit.New(context.Background(), uint(opts.RateLimitMinute), time.Minute)
|
opts.RateLimit = opts.RateLimitMinute
|
||||||
} else if opts.RateLimit > 0 {
|
opts.RateLimitDuration = time.Minute
|
||||||
u.executerOpts.RateLimiter = ratelimit.New(context.Background(), uint(opts.RateLimit), time.Second)
|
}
|
||||||
} else {
|
if opts.RateLimit > 0 && opts.RateLimitDuration == 0 {
|
||||||
|
opts.RateLimitDuration = time.Second
|
||||||
|
}
|
||||||
|
if opts.RateLimit == 0 && opts.RateLimitDuration == 0 {
|
||||||
u.executerOpts.RateLimiter = ratelimit.NewUnlimited(context.Background())
|
u.executerOpts.RateLimiter = ratelimit.NewUnlimited(context.Background())
|
||||||
|
} else {
|
||||||
|
u.executerOpts.RateLimiter = ratelimit.New(context.Background(), uint(opts.RateLimit), opts.RateLimitDuration)
|
||||||
}
|
}
|
||||||
u.engine = core.New(opts)
|
u.engine = core.New(opts)
|
||||||
u.engine.SetExecuterOptions(u.executerOpts)
|
u.engine.SetExecuterOptions(u.executerOpts)
|
||||||
|
|
|
@ -192,11 +192,16 @@ func (e *NucleiEngine) init() error {
|
||||||
|
|
||||||
if e.executerOpts.RateLimiter == nil {
|
if e.executerOpts.RateLimiter == nil {
|
||||||
if e.opts.RateLimitMinute > 0 {
|
if e.opts.RateLimitMinute > 0 {
|
||||||
e.executerOpts.RateLimiter = ratelimit.New(context.Background(), uint(e.opts.RateLimitMinute), time.Minute)
|
e.opts.RateLimit = e.opts.RateLimitMinute
|
||||||
} else if e.opts.RateLimit > 0 {
|
e.opts.RateLimitDuration = time.Minute
|
||||||
e.executerOpts.RateLimiter = ratelimit.New(context.Background(), uint(e.opts.RateLimit), time.Second)
|
}
|
||||||
} else {
|
if e.opts.RateLimit > 0 && e.opts.RateLimitDuration == 0 {
|
||||||
|
e.opts.RateLimitDuration = time.Second
|
||||||
|
}
|
||||||
|
if e.opts.RateLimit == 0 && e.opts.RateLimitDuration == 0 {
|
||||||
e.executerOpts.RateLimiter = ratelimit.NewUnlimited(context.Background())
|
e.executerOpts.RateLimiter = ratelimit.NewUnlimited(context.Background())
|
||||||
|
} else {
|
||||||
|
e.executerOpts.RateLimiter = ratelimit.New(context.Background(), uint(e.opts.RateLimit), e.opts.RateLimitDuration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,7 @@ var DefaultOptions = &types.Options{
|
||||||
Timeout: 5,
|
Timeout: 5,
|
||||||
Retries: 1,
|
Retries: 1,
|
||||||
RateLimit: 150,
|
RateLimit: 150,
|
||||||
|
RateLimitDuration: time.Second,
|
||||||
ProjectPath: "",
|
ProjectPath: "",
|
||||||
Severities: severity.Severities{},
|
Severities: severity.Severities{},
|
||||||
Targets: []string{},
|
Targets: []string{},
|
||||||
|
|
|
@ -132,7 +132,10 @@ type Options struct {
|
||||||
Retries int
|
Retries int
|
||||||
// Rate-Limit is the maximum number of requests per specified target
|
// Rate-Limit is the maximum number of requests per specified target
|
||||||
RateLimit int
|
RateLimit int
|
||||||
|
// Rate Limit Duration interval between burst resets
|
||||||
|
RateLimitDuration time.Duration
|
||||||
// Rate-Limit is the maximum number of requests per minute for specified target
|
// Rate-Limit is the maximum number of requests per minute for specified target
|
||||||
|
// Deprecated: Use RateLimitDuration - automatically set Rate Limit Duration to 60 seconds
|
||||||
RateLimitMinute int
|
RateLimitMinute int
|
||||||
// PageTimeout is the maximum time to wait for a page in seconds
|
// PageTimeout is the maximum time to wait for a page in seconds
|
||||||
PageTimeout int
|
PageTimeout int
|
||||||
|
@ -410,6 +413,7 @@ func (options *Options) HasClientCertificates() bool {
|
||||||
func DefaultOptions() *Options {
|
func DefaultOptions() *Options {
|
||||||
return &Options{
|
return &Options{
|
||||||
RateLimit: 150,
|
RateLimit: 150,
|
||||||
|
RateLimitDuration: time.Second,
|
||||||
BulkSize: 25,
|
BulkSize: 25,
|
||||||
TemplateThreads: 25,
|
TemplateThreads: 25,
|
||||||
HeadlessBulkSize: 10,
|
HeadlessBulkSize: 10,
|
||||||
|
|
Loading…
Reference in New Issue