diff --git a/v2/internal/runner/banner.go b/v2/internal/runner/banner.go index f2ebcfa77..43791420a 100644 --- a/v2/internal/runner/banner.go +++ b/v2/internal/runner/banner.go @@ -11,7 +11,7 @@ const banner = ` ` // Version is the current version of nuclei -const Version = `2.0.4` +const Version = `2.0.5` // showBanner is used to show the banner to the user func showBanner() { diff --git a/v2/internal/runner/runner.go b/v2/internal/runner/runner.go index b313e845f..bffbe3d7b 100644 --- a/v2/internal/runner/runner.go +++ b/v2/internal/runner/runner.go @@ -130,8 +130,10 @@ func New(options *Options) (*Runner, error) { runner.output = output } - // Creates the progress tracking object - runner.progress = progress.NewProgress(runner.options.NoColor) + if !options.Silent { + // Creates the progress tracking object + runner.progress = progress.NewProgress(runner.options.NoColor) + } runner.limiter = make(chan struct{}, options.Threads) @@ -319,8 +321,10 @@ func (r *Runner) RunEnumeration() { } else if totalRequests > 0 || hasWorkflows { // track global progress - p.InitProgressbar(r.inputCount, templateCount, totalRequests) - p.StartStdCapture() + if p != nil { + p.InitProgressbar(r.inputCount, templateCount, totalRequests) + p.StartStdCapture() + } for _, match := range allTemplates { wgtemplates.Add(1) @@ -346,11 +350,14 @@ func (r *Runner) RunEnumeration() { } wgtemplates.Wait() - p.Wait() - p.StopStdCapture() - p.ShowStdErr() - p.ShowStdOut() + if p != nil { + p.Wait() + + p.StopStdCapture() + p.ShowStdErr() + p.ShowStdOut() + } } if !results.Get() { @@ -410,7 +417,9 @@ func (r *Runner) processTemplateWithList(p *progress.Progress, template *templat }) } if err != nil { - p.Drop(request.(*requests.BulkHTTPRequest).GetRequestCount()) + if p != nil { + p.Drop(request.(*requests.BulkHTTPRequest).GetRequestCount()) + } gologger.Warningf("Could not create http client: %s\n", err) return false } diff --git a/v2/pkg/executer/executer_dns.go b/v2/pkg/executer/executer_dns.go index 9334a2c59..8825925a6 100644 --- a/v2/pkg/executer/executer_dns.go +++ b/v2/pkg/executer/executer_dns.go @@ -3,10 +3,11 @@ package executer import ( "bufio" "fmt" - "github.com/projectdiscovery/nuclei/v2/internal/progress" "os" "sync" + "github.com/projectdiscovery/nuclei/v2/internal/progress" + "github.com/pkg/errors" "github.com/projectdiscovery/gologger" "github.com/projectdiscovery/nuclei/v2/pkg/matchers" @@ -76,7 +77,9 @@ func (e *DNSExecuter) ExecuteDNS(p *progress.Progress, URL string) (result Resul compiledRequest, err := e.dnsRequest.MakeDNSRequest(domain) if err != nil { result.Error = errors.Wrap(err, "could not make dns request") - p.Drop(1) + if p != nil { + p.Drop(1) + } return } @@ -89,11 +92,15 @@ func (e *DNSExecuter) ExecuteDNS(p *progress.Progress, URL string) (result Resul resp, err := e.dnsClient.Do(compiledRequest) if err != nil { result.Error = errors.Wrap(err, "could not send dns request") - p.Drop(1) + if p != nil { + p.Drop(1) + } return } - p.Update() + if p != nil { + p.Update() + } gologger.Verbosef("Sent DNS request to %s\n", "dns-request", URL) diff --git a/v2/pkg/executer/executer_http.go b/v2/pkg/executer/executer_http.go index 20c309bbc..219b2e4f5 100644 --- a/v2/pkg/executer/executer_http.go +++ b/v2/pkg/executer/executer_http.go @@ -125,12 +125,16 @@ func (e *HTTPExecuter) ExecuteHTTP(p *progress.Progress, URL string) (result Res err = e.handleHTTP(p, URL, httpRequest, dynamicvalues, &result) if err != nil { result.Error = errors.Wrap(err, "could not handle http request") - p.Drop(remaining) + if p != nil { + p.Drop(remaining) + } return } e.bulkHttpRequest.Increment(URL) - p.Update() + if p != nil { + p.Update() + } remaining-- } diff --git a/v2/pkg/workflows/var.go b/v2/pkg/workflows/var.go index 777583932..2469b3c8f 100644 --- a/v2/pkg/workflows/var.go +++ b/v2/pkg/workflows/var.go @@ -57,7 +57,9 @@ func (n *NucleiVar) Call(args ...tengo.Object) (ret tengo.Object, err error) { for _, template := range n.Templates { p := template.Progress if template.HTTPOptions != nil { - p.AddToTotal(template.HTTPOptions.Template.GetHTTPRequestCount()) + if p != nil { + p.AddToTotal(template.HTTPOptions.Template.GetHTTPRequestCount()) + } for _, request := range template.HTTPOptions.Template.BulkRequestsHTTP { // apply externally supplied payloads if any request.Headers = generators.MergeMapsWithStrings(request.Headers, headers) @@ -66,7 +68,9 @@ func (n *NucleiVar) Call(args ...tengo.Object) (ret tengo.Object, err error) { template.HTTPOptions.BulkHttpRequest = request httpExecuter, err := executer.NewHTTPExecuter(template.HTTPOptions) if err != nil { - p.Drop(request.GetRequestCount()) + if p != nil { + p.Drop(request.GetRequestCount()) + } gologger.Warningf("Could not compile request for template '%s': %s\n", template.HTTPOptions.Template.ID, err) continue } @@ -84,7 +88,9 @@ func (n *NucleiVar) Call(args ...tengo.Object) (ret tengo.Object, err error) { } if template.DNSOptions != nil { - p.AddToTotal(template.DNSOptions.Template.GetDNSRequestCount()) + if p != nil { + p.AddToTotal(template.DNSOptions.Template.GetDNSRequestCount()) + } for _, request := range template.DNSOptions.Template.RequestsDNS { template.DNSOptions.DNSRequest = request dnsExecuter := executer.NewDNSExecuter(template.DNSOptions)