mirror of
https://github.com/bettercap/bettercap
synced 2025-08-14 18:57:17 -07:00
new: aliases are now centralized and can be used for any type of device (closes #504)
This commit is contained in:
parent
96853e663b
commit
7e7f2ef645
11 changed files with 115 additions and 51 deletions
|
@ -20,6 +20,7 @@ import (
|
|||
"github.com/bettercap/bettercap/network"
|
||||
"github.com/bettercap/bettercap/packets"
|
||||
|
||||
"github.com/evilsocket/islazy/data"
|
||||
"github.com/evilsocket/islazy/fs"
|
||||
"github.com/evilsocket/islazy/log"
|
||||
"github.com/evilsocket/islazy/ops"
|
||||
|
@ -54,6 +55,10 @@ type GPS struct {
|
|||
Separation float64 // Geoidal separation
|
||||
}
|
||||
|
||||
const AliasesFile = "~/bettercap.aliases"
|
||||
|
||||
var aliasesFileName, _ = fs.Expand(AliasesFile)
|
||||
|
||||
type Session struct {
|
||||
Options core.Options
|
||||
Interface *network.Endpoint
|
||||
|
@ -68,6 +73,7 @@ type Session struct {
|
|||
Active bool
|
||||
GPS GPS
|
||||
Modules ModuleList
|
||||
Aliases *data.UnsortedKV
|
||||
|
||||
Input *readline.Instance
|
||||
Prompt Prompt
|
||||
|
@ -115,6 +121,10 @@ func New() (*Session, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
if s.Aliases, err = data.NewUnsortedKV(aliasesFileName, data.FlushOnEdit); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
s.Events = NewEventPool(*s.Options.Debug, *s.Options.Silent)
|
||||
|
||||
s.registerCoreHandlers()
|
||||
|
@ -235,25 +245,25 @@ func (s *Session) Start() error {
|
|||
|
||||
s.Firewall = firewall.Make(s.Interface)
|
||||
|
||||
s.HID = network.NewHID(func(dev *network.HIDDevice) {
|
||||
s.HID = network.NewHID(s.Aliases, func(dev *network.HIDDevice) {
|
||||
s.Events.Add("hid.device.new", dev)
|
||||
}, func(dev *network.HIDDevice) {
|
||||
s.Events.Add("hid.device.lost", dev)
|
||||
})
|
||||
|
||||
s.BLE = network.NewBLE(func(dev *network.BLEDevice) {
|
||||
s.BLE = network.NewBLE(s.Aliases, func(dev *network.BLEDevice) {
|
||||
s.Events.Add("ble.device.new", dev)
|
||||
}, func(dev *network.BLEDevice) {
|
||||
s.Events.Add("ble.device.lost", dev)
|
||||
})
|
||||
|
||||
s.WiFi = network.NewWiFi(s.Interface, func(ap *network.AccessPoint) {
|
||||
s.WiFi = network.NewWiFi(s.Interface, s.Aliases, func(ap *network.AccessPoint) {
|
||||
s.Events.Add("wifi.ap.new", ap)
|
||||
}, func(ap *network.AccessPoint) {
|
||||
s.Events.Add("wifi.ap.lost", ap)
|
||||
})
|
||||
|
||||
s.Lan = network.NewLAN(s.Interface, s.Gateway, func(e *network.Endpoint) {
|
||||
s.Lan = network.NewLAN(s.Interface, s.Gateway, s.Aliases, func(e *network.Endpoint) {
|
||||
s.Events.Add("endpoint.new", e)
|
||||
}, func(e *network.Endpoint) {
|
||||
s.Events.Add("endpoint.lost", e)
|
||||
|
|
|
@ -271,13 +271,55 @@ func (s *Session) shHandler(args []string, sess *Session) error {
|
|||
return err
|
||||
}
|
||||
|
||||
func normalizeMac(mac string) string {
|
||||
var parts []string
|
||||
if strings.ContainsRune(mac, '-') {
|
||||
parts = strings.Split(mac, "-")
|
||||
} else {
|
||||
parts = strings.Split(mac, ":")
|
||||
}
|
||||
|
||||
for i, p := range parts {
|
||||
if len(p) < 2 {
|
||||
parts[i] = "0" + p
|
||||
}
|
||||
}
|
||||
return strings.ToLower(strings.Join(parts, ":"))
|
||||
}
|
||||
|
||||
func (s *Session) propagateAlias(mac, alias string) {
|
||||
mac = normalizeMac(mac)
|
||||
|
||||
s.Aliases.Set(mac, alias)
|
||||
|
||||
if dev, found := s.BLE.Get(mac); found {
|
||||
dev.Alias = alias
|
||||
}
|
||||
|
||||
if dev, found := s.HID.Get(mac); found {
|
||||
dev.Alias = alias
|
||||
}
|
||||
|
||||
if ap, found := s.WiFi.Get(mac); found {
|
||||
ap.Alias = alias
|
||||
}
|
||||
|
||||
if sta, found := s.WiFi.GetClient(mac); found {
|
||||
sta.Alias = alias
|
||||
}
|
||||
|
||||
if host, found := s.Lan.Get(mac); found {
|
||||
host.Alias = alias
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Session) aliasHandler(args []string, sess *Session) error {
|
||||
mac := args[0]
|
||||
alias := str.Trim(args[1])
|
||||
if alias == "\"\"" || alias == "''" {
|
||||
alias = ""
|
||||
}
|
||||
s.Lan.SetAliasFor(mac, alias)
|
||||
s.propagateAlias(mac, alias)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -383,7 +425,7 @@ func (s *Session) registerCoreHandlers() {
|
|||
readline.PcItem("!"))
|
||||
|
||||
s.addHandler(NewCommandHandler("alias MAC NAME",
|
||||
"^alias\\s+([a-fA-F0-9:]{17})\\s*(.*)",
|
||||
"^alias\\s+([a-fA-F0-9:]{14,17})\\s*(.*)",
|
||||
"Assign an alias to a given endpoint given its MAC address.",
|
||||
s.aliasHandler),
|
||||
readline.PcItem("alias", readline.PcItemDynamic(func(prefix string) []string {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue