mirror of
https://github.com/bettercap/bettercap.git
synced 2024-11-08 06:30:13 -08:00
73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package wifi
|
|
|
|
import (
|
|
"errors"
|
|
"net"
|
|
"time"
|
|
|
|
"github.com/bettercap/bettercap/v2/network"
|
|
"github.com/bettercap/bettercap/v2/packets"
|
|
"github.com/bettercap/bettercap/v2/session"
|
|
|
|
"github.com/evilsocket/islazy/tui"
|
|
)
|
|
|
|
var errNoRecon = errors.New("Module wifi.ap requires module wifi.recon to be activated.")
|
|
|
|
func (mod *WiFiModule) parseApConfig() (err error) {
|
|
var bssid string
|
|
if err, mod.apConfig.SSID = mod.StringParam("wifi.ap.ssid"); err != nil {
|
|
return
|
|
} else if err, bssid = mod.StringParam("wifi.ap.bssid"); err != nil {
|
|
return
|
|
} else if mod.apConfig.BSSID, err = net.ParseMAC(network.NormalizeMac(bssid)); err != nil {
|
|
return
|
|
} else if err, mod.apConfig.Channel = mod.IntParam("wifi.ap.channel"); err != nil {
|
|
return
|
|
} else if err, mod.apConfig.Encryption = mod.BoolParam("wifi.ap.encryption"); err != nil {
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
func (mod *WiFiModule) startAp() error {
|
|
// we need channel hopping and packet injection for this
|
|
if !mod.Running() {
|
|
return errNoRecon
|
|
} else if mod.apRunning {
|
|
return session.ErrAlreadyStarted(mod.Name())
|
|
}
|
|
|
|
go func() {
|
|
mod.apRunning = true
|
|
defer func() {
|
|
mod.apRunning = false
|
|
}()
|
|
|
|
enc := tui.Yellow("WPA2")
|
|
if !mod.apConfig.Encryption {
|
|
enc = tui.Green("Open")
|
|
}
|
|
mod.Info("sending beacons as SSID %s (%s) on channel %d (%s).",
|
|
tui.Bold(mod.apConfig.SSID),
|
|
mod.apConfig.BSSID.String(),
|
|
mod.apConfig.Channel,
|
|
enc)
|
|
|
|
for seqn := uint16(0); mod.Running(); seqn++ {
|
|
mod.writes.Add(1)
|
|
defer mod.writes.Done()
|
|
|
|
if err, pkt := packets.NewDot11Beacon(mod.apConfig, seqn); err != nil {
|
|
mod.Error("could not create beacon packet: %s", err)
|
|
} else {
|
|
mod.injectPacket(pkt)
|
|
}
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
}
|
|
}()
|
|
|
|
return nil
|
|
}
|