Fix on concurrent access to the Stations map by UpdateStats method

This commit is contained in:
Matrix86 2018-02-19 20:53:44 +01:00
commit 420ab9e26c
2 changed files with 12 additions and 3 deletions

View file

@ -345,19 +345,19 @@ func (w *WiFiRecon) updateStats(dot11 *layers.Dot11, packet gopacket.Packet) {
bytes := uint64(len(packet.Data())) bytes := uint64(len(packet.Data()))
dst := dot11.Address1.String() dst := dot11.Address1.String()
if station, found := w.Session.WiFi.Stations[dst]; found == true { if station, found := w.Session.WiFi.Get(dst); found == true {
station.Received += bytes station.Received += bytes
} }
src := dot11.Address2.String() src := dot11.Address2.String()
if station, found := w.Session.WiFi.Stations[src]; found == true { if station, found := w.Session.WiFi.Get(src); found == true {
station.Sent += bytes station.Sent += bytes
} }
} }
if ok, enc := packets.Dot11ParseEncryption(packet, dot11); ok == true { if ok, enc := packets.Dot11ParseEncryption(packet, dot11); ok == true {
bssid := dot11.Address3.String() bssid := dot11.Address3.String()
if station, found := w.Session.WiFi.Stations[bssid]; found == true { if station, found := w.Session.WiFi.Get(bssid); found == true {
station.Encryption = strings.Join(enc, ", ") station.Encryption = strings.Join(enc, ", ")
} }
} }

View file

@ -70,6 +70,15 @@ func (w *WiFi) AddIfNew(ssid, mac string, isAp bool, channel int, rssi int8) *St
return nil return nil
} }
func (w *WiFi) Get(mac string) (*Station, bool) {
w.Lock()
defer w.Unlock()
mac = NormalizeMac(mac)
station, found := w.Stations[mac]
return station, found
}
func (w *WiFi) Clear() error { func (w *WiFi) Clear() error {
w.Stations = make(map[string]*Station) w.Stations = make(map[string]*Station)
return nil return nil