Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
projectdiscovery
GitHub Repository: projectdiscovery/nuclei
Path: blob/dev/lib/example_test.go
2843 views
1
//go:build !race
2
3
package nuclei_test
4
5
import (
6
"os"
7
"testing"
8
9
"github.com/kitabisa/go-ci"
10
nuclei "github.com/projectdiscovery/nuclei/v3/lib"
11
"github.com/remeh/sizedwaitgroup"
12
)
13
14
// A very simple example on how to use nuclei engine
15
func ExampleNucleiEngine() {
16
// create nuclei engine with options
17
ne, err := nuclei.NewNucleiEngine(
18
nuclei.WithTemplateFilters(nuclei.TemplateFilters{IDs: []string{"self-signed-ssl"}}), // only run self-signed-ssl template
19
)
20
if err != nil {
21
panic(err)
22
}
23
// load targets and optionally probe non http/https targets
24
ne.LoadTargets([]string{"scanme.sh"}, false)
25
// when callback is nil it nuclei will print JSON output to stdout
26
err = ne.ExecuteWithCallback(nil)
27
if err != nil {
28
panic(err)
29
}
30
defer ne.Close()
31
32
// Output:
33
// [self-signed-ssl] scanme.sh:443
34
}
35
36
func ExampleThreadSafeNucleiEngine() {
37
// create nuclei engine with options
38
ne, err := nuclei.NewThreadSafeNucleiEngine()
39
if err != nil {
40
panic(err)
41
}
42
// setup sizedWaitgroup to handle concurrency
43
// here we are using sizedWaitgroup to limit concurrency to 1
44
// but can be anything in general
45
sg := sizedwaitgroup.New(1)
46
47
// scan 1 = run dns templates on scanme.sh
48
sg.Add()
49
go func() {
50
defer sg.Done()
51
err = ne.ExecuteNucleiWithOpts([]string{"scanme.sh"},
52
nuclei.WithTemplateFilters(nuclei.TemplateFilters{IDs: []string{"nameserver-fingerprint"}}), // only run self-signed-ssl template
53
)
54
if err != nil {
55
panic(err)
56
}
57
}()
58
59
// scan 2 = run dns templates on honey.scanme.sh
60
sg.Add()
61
go func() {
62
defer sg.Done()
63
err = ne.ExecuteNucleiWithOpts([]string{"honey.scanme.sh"}, nuclei.WithTemplateFilters(nuclei.TemplateFilters{ProtocolTypes: "dns"}))
64
if err != nil {
65
panic(err)
66
}
67
}()
68
69
// wait for all scans to finish
70
sg.Wait()
71
defer ne.Close()
72
73
// Output:
74
// [nameserver-fingerprint] scanme.sh
75
// [caa-fingerprint] honey.scanme.sh
76
}
77
78
func TestMain(m *testing.M) {
79
// this file only contains testtables examples https://go.dev/blog/examples
80
// and actual functionality test are in sdk_test.go
81
if ci.IsCI() {
82
// no need to run this test on github actions
83
return
84
}
85
86
os.Exit(m.Run())
87
}
88
89