Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
projectdiscovery
GitHub Repository: projectdiscovery/nuclei
Path: blob/dev/examples/advanced/advanced.go
2070 views
1
package main
2
3
import (
4
"context"
5
6
nuclei "github.com/projectdiscovery/nuclei/v3/lib"
7
"github.com/projectdiscovery/nuclei/v3/pkg/installer"
8
syncutil "github.com/projectdiscovery/utils/sync"
9
)
10
11
func main() {
12
ctx := context.Background()
13
// when running nuclei in parallel for first time it is a good practice to make sure
14
// templates exists first
15
tm := installer.TemplateManager{}
16
if err := tm.FreshInstallIfNotExists(); err != nil {
17
panic(err)
18
}
19
20
// create nuclei engine with options
21
ne, err := nuclei.NewThreadSafeNucleiEngineCtx(ctx)
22
if err != nil {
23
panic(err)
24
}
25
// setup sizedWaitgroup to handle concurrency
26
sg, err := syncutil.New(syncutil.WithSize(10))
27
if err != nil {
28
panic(err)
29
}
30
31
// scan 1 = run dns templates on scanme.sh
32
sg.Add()
33
go func() {
34
defer sg.Done()
35
err = ne.ExecuteNucleiWithOpts([]string{"scanme.sh"},
36
nuclei.WithTemplateFilters(nuclei.TemplateFilters{ProtocolTypes: "dns"}),
37
nuclei.WithHeaders([]string{"X-Bug-Bounty: pdteam"}),
38
nuclei.EnablePassiveMode(),
39
)
40
if err != nil {
41
panic(err)
42
}
43
}()
44
45
// scan 2 = run templates with oast tags on honey.scanme.sh
46
sg.Add()
47
go func() {
48
defer sg.Done()
49
err = ne.ExecuteNucleiWithOpts([]string{"http://honey.scanme.sh"}, nuclei.WithTemplateFilters(nuclei.TemplateFilters{Tags: []string{"oast"}}))
50
if err != nil {
51
panic(err)
52
}
53
}()
54
55
// wait for all scans to finish
56
sg.Wait()
57
defer ne.Close()
58
59
// Output:
60
// [dns-saas-service-detection] scanme.sh
61
// [nameserver-fingerprint] scanme.sh
62
// [dns-saas-service-detection] honey.scanme.sh
63
}
64
65