fix: allow wifi modules to use network aliases for clients never seen on lan

This commit is contained in:
evilsocket 2019-03-17 14:01:30 +01:00
commit 255102c250
No known key found for this signature in database
GPG key ID: 1564D7F30393A456
5 changed files with 15 additions and 10 deletions

View file

@ -124,7 +124,7 @@ func (mod *WiFiModule) discoverClients(radiotap *layers.RadioTap, dot11 *layers.
freq := int(radiotap.ChannelFrequency) freq := int(radiotap.ChannelFrequency)
rssi := radiotap.DBMAntennaSignal rssi := radiotap.DBMAntennaSignal
if station, isNew := ap.AddClientIfNew(bssid, freq, rssi); isNew { if station, isNew := ap.AddClientIfNew(bssid, freq, rssi, mod.Session.Lan.Aliases()); isNew {
mod.Session.Events.Add("wifi.client.new", ClientEvent{ mod.Session.Events.Add("wifi.client.new", ClientEvent{
AP: ap, AP: ap,
Client: station, Client: station,

View file

@ -36,7 +36,7 @@ func (mod *WiFiModule) discoverHandshakes(radiotap *layers.RadioTap, dot11 *laye
staIsUs := bytes.Equal(staMac, mod.iface.HW) staIsUs := bytes.Equal(staMac, mod.iface.HW)
station, found := ap.Get(staMac.String()) station, found := ap.Get(staMac.String())
if !found { if !found {
station, _ = ap.AddClientIfNew(staMac.String(), ap.Frequency, ap.RSSI) station, _ = ap.AddClientIfNew(staMac.String(), ap.Frequency, ap.RSSI, mod.Session.Lan.Aliases())
} }
rawPMKID := []byte(nil) rawPMKID := []byte(nil)

View file

@ -68,8 +68,8 @@ func (lan *LAN) SetAliasFor(mac, alias string) bool {
defer lan.Unlock() defer lan.Unlock()
mac = NormalizeMac(mac) mac = NormalizeMac(mac)
lan.aliases.Set(mac, alias)
if e, found := lan.hosts[mac]; found { if e, found := lan.hosts[mac]; found {
lan.aliases.Set(mac, alias)
e.Alias = alias e.Alias = alias
return true return true
} }

View file

@ -4,6 +4,8 @@ import (
"encoding/json" "encoding/json"
"sync" "sync"
"time" "time"
"github.com/evilsocket/islazy/data"
) )
type AccessPoint struct { type AccessPoint struct {
@ -65,7 +67,7 @@ func (ap *AccessPoint) RemoveClient(mac string) {
} }
} }
func (ap *AccessPoint) AddClientIfNew(bssid string, frequency int, rssi int8) (*Station, bool) { func (ap *AccessPoint) AddClientIfNew(bssid string, frequency int, rssi int8, aliases *data.UnsortedKV) (*Station, bool) {
ap.Lock() ap.Lock()
defer ap.Unlock() defer ap.Unlock()
@ -77,10 +79,17 @@ func (ap *AccessPoint) AddClientIfNew(bssid string, frequency int, rssi int8) (*
s.RSSI = rssi s.RSSI = rssi
s.LastSeen = time.Now() s.LastSeen = time.Now()
if aliases != nil {
s.Alias = aliases.GetOr(bssid, "")
}
return s, false return s, false
} }
s := NewStation("", bssid, frequency, rssi) s := NewStation("", bssid, frequency, rssi)
if aliases != nil {
s.Alias = aliases.GetOr(bssid, "")
}
ap.clients[bssid] = s ap.clients[bssid] = s
return s, true return s, true

View file

@ -274,12 +274,8 @@ func (s *Session) shHandler(args []string, sess *Session) error {
func (s *Session) aliasHandler(args []string, sess *Session) error { func (s *Session) aliasHandler(args []string, sess *Session) error {
mac := args[0] mac := args[0]
alias := str.Trim(args[1]) alias := str.Trim(args[1])
s.Lan.SetAliasFor(mac, alias)
if s.Lan.SetAliasFor(mac, alias) { return nil
return nil
} else {
return fmt.Errorf("Could not find endpoint %s", mac)
}
} }
func (s *Session) addHandler(h CommandHandler, c *readline.PrefixCompleter) { func (s *Session) addHandler(h CommandHandler, c *readline.PrefixCompleter) {