-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
47 lines (42 loc) · 1.68 KB
/
main.go
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
package Threebits
import (
"flag"
"fmt"
"sync"
"os"
)
func Run(){
CollectPlugins()
var IP = flag.String("IP", "0.0.0.0", "IP of Server")
var port = flag.Int("port", 8000, "Port of Server")
var mode = flag.String("mode", "l", "mode to run in: m=Manager, w=worker, l=list plugins")
var targetlist = flag.String("targets", "targetlist.txt", "file containing the targets to scan, one per line (only used in manager mode)")
var whitelist = flag.String("whitelist", "whitelist.txt", "file containing a list of IPs to skip even if they are in the target list (only used in manager mode)")
var scansToRun = flag.String("scans", "", "comma-separated list of commands to run (only used in manager mode)")
var output = flag.String("output", "output.csv", "where to send output. if specified, will write to that filename (only used in manager mode)")
var quiet = flag.Bool("quiet", true, "quiet mode: if false, will record falses as well as trues (only used in manager mode)")
var numWorkers = flag.Int("numworkers", 5000, "number of workers to run (Only used in worker mode)")
var timeout = flag.Int("timeout", 3, "socket timeout in seconds (only used in worker mode)")
var wg sync.WaitGroup
flag.Parse()
switch *mode {
case "m":
// bail out if no actual scans are given.
if len(*scansToRun) == 0{
fmt.Println("No scans given to run")
os.Exit(1)
}
wg.Add(1)
RunManager(*IP, *port, *targetlist, *whitelist, *scansToRun, *output, *quiet, &wg)
case "w":
wg.Add(1)
RunWorkers(*IP, *port, *numWorkers, *timeout, &wg)
case "l":
fmt.Println("Plugins:")
for plugin := range Plugins{
fmt.Println("\t" + plugin)
}
default: fmt.Println("unknown mode")
}
wg.Wait()
}