-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
91 lines (78 loc) · 1.88 KB
/
Copy pathmain.go
File metadata and controls
91 lines (78 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package main
import (
"context"
"fmt"
"os"
"os/signal"
"github.com/projectdiscovery/gologger"
"main/pkg/monitor"
"main/pkg/progress"
"main/pkg/scanner"
"main/pkg/whitelist"
)
const (
version = "1.2"
banner = "PKPR - Port monitoring in Golang v" + version + "\n\n"
)
func main() {
var err error
// Parse the command line args.
options := scanner.ParseOptions()
if options.RunnerOptions.Version {
fmt.Println(version)
os.Exit(0)
}
if !options.RunnerOptions.Silent {
fmt.Print(banner)
}
// Load a whitelist if requested.
var wl whitelist.Whitelist
if options.Whitelist != "" {
wl, err = whitelist.Load(options.Whitelist)
if err != nil {
gologger.Fatal().Msgf("Whitelist loading failed: %s\n", err.Error())
}
} else {
wl = whitelist.Empty
}
// Init the scanner.
scn, err := scanner.NewScanner(options)
if err != nil {
gologger.Fatal().Msgf("Scanner init failed: %s\n", err.Error())
}
defer scn.Close()
// Init the monitor.
mon := monitor.New(wl)
scn.OnResult = mon.Evaluate
mon.OnAlert = func(alert *monitor.Alert) {
if alert.Severity == monitor.SeverityWarn {
gologger.Warning().Msgf("%s\n", alert)
} else {
gologger.Error().Msgf("%s\n", alert)
}
}
// Setup progressbar.
progress.Start(scn)
// Run it.
if err = scn.Run(context.TODO()); err != nil {
gologger.Fatal().Msgf("Scan failed: %s\n", err.Error())
}
// Setup graceful exits
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
go func() {
for range c {
gologger.Info().Msgf("CTRL+C pressed: Exiting\n")
mon.Close()
os.Exit(1)
}
}()
mon.Close()
// Write the output to file if requested.
if options.RunnerOptions.Output != "" {
if err := mon.WriteAsJson(options.RunnerOptions.Output); err != nil {
gologger.Fatal().Msgf("Could not save results: %s\n", err.Error())
}
gologger.Info().Msgf("Results written to %q.\n", options.RunnerOptions.Output)
}
}