new: ticker now broadcasts a tick event

This commit is contained in:
Simone Margaritelli 2021-04-07 17:03:47 +02:00
parent 31b06638d8
commit bfe307ffe6
5 changed files with 45 additions and 2 deletions

View file

@ -35,4 +35,6 @@ func init() {
plugin.Defines["httpRequest"] = httpRequest
plugin.Defines["http"] = httpPackage{}
plugin.Defines["random"] = randomPackage{}
}

26
js/random.go Normal file
View file

@ -0,0 +1,26 @@
package js
import (
"math/rand"
"net"
"github.com/bettercap/bettercap/network"
)
type randomPackage struct {
}
func (c randomPackage) String(size int, charset string) string {
runes := []rune(charset)
nrunes := len(runes)
buf := make([]rune, size)
for i := range buf {
buf[i] = runes[rand.Intn(nrunes)]
}
return string(buf)
}
func (c randomPackage) Mac() string {
hw := make([]byte, 6)
rand.Read(hw)
return network.NormalizeMac(net.HardwareAddr(hw).String())
}

View file

@ -72,6 +72,8 @@ func (mod *Ticker) Configure() error {
return nil
}
type TickEvent struct {}
func (mod *Ticker) Start() error {
if err := mod.Configure(); err != nil {
return err
@ -85,6 +87,8 @@ func (mod *Ticker) Start() error {
break
}
session.I.Events.Add("tick", TickEvent{})
for _, cmd := range mod.Commands {
if err := mod.Session.Run(cmd); err != nil {
mod.Error("%s", err)

View file

@ -105,7 +105,7 @@ func (mod *WiFiModule) startProbing(staMac net.HardwareAddr, ssid string) error
}
}
mod.Info("sent probe frames")
mod.Debug("sent probe frames")
return nil
}

View file

@ -1,6 +1,8 @@
package session
import (
"encoding/json"
"github.com/bettercap/bettercap/js"
"github.com/evilsocket/islazy/log"
"github.com/robertkrimen/otto"
@ -56,9 +58,18 @@ func jsOnEventFunc(call otto.FunctionCall) otto.Value {
for event := range listener {
if expr == "" || event.Tag == expr {
// some objects don't do well with js, so convert them to a generic map
// before passing them to the callback
var opaque interface{}
if raw, err := json.Marshal(event); err != nil {
I.Events.Log(log.ERROR, "error serializing event %s: %v", event.Tag, err)
} else if err = json.Unmarshal(raw, &opaque); err != nil {
I.Events.Log(log.ERROR, "error serializing event %s: %v", event.Tag, err)
}
// lock vm
I.script.Lock()
if _, err := cb.Call(otto.NullValue(), event); err != nil {
if _, err := cb.Call(otto.NullValue(), opaque); err != nil {
I.Events.Log(log.ERROR, "error dispatching event %s: %v", event.Tag, err)
}
I.script.Unlock()