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