From 9390a580fdc8569d528eae162038f794dda40e70 Mon Sep 17 00:00:00 2001 From: evilsocket Date: Sat, 17 Feb 2018 05:27:13 +0100 Subject: [PATCH] misc: small fix or general refactoring i did not bother commenting --- modules/wifi_recon.go | 38 ++++++------- modules/wifi_station.go | 9 ++-- modules/wifi_stats.go | 117 ---------------------------------------- 3 files changed, 21 insertions(+), 143 deletions(-) delete mode 100644 modules/wifi_stats.go diff --git a/modules/wifi_recon.go b/modules/wifi_recon.go index 74512f24..033fa7aa 100644 --- a/modules/wifi_recon.go +++ b/modules/wifi_recon.go @@ -7,6 +7,7 @@ import ( "os" "sort" "strconv" + "strings" "time" "github.com/evilsocket/bettercap-ng/core" @@ -27,7 +28,6 @@ type WiFiRecon struct { session.SessionModule wifi *WiFi - stats *WiFiStats handle *pcap.Handle channel int client net.HardwareAddr @@ -37,7 +37,6 @@ type WiFiRecon struct { func NewWiFiRecon(s *session.Session) *WiFiRecon { w := &WiFiRecon{ SessionModule: session.NewSessionModule("wifi.recon", s), - stats: NewWiFiStats(), channel: 0, client: make([]byte, 0), accessPoint: make([]byte, 0), @@ -143,23 +142,12 @@ func (w *WiFiRecon) getRow(station *WiFiStation) []string { } ssid := station.ESSID() - - encryption := w.stats.EncryptionOf(station.HW) + encryption := station.Encryption if encryption == "OPEN" { encryption = core.Green(encryption) } - - sent := "" - bytes := w.stats.SentFrom(station.HW) - if bytes > 0 { - sent = humanize.Bytes(bytes) - } - - recvd := "" - bytes = w.stats.SentTo(station.HW) - if bytes > 0 { - recvd = humanize.Bytes(bytes) - } + sent := humanize.Bytes(station.Sent) + recvd := humanize.Bytes(station.Received) row := []string{ fmt.Sprintf("%d dBm", station.RSSI), @@ -374,17 +362,21 @@ func (w *WiFiRecon) updateStats(dot11 *layers.Dot11, packet gopacket.Packet) { if dot11.Type.MainType() == layers.Dot11TypeData { bytes := uint64(len(packet.Data())) - dst := dot11.Address1 - src := dot11.Address2 + dst := dot11.Address1.String() + if station, found := w.wifi.Stations[dst]; found == true { + station.Received += bytes + } - w.stats.CollectReceived(dst, bytes) - w.stats.CollectSent(src, bytes) + src := dot11.Address2.String() + if station, found := w.wifi.Stations[src]; found == true { + station.Sent += bytes + } } if ok, enc := packets.Dot11ParseEncryption(packet, dot11); ok == true { - w.stats.ResetEncryption(dot11.Address3) - for _, e := range enc { - w.stats.CollectEncryption(dot11.Address3, e) + bssid := dot11.Address3.String() + if station, found := w.wifi.Stations[bssid]; found == true { + station.Encryption = strings.Join(enc, ", ") } } } diff --git a/modules/wifi_station.go b/modules/wifi_station.go index ab6252bd..ef791000 100644 --- a/modules/wifi_station.go +++ b/modules/wifi_station.go @@ -6,9 +6,12 @@ import ( type WiFiStation struct { *network.Endpoint - IsAP bool - Channel int - RSSI int8 + IsAP bool + Channel int + RSSI int8 + Sent uint64 + Received uint64 + Encryption string } func NewWiFiStation(essid, bssid string, isAp bool, channel int, rssi int8) *WiFiStation { diff --git a/modules/wifi_stats.go b/modules/wifi_stats.go deleted file mode 100644 index 9b666774..00000000 --- a/modules/wifi_stats.go +++ /dev/null @@ -1,117 +0,0 @@ -package modules - -import ( - "net" - "strings" - "sync" -) - -type WiFiStationStats struct { - Sent uint64 - Received uint64 - Encryption map[string]bool -} - -func NewWiFiStationStats(sent uint64, recvd uint64) *WiFiStationStats { - return &WiFiStationStats{ - Sent: sent, - Received: recvd, - Encryption: make(map[string]bool), - } -} - -type WiFiStats struct { - sync.Mutex - stats map[string]*WiFiStationStats -} - -func NewWiFiStats() *WiFiStats { - return &WiFiStats{ - stats: make(map[string]*WiFiStationStats), - } -} - -func (s *WiFiStats) CollectSent(station net.HardwareAddr, bytes uint64) { - s.Lock() - defer s.Unlock() - - bssid := station.String() - if sstats, found := s.stats[bssid]; found == true { - sstats.Sent += bytes - } else { - s.stats[bssid] = NewWiFiStationStats(bytes, 0) - } -} - -func (s *WiFiStats) CollectReceived(station net.HardwareAddr, bytes uint64) { - s.Lock() - defer s.Unlock() - - bssid := station.String() - if sstats, found := s.stats[bssid]; found == true { - sstats.Received += bytes - } else { - s.stats[bssid] = NewWiFiStationStats(0, bytes) - } -} - -func (s *WiFiStats) ResetEncryption(station net.HardwareAddr) { - s.Lock() - defer s.Unlock() - - bssid := station.String() - if sstats, found := s.stats[bssid]; found == true { - sstats.Encryption = make(map[string]bool) - } -} - -func (s *WiFiStats) CollectEncryption(station net.HardwareAddr, enc string) { - s.Lock() - defer s.Unlock() - - bssid := station.String() - if sstats, found := s.stats[bssid]; found == true { - sstats.Encryption[enc] = true - } else { - stats := NewWiFiStationStats(0, 0) - stats.Encryption[enc] = true - s.stats[bssid] = stats - } -} - -func (s *WiFiStats) SentFrom(station net.HardwareAddr) uint64 { - s.Lock() - defer s.Unlock() - - bssid := station.String() - if sstats, found := s.stats[bssid]; found == true { - return sstats.Sent - } - return 0 -} - -func (s *WiFiStats) SentTo(station net.HardwareAddr) uint64 { - s.Lock() - defer s.Unlock() - - bssid := station.String() - if sstats, found := s.stats[bssid]; found == true { - return sstats.Received - } - return 0 -} - -func (s *WiFiStats) EncryptionOf(station net.HardwareAddr) string { - s.Lock() - defer s.Unlock() - - bssid := station.String() - if sstats, found := s.stats[bssid]; found == true { - unique := make([]string, 0) - for key := range sstats.Encryption { - unique = append(unique, key) - } - return strings.Join(unique, ", ") - } - return "" -}