diff --git a/caplets/airmon.cap b/caplets/airmon.cap new file mode 100644 index 00000000..b0416313 --- /dev/null +++ b/caplets/airmon.cap @@ -0,0 +1,4 @@ +set ticker.commands clear; wifi.show +wifi.recon on +clear +ticker on diff --git a/modules/wlan.go b/modules/wifi.go similarity index 60% rename from modules/wlan.go rename to modules/wifi.go index 3154ee00..25999fac 100644 --- a/modules/wlan.go +++ b/modules/wifi.go @@ -8,33 +8,33 @@ import ( "github.com/evilsocket/bettercap-ng/session" ) -type WLan struct { +type WiFi struct { sync.Mutex Session *session.Session Interface *network.Endpoint - Stations map[string]*WirelessStation + Stations map[string]*WiFiStation } -func NewWLan(s *session.Session, iface *network.Endpoint) *WLan { - return &WLan{ +func NewWiFi(s *session.Session, iface *network.Endpoint) *WiFi { + return &WiFi{ Session: s, Interface: iface, - Stations: make(map[string]*WirelessStation), + Stations: make(map[string]*WiFiStation), } } -func (w *WLan) List() (list []*WirelessStation) { +func (w *WiFi) List() (list []*WiFiStation) { w.Lock() defer w.Unlock() - list = make([]*WirelessStation, 0) + list = make([]*WiFiStation, 0) for _, t := range w.Stations { list = append(list, t) } return } -func (w *WLan) Remove(mac string) { +func (w *WiFi) Remove(mac string) { w.Lock() defer w.Unlock() @@ -44,7 +44,7 @@ func (w *WLan) Remove(mac string) { } } -func (w *WLan) AddIfNew(ssid, mac string, isAp bool, channel int) *WirelessStation { +func (w *WiFi) AddIfNew(ssid, mac string, isAp bool, channel int) *WiFiStation { w.Lock() defer w.Unlock() @@ -54,7 +54,7 @@ func (w *WLan) AddIfNew(ssid, mac string, isAp bool, channel int) *WirelessStati return station } - newStation := NewWirelessStation(ssid, mac, isAp, channel) + newStation := NewWiFiStation(ssid, mac, isAp, channel) w.Stations[mac] = newStation w.Session.Events.Add("wifi.station.new", newStation) @@ -62,7 +62,7 @@ func (w *WLan) AddIfNew(ssid, mac string, isAp bool, channel int) *WirelessStati return nil } -func (w *WLan) Clear() error { - w.Stations = make(map[string]*WirelessStation) +func (w *WiFi) Clear() error { + w.Stations = make(map[string]*WiFiStation) return nil } diff --git a/modules/wlan_recon.go b/modules/wifi_recon.go similarity index 85% rename from modules/wlan_recon.go rename to modules/wifi_recon.go index 804c30f2..780d7663 100644 --- a/modules/wlan_recon.go +++ b/modules/wifi_recon.go @@ -25,7 +25,7 @@ import ( type WDiscovery struct { session.SessionModule - wlan *WLan + wifi *WiFi handle *pcap.Handle BroadcastMac []byte cliTarget net.HardwareAddr @@ -34,30 +34,30 @@ type WDiscovery struct { func NewWDiscovery(s *session.Session) *WDiscovery { w := &WDiscovery{ - SessionModule: session.NewSessionModule("wlan.recon", s), + SessionModule: session.NewSessionModule("wifi.recon", s), cliTarget: make([]byte, 0), apTarget: make([]byte, 0), } - w.AddHandler(session.NewModuleHandler("wlan.recon on", "", + w.AddHandler(session.NewModuleHandler("wifi.recon on", "", "Start 802.11 wireless base stations discovery.", func(args []string) error { return w.Start() })) - w.AddHandler(session.NewModuleHandler("wlan.recon off", "", + w.AddHandler(session.NewModuleHandler("wifi.recon off", "", "Stop 802.11 wireless base stations discovery.", func(args []string) error { return w.Stop() })) - w.AddHandler(session.NewModuleHandler("wlan.deauth", "", + w.AddHandler(session.NewModuleHandler("wifi.deauth", "", "Start a 802.11 deauth attack (use ticker to iterate the attack).", func(args []string) error { return w.startDeauth() })) - w.AddHandler(session.NewModuleHandler("wlan.recon set client MAC", "wlan.recon set client ((?:[0-9A-Fa-f]{2}[:-]){5}(?:[0-9A-Fa-f]{2}))", + w.AddHandler(session.NewModuleHandler("wifi.recon set client MAC", "wifi.recon set client ((?:[0-9A-Fa-f]{2}[:-]){5}(?:[0-9A-Fa-f]{2}))", "Set client to deauth (single target).", func(args []string) error { var err error @@ -65,35 +65,35 @@ func NewWDiscovery(s *session.Session) *WDiscovery { return err })) - w.AddHandler(session.NewModuleHandler("wlan.recon clear client", "", + w.AddHandler(session.NewModuleHandler("wifi.recon clear client", "", "Remove client to deauth.", func(args []string) error { w.cliTarget = make([]byte, 0) return nil })) - w.AddHandler(session.NewModuleHandler("wlan.recon set bs MAC", "wlan.recon set bs ((?:[0-9A-Fa-f]{2}[:-]){5}(?:[0-9A-Fa-f]{2}))", + w.AddHandler(session.NewModuleHandler("wifi.recon set bs MAC", "wifi.recon set bs ((?:[0-9A-Fa-f]{2}[:-]){5}(?:[0-9A-Fa-f]{2}))", "Set 802.11 base station address to filter for.", func(args []string) error { var err error - if w.wlan != nil { - w.wlan.Clear() + if w.wifi != nil { + w.wifi.Clear() } w.apTarget, err = net.ParseMAC(args[0]) return err })) - w.AddHandler(session.NewModuleHandler("wlan.recon clear bs", "", + w.AddHandler(session.NewModuleHandler("wifi.recon clear bs", "", "Remove the 802.11 base station filter.", func(args []string) error { - if w.wlan != nil { - w.wlan.Clear() + if w.wifi != nil { + w.wifi.Clear() } w.apTarget = make([]byte, 0) return nil })) - w.AddHandler(session.NewModuleHandler("wlan.show", "", + w.AddHandler(session.NewModuleHandler("wifi.show", "", "Show current hosts list (default sorting by essid).", func(args []string) error { return w.Show("essid") @@ -103,7 +103,7 @@ func NewWDiscovery(s *session.Session) *WDiscovery { } func (w WDiscovery) Name() string { - return "wlan.recon" + return "wifi.recon" } func (w WDiscovery) Description() string { @@ -114,7 +114,7 @@ func (w WDiscovery) Author() string { return "Gianluca Braga " } -func (w *WDiscovery) getRow(station *WirelessStation) []string { +func (w *WDiscovery) getRow(station *WiFiStation) []string { sinceStarted := time.Since(w.Session.StartedAt) sinceFirstSeen := time.Since(station.FirstSeen) @@ -151,7 +151,7 @@ func mhz2chan(freq int) int { return 0 } -type ByEssidSorter []*WirelessStation +type ByEssidSorter []*WiFiStation func (a ByEssidSorter) Len() int { return len(a) } func (a ByEssidSorter) Swap(i, j int) { a[i], a[j] = a[j], a[i] } @@ -162,11 +162,11 @@ func (a ByEssidSorter) Less(i, j int) bool { return a[i].ESSID() < a[j].ESSID() } -type ByWlanSeenSorter []*WirelessStation +type BywifiSeenSorter []*WiFiStation -func (a ByWlanSeenSorter) Len() int { return len(a) } -func (a ByWlanSeenSorter) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a ByWlanSeenSorter) Less(i, j int) bool { +func (a BywifiSeenSorter) Len() int { return len(a) } +func (a BywifiSeenSorter) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a BywifiSeenSorter) Less(i, j int) bool { return a[i].LastSeen.After(a[j].LastSeen) } @@ -180,13 +180,13 @@ func (w *WDiscovery) showTable(header []string, rows [][]string) { } func (w *WDiscovery) Show(by string) error { - if w.wlan == nil { - return errors.New("WLan is not yet initialized.") + if w.wifi == nil { + return errors.New("WiFi is not yet initialized.") } - stations := w.wlan.List() + stations := w.wifi.List() if by == "seen" { - sort.Sort(ByWlanSeenSorter(stations)) + sort.Sort(BywifiSeenSorter(stations)) } else { sort.Sort(ByEssidSorter(stations)) } @@ -261,7 +261,7 @@ func (w *WDiscovery) startDeauth() error { w.sendDeauthPacket(w.apTarget, w.cliTarget) } else { // deauth all AP's clients - for _, station := range w.wlan.Stations { + for _, station := range w.wifi.Stations { w.sendDeauthPacket(w.apTarget, station.HW) } } @@ -300,7 +300,7 @@ func (w *WDiscovery) discoverAccessPoints(packet gopacket.Packet) { if bytes.Compare(dst, w.BroadcastMac) == 0 && len(ssid) > 0 { radiotap, _ := radiotapLayer.(*layers.RadioTap) channel := mhz2chan(int(radiotap.ChannelFrequency)) - w.wlan.AddIfNew(ssid, bssid, true, channel) + w.wifi.AddIfNew(ssid, bssid, true, channel) } } @@ -330,7 +330,7 @@ func (w *WDiscovery) discoverClients(bs net.HardwareAddr, packet gopacket.Packet if bytes.Compare(bssid, bs) == 0 { radiotap, _ := radiotapLayer.(*layers.RadioTap) channel := mhz2chan(int(radiotap.ChannelFrequency)) - w.wlan.AddIfNew("", src.String(), false, channel) + w.wifi.AddIfNew("", src.String(), false, channel) } } } @@ -354,7 +354,7 @@ func (w *WDiscovery) Configure() error { return err } - w.wlan = NewWLan(w.Session, w.Session.Interface) + w.wifi = NewWiFi(w.Session, w.Session.Interface) w.BroadcastMac, _ = net.ParseMAC(network.BroadcastMac) return nil diff --git a/modules/wlan_station.go b/modules/wifi_station.go similarity index 56% rename from modules/wlan_station.go rename to modules/wifi_station.go index e89d094d..165b51f0 100644 --- a/modules/wlan_station.go +++ b/modules/wifi_station.go @@ -4,24 +4,24 @@ import ( "github.com/evilsocket/bettercap-ng/network" ) -type WirelessStation struct { +type WiFiStation struct { *network.Endpoint IsAP bool Channel int } -func NewWirelessStation(essid, bssid string, isAp bool, channel int) *WirelessStation { - return &WirelessStation{ +func NewWiFiStation(essid, bssid string, isAp bool, channel int) *WiFiStation { + return &WiFiStation{ Endpoint: network.NewEndpointNoResolve(network.MonitorModeAddress, bssid, essid, 0), IsAP: isAp, Channel: channel, } } -func (s WirelessStation) BSSID() string { +func (s WiFiStation) BSSID() string { return s.HwAddress } -func (s *WirelessStation) ESSID() string { +func (s *WiFiStation) ESSID() string { return s.Hostname }