mirror of
https://github.com/bettercap/bettercap
synced 2025-08-19 13:09:49 -07:00
fix: one beacon packet per handshake is saved in order to have both the ESSID and BSSID
This commit is contained in:
parent
a90f63b643
commit
1120f98be1
4 changed files with 28 additions and 4 deletions
|
@ -79,7 +79,11 @@ func (w *WiFiModule) discoverAccessPoints(radiotap *layers.RadioTap, dot11 *laye
|
||||||
frequency = int(radiotap.ChannelFrequency)
|
frequency = int(radiotap.ChannelFrequency)
|
||||||
}
|
}
|
||||||
|
|
||||||
w.Session.WiFi.AddIfNew(ssid, bssid, frequency, radiotap.DBMAntennaSignal)
|
if ap, isNew := w.Session.WiFi.AddIfNew(ssid, bssid, frequency, radiotap.DBMAntennaSignal); !isNew {
|
||||||
|
ap.EachClient(func(mac string, station *network.Station) {
|
||||||
|
station.Handshake.SetBeacon(packet)
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,7 +129,7 @@ func isBogusMacESSID(essid string) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *WiFi) AddIfNew(ssid, mac string, frequency int, rssi int8) *AccessPoint {
|
func (w *WiFi) AddIfNew(ssid, mac string, frequency int, rssi int8) (*AccessPoint, bool) {
|
||||||
w.Lock()
|
w.Lock()
|
||||||
defer w.Unlock()
|
defer w.Unlock()
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ func (w *WiFi) AddIfNew(ssid, mac string, frequency int, rssi int8) *AccessPoint
|
||||||
if !isBogusMacESSID(ssid) {
|
if !isBogusMacESSID(ssid) {
|
||||||
ap.Hostname = ssid
|
ap.Hostname = ssid
|
||||||
}
|
}
|
||||||
return ap
|
return ap, false
|
||||||
}
|
}
|
||||||
|
|
||||||
newAp := NewAccessPoint(ssid, mac, frequency, rssi)
|
newAp := NewAccessPoint(ssid, mac, frequency, rssi)
|
||||||
|
@ -151,7 +151,7 @@ func (w *WiFi) AddIfNew(ssid, mac string, frequency int, rssi int8) *AccessPoint
|
||||||
w.newCb(newAp)
|
w.newCb(newAp)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return newAp, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *WiFi) Get(mac string) (*AccessPoint, bool) {
|
func (w *WiFi) Get(mac string) (*AccessPoint, bool) {
|
||||||
|
|
|
@ -97,6 +97,15 @@ func (ap *AccessPoint) Clients() (list []*Station) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ap *AccessPoint) EachClient(cb func(mac string, station *Station)) {
|
||||||
|
ap.Lock()
|
||||||
|
defer ap.Unlock()
|
||||||
|
|
||||||
|
for m, station := range ap.clients {
|
||||||
|
cb(m, station)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (ap *AccessPoint) NumHandshakes() int {
|
func (ap *AccessPoint) NumHandshakes() int {
|
||||||
ap.Lock()
|
ap.Lock()
|
||||||
defer ap.Unlock()
|
defer ap.Unlock()
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
type Handshake struct {
|
type Handshake struct {
|
||||||
sync.Mutex
|
sync.Mutex
|
||||||
|
|
||||||
|
Beacon gopacket.Packet
|
||||||
Challenges []gopacket.Packet
|
Challenges []gopacket.Packet
|
||||||
Responses []gopacket.Packet
|
Responses []gopacket.Packet
|
||||||
Confirmations []gopacket.Packet
|
Confirmations []gopacket.Packet
|
||||||
|
@ -23,6 +24,16 @@ func NewHandshake() *Handshake {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *Handshake) SetBeacon(pkt gopacket.Packet) {
|
||||||
|
h.Lock()
|
||||||
|
defer h.Unlock()
|
||||||
|
|
||||||
|
if h.Beacon == nil {
|
||||||
|
h.Beacon = pkt
|
||||||
|
h.unsaved = append(h.unsaved, pkt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (h *Handshake) AddFrame(n int, pkt gopacket.Packet) {
|
func (h *Handshake) AddFrame(n int, pkt gopacket.Packet) {
|
||||||
h.Lock()
|
h.Lock()
|
||||||
defer h.Unlock()
|
defer h.Unlock()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue