forked from sensepost/gowitness
-
Notifications
You must be signed in to change notification settings - Fork 0
/
root.go
71 lines (62 loc) 路 2.91 KB
/
root.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package cmd
import (
"fmt"
"os"
"github.com/sensepost/gowitness/chrome"
"github.com/sensepost/gowitness/lib"
"github.com/sensepost/gowitness/storage"
"github.com/spf13/cobra"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
var (
cfgFile string
options = lib.NewOptions()
chrm = chrome.NewChrome()
db = storage.NewDb()
)
// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "gowitness",
Short: "A commandline web screenshot and information gathering tool by @leonjza",
PersistentPreRun: func(cmd *cobra.Command, args []string) {
// Setup the logger to use
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: "02 Jan 2006 15:04:05"})
if options.Debug {
log.Logger = log.Logger.Level(zerolog.DebugLevel)
log.Logger = log.With().Caller().Logger()
log.Debug().Msg("debug logging enabed")
} else {
log.Logger = log.Logger.Level(zerolog.InfoLevel)
}
if options.DisableLogging {
log.Logger = log.Logger.Level(zerolog.Disabled)
}
options.Logger = &log.Logger
},
}
// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
func Execute() {
if err := rootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}
func init() {
// logging
rootCmd.PersistentFlags().BoolVar(&options.Debug, "debug", false, "enable debug logging")
rootCmd.PersistentFlags().BoolVar(&options.DisableLogging, "disable-logging", false, "disable all logging")
// global
rootCmd.PersistentFlags().BoolVar(&db.Disabled, "disable-db", false, "disable all database operations")
rootCmd.PersistentFlags().StringVarP(&db.Path, "db-path", "D", "gowitness.sqlite3", "destination for the gowitness database")
rootCmd.PersistentFlags().IntVarP(&chrm.ResolutionX, "resolution-x", "X", 1440, "screenshot resolution x")
rootCmd.PersistentFlags().IntVarP(&chrm.ResolutionY, "resolution-y", "Y", 900, "screenshot resolution y")
rootCmd.PersistentFlags().IntVar(&chrm.Delay, "delay", 0, "delay in seconds between navigation and screenshot")
rootCmd.PersistentFlags().StringVar(&chrm.UserAgent, "user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36", "user agent string to use")
rootCmd.PersistentFlags().StringVarP(&options.ScreenshotPath, "screenshot-path", "P", "screenshots", "store path for screenshots (use . for pwd)")
rootCmd.PersistentFlags().BoolVarP(&chrm.FullPage, "fullpage", "F", false, "take fullpage screenshots")
rootCmd.PersistentFlags().Int64Var(&chrm.Timeout, "timeout", 10, "preflight check timeout")
rootCmd.PersistentFlags().StringVarP(&chrm.ChromePath, "chrome-path", "", "", "path to chrome executable to use")
rootCmd.PersistentFlags().StringVarP(&chrm.Proxy, "proxy", "p", "", "http/socks5 proxy to use. Use format proto://address:port")
}