From e47b7241671fa04dbd7f832fb369650dfcfb238b Mon Sep 17 00:00:00 2001 From: Siddharth Dushantha Date: Thu, 12 Dec 2024 16:04:32 +0100 Subject: [PATCH 1/2] improved UX - Using Grumble's subcommands rather than underscore seprated subcommands - Using hypenes instead of underscores in long two worded commands - Using two character aliases instead of long variations of the same command --- cmd/proxy/app/app.go | 112 ++++++++------ cmd/proxy/app/interfaces_linux.go | 244 ++++++++++++++++-------------- cmd/proxy/main.go | 2 +- go.mod | 8 +- go.sum | 73 +++++---- 5 files changed, 245 insertions(+), 194 deletions(-) diff --git a/cmd/proxy/app/app.go b/cmd/proxy/app/app.go index dd56ba4..7ec7175 100644 --- a/cmd/proxy/app/app.go +++ b/cmd/proxy/app/app.go @@ -183,9 +183,10 @@ func Run() { }) App.AddCommand(&grumble.Command{ - Name: "certificate_fingerprint", - Help: "Show the current selfcert fingerprint", - Usage: "certificate_fingerprint", + Name: "certificate-fingerprint", + Help: "Show the current selfcert fingerprint", + Usage: "certificate-fingerprint", + Aliases: []string{"cf"}, Run: func(c *grumble.Context) error { selfcrt := ProxyController.SelfCert @@ -199,21 +200,25 @@ func Run() { }) App.AddCommand(&grumble.Command{ - Name: "connect_agent", - Help: "Attempt to connect to a bind agent", - Usage: "connect_agent --ip [agentip]", + Name: "connect-agent", + Help: "Attempt to connect to a bind agent", + Usage: "connect-agent --ip [agentip]", + Aliases: []string{"ca"}, Flags: func(f *grumble.Flags) { - f.StringL("ip", "", "The agent ip:port") f.BoolL("ignore-cert", false, "Ignore TLS certificate verification") }, + Args: func(a *grumble.Args) { + a.String("ip", "The agent ip:port") + }, Run: func(c *grumble.Context) error { tlsConfig := &tls.Config{} tlsConfig.InsecureSkipVerify = true - remoteConn, err := tls.Dial("tcp", c.Flags.String("ip"), tlsConfig) + remoteConn, err := tls.Dial("tcp", c.Args.String("ip"), tlsConfig) if err != nil { return err } + if !c.Flags.Bool("ignore-cert") { cert := remoteConn.ConnectionState().PeerCertificates[0].Raw shaSum := sha256.Sum256(cert) @@ -221,6 +226,7 @@ func Run() { prompt := &survey.Confirm{ Message: fmt.Sprintf("TLS Certificate Fingerprint is: %X, connect?", shaSum), } + survey.AskOne(prompt, &confirmTLS) if !confirmTLS { remoteConn.Close() @@ -244,23 +250,30 @@ func Run() { if err := RegisterAgent(agent); err != nil { logrus.Errorf("could not register agent: %s", err.Error()) } + return nil }, }) - App.AddCommand(&grumble.Command{ - Name: "tunnel_start", - Help: "Start relaying connection to the current agent", - Usage: "tunnel_start --tun ligolo", - HelpGroup: "Tunneling", - Aliases: []string{"start"}, - Flags: func(f *grumble.Flags) { - f.StringL("tun", "ligolo", "the interface to run the proxy on") + tunnelCmd := &grumble.Command{ + Name: "tunnel", + Help: "Manage tunnels", + } + + App.AddCommand(tunnelCmd) + + tunnelCmd.AddCommand(&grumble.Command{ + Name: "start", + Help: "Start relaying connection to the current agent", + Usage: "start [ifname]", + Args: func(a *grumble.Args) { + a.String("ifname", "The interface to run the proxy on") }, Run: func(c *grumble.Context) error { if _, ok := AgentList[CurrentAgentID]; !ok { return ErrInvalidAgent } + CurrentAgent := AgentList[CurrentAgentID] if CurrentAgent.Session == nil { @@ -273,22 +286,21 @@ func Run() { for _, agent := range AgentList { if agent.Running { - if agent.Interface == c.Flags.String("tun") { - return errors.New("a tunnel is already using this interface name. Please use a different name using the --tun option") + if agent.Interface == c.Args.String("ifname") { + return errors.New("a tunnel is already using this interface name. Please use a different name") } } } - go StartTunnel(CurrentAgent, c.Flags.String("tun")) + go StartTunnel(CurrentAgent, c.Args.String("ifname")) return nil }, }) - App.AddCommand(&grumble.Command{Name: "tunnel_list", - Help: "List active tunnels", - Usage: "tunnel_list", - HelpGroup: "Tunneling", + tunnelCmd.AddCommand(&grumble.Command{ + Name: "ls", + Help: "List active tunnels", Run: func(c *grumble.Context) error { t := table.NewWriter() t.SetStyle(table.StyleLight) @@ -298,11 +310,11 @@ func Run() { AgentListMutex.Lock() for id, agent := range AgentList { - if agent.Running { t.AppendRow(table.Row{id, agent.Name, agent.Interface}) } } + AgentListMutex.Unlock() App.Println(t.Render()) @@ -310,11 +322,9 @@ func Run() { }, }) - App.AddCommand(&grumble.Command{Name: "tunnel_stop", - Help: "Stop the tunnel", - Usage: "stop", - HelpGroup: "Tunneling", - Aliases: []string{"stop"}, + tunnelCmd.AddCommand(&grumble.Command{ + Name: "stop", + Help: "Stop the tunnel", Flags: func(f *grumble.Flags) { f.IntL("agent", -1, "The agent to stop") }, @@ -340,6 +350,7 @@ func Run() { return nil }, }) + App.AddCommand(&grumble.Command{ Name: "ifconfig", Help: "Show agent interfaces", @@ -382,11 +393,16 @@ func Run() { }, }) - App.AddCommand(&grumble.Command{ - Name: "listener_list", - Help: "List currently running listeners", - Usage: "listener_list", - HelpGroup: "Listeners", + listenerCmd := &grumble.Command{ + Name: "listener", + Help: "Manage listener", + } + + App.AddCommand(listenerCmd) + + listenerCmd.AddCommand(&grumble.Command{ + Name: "ls", + Help: "List currently running listeners", Run: func(c *grumble.Context) error { t := table.NewWriter() t.SetStyle(table.StyleLight) @@ -408,10 +424,9 @@ func Run() { }, }) - App.AddCommand(&grumble.Command{ - Name: "listener_stop", + listenerCmd.AddCommand(&grumble.Command{ + Name: "stop", Help: "Stop a listener", - Usage: "listener_stop", HelpGroup: "Listeners", Run: func(c *grumble.Context) error { var session string @@ -466,16 +481,17 @@ func Run() { }, }) - App.AddCommand(&grumble.Command{ - Name: "listener_add", - Help: "Listen on the agent and redirect connections to the desired address", - Usage: "listener_add --addr [agent_listening_address:port] --to [local_listening_address:port] --tcp/--udp (--no-retry)", - HelpGroup: "Listeners", + listenerCmd.AddCommand(&grumble.Command{ + Name: "add", + Help: "Listen on the agent and redirect connections to the desired address", + Usage: "add [ADDR] [TO] [OPTIONS]", + Args: func(a *grumble.Args) { + a.String("addr", "The agent listening (IP:PORT)") + a.String("to", "Where to redirect connections (IP:PORT)") + }, Flags: func(f *grumble.Flags) { f.BoolL("tcp", false, "Use TCP listener") f.BoolL("udp", false, "Use UDP listener") - f.StringL("addr", "", "The agent listening address:port") - f.StringL("to", "", "Where to redirect connections") }, Run: func(c *grumble.Context) error { if _, ok := AgentList[CurrentAgentID]; !ok { @@ -500,19 +516,19 @@ func Run() { netProto = "tcp" // Use TCP by default. } - if c.Flags.String("to") == "" { + if c.Args.String("to") == "" { return errors.New("please, specify a valid redirect (to) IP address - expected format : ip:port") } // Check if specified IP is valid. - if _, _, err := net.SplitHostPort(c.Flags.String("to")); err != nil { + if _, _, err := net.SplitHostPort(c.Args.String("to")); err != nil { return err } - if _, _, err := net.SplitHostPort(c.Flags.String("addr")); err != nil { + if _, _, err := net.SplitHostPort(c.Args.String("addr")); err != nil { return err } - proxyListener, err := CurrentAgent.AddListener(c.Flags.String("addr"), netProto, c.Flags.String("to")) + proxyListener, err := CurrentAgent.AddListener(c.Args.String("addr"), netProto, c.Args.String("to")) if err != nil { return err } diff --git a/cmd/proxy/app/interfaces_linux.go b/cmd/proxy/app/interfaces_linux.go index 26371d5..5761f90 100644 --- a/cmd/proxy/app/interfaces_linux.go +++ b/cmd/proxy/app/interfaces_linux.go @@ -3,24 +3,30 @@ package app import ( "errors" "fmt" + "net" + "strconv" + "strings" + "github.com/AlecAivazis/survey/v2" "github.com/desertbit/grumble" "github.com/jedib0t/go-pretty/v6/table" "github.com/nicocha30/ligolo-ng/pkg/proxy/netstack/tun" "github.com/nicocha30/ligolo-ng/pkg/utils/codenames" "github.com/sirupsen/logrus" - "net" - "strings" ) func init() { + interfaceCmd := &grumble.Command{ + Name: "interface", + Help: "Manage interfaces", + Aliases: []string{"if"}, + } - App.AddCommand(&grumble.Command{ - Name: "interface_list", - Aliases: []string{"iflist", "route_list"}, - Help: "List available tun interfaces", - Usage: "interface_list", - HelpGroup: "Interfaces", + App.AddCommand(interfaceCmd) + + interfaceCmd.AddCommand(&grumble.Command{ + Name: "ls", + Help: "List available tuntap interfaces", Run: func(c *grumble.Context) error { t := table.NewWriter() t.SetStyle(table.StyleLight) @@ -31,183 +37,192 @@ func init() { if err != nil { return err } + for i, tuntap := range tuntaps { var prettyRoute []string for _, route := range tuntap.Routes() { prettyRoute = append(prettyRoute, route.Dst.String()) } + t.AppendRow(table.Row{i, tuntap.Name(), strings.Join(prettyRoute, ",")}) } + App.Println(t.Render()) return nil }, }) - App.AddCommand(&grumble.Command{ - Name: "interface_create", - Aliases: []string{"ifcreate"}, - Help: "Create a new tuntap interface", - Usage: "interface_create --name [ifname]", - HelpGroup: "Interfaces", - Flags: func(f *grumble.Flags) { - f.StringL("name", "", "the interface name to create (if empty, will use a generated name)") + interfaceCmd.AddCommand(&grumble.Command{ + Name: "create", + Help: "Create a new tuntap interface", + Args: func(a *grumble.Args) { + a.String("name", "Name of tuntap interface to create") }, Run: func(c *grumble.Context) error { - - ifName := c.Flags.String("name") + ifName := c.Args.String("name") if ifName == "" { - logrus.Info("Generating a random interface name...") - rng, err := codenames.DefaultRNG() - if err != nil { - return err - } - - ifName = codenames.Generate(rng) + return errors.New("please specify a name") } + logrus.Infof("Creating a new \"%s\" interface...", ifName) + if err := tun.CreateTUN(ifName); err != nil { return err } + logrus.Info("Interface created!") return nil }, }) - App.AddCommand(&grumble.Command{ - Name: "interface_delete", - Aliases: []string{"ifdel"}, - Help: "Delete a tuntap interface", - Usage: "interface_delete --name [ifname]", - HelpGroup: "Interfaces", - Flags: func(f *grumble.Flags) { - f.StringL("name", "", "the interface name to delete") + interfaceCmd.AddCommand(&grumble.Command{ + Name: "rm", + Help: "Remove a tuntap interface", + Args: func(a *grumble.Args) { + a.String("name", "Name or index of tuntap interface to remove") }, Run: func(c *grumble.Context) error { - - ifName := c.Flags.String("name") + ifName := c.Args.String("name") if ifName == "" { - return errors.New("please specify a valid interface using --name [interface]") + return errors.New("please specify a valid interface") } - stun, err := tun.GetTunByName(ifName) + + tuntaps, err := tun.GetTunTaps() if err != nil { return err } - if err := stun.Destroy(); err != nil { + + index, err := strconv.Atoi(ifName) + if err != nil { + // Fetch ifName by name + stun, err := tun.GetTunByName(ifName) + if err != nil { + return errors.New(fmt.Sprintf("No tap name with '%s'", ifName)) + } + + if err := stun.Destroy(); err != nil { + return err + } + + logrus.Info(fmt.Sprintf("Removed interface '%s'", ifName)) + return nil + } + + // Fetch ifName by index + if index >= 0 && index < len(tuntaps) { + stun := tuntaps[index] + if err := stun.Destroy(); err != nil { + return err + } + } else { + return errors.New(fmt.Sprintf("Invalid index '%s'", ifName)) + } + + logrus.Info(fmt.Sprintf("Removed interface '%s'", tuntaps[index].Name())) + return nil + }, + }) + + routeCmd := &grumble.Command{ + Name: "route", + Help: "Manage routes", + } + + App.AddCommand(routeCmd) + + routeCmd.AddCommand(&grumble.Command{ + Name: "ls", + Help: "List available routes", + Run: func(c *grumble.Context) error { + t := table.NewWriter() + t.SetStyle(table.StyleLight) + t.SetTitle("Available tuntaps") + t.AppendHeader(table.Row{"#", "Tap Name", "Dst routes"}) + + tuntaps, err := tun.GetTunTaps() + if err != nil { return err } - logrus.Info("Interface destroyed.") + + for i, tuntap := range tuntaps { + var prettyRoute []string + for _, route := range tuntap.Routes() { + prettyRoute = append(prettyRoute, route.Dst.String()) + } + + t.AppendRow(table.Row{i, tuntap.Name(), strings.Join(prettyRoute, ",")}) + } + + App.Println(t.Render()) return nil }, }) - App.AddCommand(&grumble.Command{ - Name: "route_add", - Aliases: []string{"add_route", "interface_route_add", "interface_add_route"}, - Help: "Add a route to a network interface", - Usage: "route_add --name [ifname] --route [cidr]", - HelpGroup: "Interfaces", - Flags: func(f *grumble.Flags) { - f.StringL("name", "", "the interface name") - f.StringL("route", "", "the network cidr") + routeCmd.AddCommand(&grumble.Command{ + Name: "add", + Help: "Add a route to a network interface", + Usage: "route add [ifname] [cidr]", + Args: func(a *grumble.Args) { + a.String("name", "Name of interface") + a.String("cidr", "The network CIDR") }, Run: func(c *grumble.Context) error { + ifName := c.Args.String("name") + cidr := c.Args.String("cidr") - ifName := c.Flags.String("name") if ifName == "" { - return errors.New("please specify an interface") + return errors.New("please specify a name") } - routeCidr := c.Flags.String("route") - if routeCidr == "" { - return errors.New("please specify a route") + + if cidr == "" { + return errors.New("please specify a CIDR") } stun, err := tun.GetTunByName(ifName) if err != nil { return err } - if err := stun.AddRoute(routeCidr); err != nil { + + if err := stun.AddRoute(cidr); err != nil { return err } - logrus.Info("Route created.") + + logrus.Info("Route created") return nil }, }) - App.AddCommand(&grumble.Command{ - Name: "route_del", - Aliases: []string{"del_route", "interface_route_del", "interface_del_route"}, - Help: "Delete a route", - Usage: "route_del --name [ifname] --route [cidr]", - HelpGroup: "Interfaces", - Flags: func(f *grumble.Flags) { - f.StringL("name", "", "the interface name") - f.StringL("route", "", "the network cidr") + routeCmd.AddCommand(&grumble.Command{ + Name: "rm", + Help: "Remove a route", + Usage: "route rm [ifname] [cidr]", + Args: func(a *grumble.Args) { + a.String("name", "Name of interface") + a.String("cidr", "The network CIDR") }, Run: func(c *grumble.Context) error { - - routeCidr := c.Flags.String("route") - if routeCidr == "" { - tuntaps, err := tun.GetTunTaps() - if err != nil { - return err - } - var possibleRoutes []string - for _, tuntap := range tuntaps { - for _, route := range tuntap.Routes() { - possibleRoutes = append(possibleRoutes, fmt.Sprintf("%s (%s)", route.Dst.String(), tuntap.Name())) - } - } - if len(possibleRoutes) == 0 { - return errors.New("no routes available") - } - - routePrompt := &survey.MultiSelect{ - Message: "Select routes to delete:", - Options: possibleRoutes, - } - var selectedRoutes []string - if err := survey.AskOne(routePrompt, &selectedRoutes); err != nil { - return err - } - for _, selectedRoute := range selectedRoutes { - route := strings.Split(selectedRoute, " ")[0] - ifByRoute, err := tun.GetTunByRoute(route) - if err != nil { - logrus.Errorf("Failed to get tuntap by route \"%s\": %v", route, err) - } - if err := ifByRoute.DelRoute(route); err != nil { - logrus.Errorf("Failed to delete route \"%s\": %v", route, err) - } - } - return nil - } - ifName := c.Flags.String("name") - if ifName == "" { - // Attempt to search for route. - ifByRoute, err := tun.GetTunByRoute(routeCidr) - if err != nil { - return err - } - ifName = ifByRoute.Name() - } + ifName := c.Args.String("name") + routeCidr := c.Args.String("cidr") stun, err := tun.GetTunByName(ifName) if err != nil { return err } + if err := stun.DelRoute(routeCidr); err != nil { return err } + logrus.Info("Route deleted.") return nil + }, }) App.AddCommand(&grumble.Command{ - Name: "autoroute", - Help: "Setup everything for you (interfaces, routes & tunnel)", - HelpGroup: "Tunneling", - Usage: "autoroute", + Name: "autoroute", + Help: "Setup everything for you (interfaces, routes & tunnel)", + Usage: "autoroute", Flags: func(f *grumble.Flags) { f.BoolL("with-ipv6", false, "Include IPv6 addresses") }, @@ -307,5 +322,4 @@ func init() { return nil }, }) - } diff --git a/cmd/proxy/main.go b/cmd/proxy/main.go index ea33189..835309d 100644 --- a/cmd/proxy/main.go +++ b/cmd/proxy/main.go @@ -21,7 +21,7 @@ var ( func main() { var allowDomains []string - var verboseFlag = flag.Bool("v", false, "enable verbose mode") + var verboseFlag = flag.Bool("verbose", false, "enable verbose mode") var listenInterface = flag.String("laddr", "0.0.0.0:11601", "listening address (prefix with https:// for websocket)") var enableAutocert = flag.Bool("autocert", false, "automatically request letsencrypt certificates, requires port 80 to be accessible") var enableSelfcert = flag.Bool("selfcert", false, "dynamically generate self-signed certificates") diff --git a/go.mod b/go.mod index 6e84811..4a19cf2 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.20 require ( github.com/AlecAivazis/survey/v2 v2.3.5 - github.com/desertbit/grumble v1.1.3 + github.com/desertbit/grumble v0.0.0-20240725064225-cb728c9a422d github.com/go-ping/ping v1.1.0 github.com/hashicorp/yamux v0.1.0 github.com/jedib0t/go-pretty/v6 v6.3.5 @@ -29,13 +29,13 @@ require ( github.com/desertbit/columnize v2.1.0+incompatible // indirect github.com/desertbit/go-shlex v0.1.1 // indirect github.com/desertbit/readline v1.5.1 // indirect - github.com/fatih/color v1.13.0 // indirect + github.com/fatih/color v1.14.1 // indirect github.com/google/btree v1.1.2 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect github.com/rivo/uniseg v0.2.0 // indirect diff --git a/go.sum b/go.sum index 414db4a..fca5b29 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,4 @@ +github.com/AlecAivazis/survey/v2 v2.0.5/go.mod h1:WYBhg6f0y/fNYUuesWQc0PKbJcEliGcYHB9sNT3Bg74= github.com/AlecAivazis/survey/v2 v2.3.5 h1:A8cYupsAZkjaUmhtTYv3sSqc7LO5mp1XDfqe5E/9wRQ= github.com/AlecAivazis/survey/v2 v2.3.5/go.mod h1:4AuI9b7RjAR+G7v9+C4YSlX/YL3K3cWNXgWXOhllqvI= github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc= @@ -14,20 +15,18 @@ github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/desertbit/closer/v3 v3.1.2/go.mod h1:AAC4KRd8DC40nwvV967J/kDFhujMEiuwIKQfN0IDxXw= github.com/desertbit/closer/v3 v3.1.3 h1:WUxD92dKrXuqSgbiAsqN6MPdnli2xIjkn6WpyC5AzXE= github.com/desertbit/closer/v3 v3.1.3/go.mod h1:AAC4KRd8DC40nwvV967J/kDFhujMEiuwIKQfN0IDxXw= github.com/desertbit/columnize v2.1.0+incompatible h1:h55rYmdrWoTj7w9aAnCkxzM3C2Eb8zuFa2W41t0o5j0= github.com/desertbit/columnize v2.1.0+incompatible/go.mod h1:5kPrzQwKbQ8E5D28nvTVPqIBJyj+8jvJzwt6HXZvXgI= github.com/desertbit/go-shlex v0.1.1 h1:c65HnbgX1QyC6kPL1dMzUpZ4puNUE6ai/eVucWNLNsk= github.com/desertbit/go-shlex v0.1.1/go.mod h1:Qbb+mJNud5AypgHZ81EL8syOGaWlwvAOTqS7XmWI4pQ= -github.com/desertbit/grumble v1.1.3 h1:gbdgVGWsHmNraJ7Gn6Q4TiUEIHU/UHfbc1KUSbBlgYU= -github.com/desertbit/grumble v1.1.3/go.mod h1:r7j3ShNy5EmOsegRD2DzTutIaGiLiA3M5yBTXXeLwcs= +github.com/desertbit/grumble v0.0.0-20240725064225-cb728c9a422d h1:QDZ8uEoMPuqEOkVg/IUhPoARZIt9CeDKkP4f91tp40A= +github.com/desertbit/grumble v0.0.0-20240725064225-cb728c9a422d/go.mod h1:XWM2YeqEbaNBGANx2R1F6HZISSdSn13HyiDbQvUUevI= github.com/desertbit/readline v1.5.1 h1:/wOIZkWYl1s+IvJm/5bOknfUgs6MhS9svRNZpFM53Os= github.com/desertbit/readline v1.5.1/go.mod h1:pHQgTsCFs9Cpfh5mlSUFi9Xa5kkL4d8L1Jo4UVWzPw0= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= +github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/go-ping/ping v1.1.0 h1:3MCGhVX4fyEUuhsfwPrsEdQw6xspHkv5zHsiSoDFZYw= @@ -41,7 +40,6 @@ github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brv github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/yamux v0.1.0 h1:DzDIF6Sd7GD2sX0kDFpHAsJMY4L+OfTvtuaQsOYXxzk= @@ -54,19 +52,15 @@ github.com/jedib0t/go-pretty/v6 v6.3.5 h1:B6RuZT3Gz0NvFwADctw+gZn3cSA+jIHykXyd72 github.com/jedib0t/go-pretty/v6 v6.3.5/go.mod h1:MgmISkTWDSFu0xOqiZ0mKNntMQ2mDgOcwOkwBEkMDJI= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.4/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= @@ -99,52 +93,79 @@ github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IU github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= -golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180606202747-9527bec2660b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190530182044-ad28b68e88f1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.zx2c4.com/wintun v0.0.0-20211104114900-415007cec224 h1:Ug9qvr1myri/zFN6xL17LSCBGFDnphBBhzmILHsM5TY= golang.zx2c4.com/wintun v0.0.0-20211104114900-415007cec224/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI= golang.zx2c4.com/wireguard v0.0.0-20220703234212-c31a7b1ab478 h1:vDy//hdR+GnROE3OdYbQKt9rdtNdHkDtONvpRwmls/0= golang.zx2c4.com/wireguard v0.0.0-20220703234212-c31a7b1ab478/go.mod h1:bVQfyl2sCM/QIIGHpWbFGfHPuDvqnCNkT6MQLTCjO/U= -gopkg.in/AlecAivazis/survey.v1 v1.8.5/go.mod h1:iBNOmqKz/NUbZx3bA+4hAGLRC7fSK7tgtVDT4tB22XA= +gopkg.in/AlecAivazis/survey.v1 v1.8.8/go.mod h1:CaHjv79TCgAvXMSFJSVgonHXYWxnhzI3eoHtnX5UgUo= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= From f84c1f5e8df4686a219b717863619eb81f9893f5 Mon Sep 17 00:00:00 2001 From: Siddharth Dushantha Date: Thu, 12 Dec 2024 22:16:38 +0100 Subject: [PATCH 2/2] added -no-banner option --- cmd/proxy/main.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/cmd/proxy/main.go b/cmd/proxy/main.go index 835309d..8df3040 100644 --- a/cmd/proxy/main.go +++ b/cmd/proxy/main.go @@ -29,6 +29,7 @@ func main() { var keyFile = flag.String("keyfile", "certs/key.pem", "TLS server key") var domainWhitelist = flag.String("allow-domains", "", "autocert authorised domains, if empty, allow all domains, multiple domains should be comma-separated.") var selfcertDomain = flag.String("selfcert-domain", "ligolo", "The selfcert TLS domain to use") + var noBanner = flag.Bool("no-banner", false, "Hide the banner") var versionFlag = flag.Bool("version", false, "show the current version") flag.Usage = func() { @@ -56,16 +57,18 @@ func main() { allowDomains = strings.Split(*domainWhitelist, ",") } - app.App.SetPrintASCIILogo(func(a *grumble.App) { - a.Println(" __ _ __ ") - a.Println(" / / (_)___ _____ / /___ ____ ____ _") - a.Println(" / / / / __ `/ __ \\/ / __ \\______/ __ \\/ __ `/") - a.Println(" / /___/ / /_/ / /_/ / / /_/ /_____/ / / / /_/ / ") - a.Println("/_____/_/\\__, /\\____/_/\\____/ /_/ /_/\\__, / ") - a.Println(" /____/ /____/ ") - a.Println("\n Made in France ♥ by @Nicocha30!") - a.Printf(" Version: %s\n\n", version) - }) + if !*noBanner { + app.App.SetPrintASCIILogo(func(a *grumble.App) { + a.Println(" __ _ __ ") + a.Println(" / / (_)___ _____ / /___ ____ ____ _") + a.Println(" / / / / __ `/ __ \\/ / __ \\______/ __ \\/ __ `/") + a.Println(" / /___/ / /_/ / /_/ / / /_/ /_____/ / / / /_/ / ") + a.Println("/_____/_/\\__, /\\____/_/\\____/ /_/ /_/\\__, / ") + a.Println(" /____/ /____/ ") + a.Println("\n Made in France ♥ by @Nicocha30!") + a.Printf(" Version: %s\n\n", version) + }) + } if *enableSelfcert && *selfcertDomain == "ligolo" { logrus.Warning("Using default selfcert domain 'ligolo', beware of CTI, SOC and IoC!")