diff --git a/core/options.go b/core/options.go index afe39ac4..e1a478e2 100644 --- a/core/options.go +++ b/core/options.go @@ -11,6 +11,7 @@ type Options struct { Silent *bool NoColors *bool NoHistory *bool + PrintVersion *bool EnvFile *string Commands *string CpuProfile *string @@ -24,6 +25,7 @@ func ParseOptions() (Options, error) { AutoStart: flag.String("autostart", "events.stream, net.recon", "Comma separated list of modules to auto start."), Caplet: flag.String("caplet", "", "Read commands from this file and execute them in the interactive session."), Debug: flag.Bool("debug", false, "Print debug messages."), + PrintVersion: flag.Bool("version", false, "Print the version and exit."), Silent: flag.Bool("silent", false, "Suppress all logs which are not errors."), NoColors: flag.Bool("no-colors", false, "Disable output color effects."), NoHistory: flag.Bool("no-history", false, "Disable interactive session history file."), diff --git a/main.go b/main.go index dd00dd22..7e0cbd24 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,8 @@ import ( "os" "strings" + "runtime" + "github.com/bettercap/bettercap/core" "github.com/bettercap/bettercap/log" "github.com/bettercap/bettercap/modules" @@ -31,9 +33,15 @@ func main() { } } - appName := fmt.Sprintf("%s v%s", core.Name, core.Version) + if *sess.Options.PrintVersion { + fmt.Printf("%s v%s (built for %s %s with %s)\n", core.Name, core.Version, runtime.GOOS, runtime.GOARCH, runtime.Version()) + return + } - fmt.Printf("%s (type '%s' for a list of commands)\n\n", tui.Bold(appName), tui.Bold("help")) + appName := fmt.Sprintf("%s v%s", core.Name, core.Version) + appBuild := fmt.Sprintf("(built for %s %s with %s)", runtime.GOOS, runtime.GOARCH, runtime.Version()) + + fmt.Printf("%s %s [type '%s' for a list of commands]\n\n", tui.Bold(appName), tui.Dim(appBuild), tui.Bold("help")) // Load all modules modules.LoadModules(sess) diff --git a/session/session.go b/session/session.go index 237690a1..aa5e96c0 100644 --- a/session/session.go +++ b/session/session.go @@ -173,6 +173,10 @@ func (s *Session) Module(name string) (err error, mod Module) { } func (s *Session) Close() { + if *s.Options.PrintVersion { + return + } + if *s.Options.Debug { fmt.Printf("\nStopping modules and cleaning session state ...\n") s.Events.Add("session.closing", nil)