diff --git a/Makefile b/Makefile index 43ccfd3b..2beb3c9d 100644 --- a/Makefile +++ b/Makefile @@ -45,6 +45,7 @@ deps: @go get github.com/rogpeppe/go-charset/charset @go get github.com/chzyer/readline @go get github.com/robertkrimen/otto + @go get github.com/dustin/go-humanize clean: @rm -rf $(TARGET) net/oui_compiled.go diff --git a/caplets/test-prompt-stats.cap b/caplets/test-prompt-stats.cap new file mode 100644 index 00000000..1b6a8486 --- /dev/null +++ b/caplets/test-prompt-stats.cap @@ -0,0 +1 @@ +set $ {by}{fb}SENT:{fw}{net.sent.human} {fb}RECV:{fw}{net.received.human} {fb}PKTS:{fw}{net.packets} {r}ERR:{net.errors}{reset} {bold}ยป {reset} diff --git a/modules/events_stream.go b/modules/events_stream.go index 18b65fc8..792ede9e 100644 --- a/modules/events_stream.go +++ b/modules/events_stream.go @@ -91,7 +91,7 @@ func (s *EventsStream) Start() error { fmt.Printf("[%s] [%s] %v\n", tm, core.Green(e.Tag), e.Data) } - s.Session.Input.Refresh() + s.Session.Refresh() } break diff --git a/modules/http_proxy_script_builtins.go b/modules/http_proxy_script_builtins.go index 3b1f5ea5..a39d7a24 100644 --- a/modules/http_proxy_script_builtins.go +++ b/modules/http_proxy_script_builtins.go @@ -32,7 +32,7 @@ func (s *ProxyScript) defineBuiltins() error { fmt.Printf("%s", v.String()) } fmt.Println() - s.sess.Input.Refresh() + s.sess.Refresh() return otto.Value{} }) diff --git a/modules/net_sniff_event.go b/modules/net_sniff_event.go index 2b37276d..8000f17d 100644 --- a/modules/net_sniff_event.go +++ b/modules/net_sniff_event.go @@ -32,5 +32,5 @@ func NewSnifferEvent(t time.Time, proto string, src string, dst string, data Sni func (e SnifferEvent) Push() { fmt.Printf("%s\n", e.Message) session.I.Events.Add("net.sniff.leak."+e.Protocol, e.Data) - session.I.Input.Refresh() + session.I.Refresh() } diff --git a/session/prompt.go b/session/prompt.go index e32378ea..a5e33bd0 100644 --- a/session/prompt.go +++ b/session/prompt.go @@ -1,10 +1,13 @@ package session import ( + "fmt" "regexp" "strings" "github.com/evilsocket/bettercap-ng/core" + + "github.com/dustin/go-humanize" ) const ( @@ -33,6 +36,24 @@ var PromptCallbacks = map[string]func(s *Session) string{ "{cidr}": func(s *Session) string { return s.Interface.CIDR() }, + "{net.sent}": func(s *Session) string { + return fmt.Sprintf("%d", s.Queue.Sent) + }, + "{net.sent.human}": func(s *Session) string { + return humanize.Bytes(s.Queue.Sent) + }, + "{net.received}": func(s *Session) string { + return fmt.Sprintf("%d", s.Queue.Received) + }, + "{net.received.human}": func(s *Session) string { + return humanize.Bytes(s.Queue.Received) + }, + "{net.packets}": func(s *Session) string { + return fmt.Sprintf("%d", s.Queue.PktReceived) + }, + "{net.errors}": func(s *Session) string { + return fmt.Sprintf("%d", s.Queue.Errors) + }, } var envRe = regexp.MustCompile("{env\\.(.+)}") diff --git a/session/session.go b/session/session.go index 53c271af..c8183d9b 100644 --- a/session/session.go +++ b/session/session.go @@ -253,9 +253,13 @@ func (s *Session) Start() error { return nil } -func (s *Session) ReadLine() (string, error) { +func (s *Session) Refresh() { s.Input.SetPrompt(s.Prompt.Render(s)) s.Input.Refresh() +} + +func (s *Session) ReadLine() (string, error) { + s.Refresh() return s.Input.Readline() }