Beacon Flood (beaconflood / bf)

Authorized use only. Beacon flooding disrupts WiFi network discovery for every device in range. Only use against networks and environments you own or have explicit written permission to test.

Beacon flood injects hundreds of fake 802.11 beacon frames per second into the air — each advertising a different SSID with a randomly generated MAC address. Every device in range sees its WiFi list flooded with fake networks.


Usage

CMD> bf

Typing bf with no arguments opens the mode picker:

[BCON::FLOOD]  select mode
──────────────────────────
[1] list      funny SSIDs
[2] rickroll  Never gonna...
[3] seq       base + number
[4] file      /apps/beaconflood/wordlist.txt
[5] clone     pick from scan
──────────────────────────
[q] cancel

Press a number to select. Press q to cancel.


Modes

[1] list — Built-in SSID list

CMD> bf
CMD> bf list

Cycles continuously through 40 built-in humorous network names (“Abraham Linksys”, “FBI Surveillance Van”, “Silence of the LANs”, etc.). Each SSID gets a fresh random MAC address. Channels hop automatically.


[2] rickroll — Rickroll

CMD> bf rickroll

Floods with the lyrics of Never Gonna Give You Up as sequential SSIDs:

01 Never gonna give you up
02 Never gonna let you down
03 Never gonna run around
04 And desert you
...

[3] seq — Sequential

CMD> bf seq
CMD> bf seq Starbucks
CMD> bf seq HotelGuest_Room

When selected from the menu, prompts you to type a base name and press Enter to confirm. Press Enter on an empty input to cancel back to the menu. Generates numbered variants:

Starbucks1 → Starbucks2 → ... → Starbucks9999 → wraps + hop channel

Useful for simulating a venue with many APs or making one network appear to have hundreds of repeaters.


[4] file — SD file

CMD> bf file
CMD> bf file /mylist.txt

Reads SSIDs from /apps/beaconflood/wordlist.txt on the SD card (one SSID per line, max 32 characters each). Loops the file continuously. Optionally pass a custom path as a second argument.

Example /apps/beaconflood/wordlist.txt:

Free Airport WiFi
Hotel Guest
xfinitywifi
ATT_WIFI_4821
NETGEAR_5G
CorporateGuest

Requires an SD card. Returns an error if the card or file is not present.


[5] clone — Clone from scan

CMD> bf clone

Picks a real network from the last scanwifi result and floods the air with beacons using that exact SSID — but with random MACs and no real AP behind them. Every nearby device sees dozens of networks with the same name and cannot tell which is legitimate.

Requires a prior scan. If no scan data exists you will see:

[BCON::FLOOD]  clone
────────────────────
No scan data.
Run scanwifi first, then bf.
[q] back

After running sw, select [5] to open the network picker:

[BCON::FLOOD]  01/02
────────────────────
[1] ch6   Starbucks_WiFi
[2] ch1   BT-HomeHub-XYZ
[3] ch11  NETGEAR_5G
[4] ch6   linksys
...
1-9=pick  a/l=page  q=cancel

Pick by index. Flood starts immediately and stays locked to that network’s channel — unlike other modes, clone never hops. This is intentional: devices scan the real AP’s channel and clone beacons must be there to be seen.

Invisible character trick: each clone beacon appends a different number of U+200B zero-width spaces to the SSID. The bytes are different so Windows and Android treat each variant as a distinct network — they appear as separate entries in the scan list, all showing the same name. A 10-character SSID gets up to 7 visible clone entries; a 32-character SSID has no room and falls back to single-entry behaviour.

If the target SSID is 32 bytes (max length) there is no room for the invisible suffix — clones will merge into the real AP’s entry in the scan list.


While running

All modes show a live stats screen:

[BCON::FLOOD]  clone Starbucks_WiFi
────────────────────────────────────
Ch:  6   Sent: 4,821
Err: 0   Rate: ~94/s
SSID: Starbucks_WiFi
[q] stop
Field Meaning
Ch Current transmit channel
Sent Total beacon frames injected
Err Frames rejected by the WiFi driver
Rate Approximate frames per second (updated every 200 ms)
SSID Current SSID being flooded

Press q to stop. WiFi is restored cleanly to STA mode on exit.


How it works

Each beacon is a dynamically-built 802.11 management frame (subtype 8):

  • Packed IEs, no padding — frame is built byte-by-byte so Supported Rates and RSN IEs immediately follow the SSID data. A fixed 32-byte SSID slot would leave zero-padding that breaks 802.11 IE parsers on Windows/Android, causing WEP to be reported instead of WPA2.
  • Accurate security flags — clone mode matches the real network (open = no Privacy bit, no RSN IE, ~57-byte frame; WPA2 = Privacy bit + RSN IE CCMP-PSK, ~79-byte frame); all other modes inject as WPA2
  • Random locally-administered MAC per frame — mac[0] = (mac[0] & 0xFE) | 0x02 — so every fake AP appears as a distinct device
  • Channel hops every 20 beacons through all 13 channels (spread-first: 1 → 6 → 11 → 2 → 7 → 12 …) to maximise 2.4 GHz band coverage — clone mode stays locked to the target channel
  • 2 frames per SSID with 1 ms gap — improves acceptance rate on devices that filter single unseen frames
  • Injected via esp_wifi_80211_tx — bypasses the normal WiFi stack and puts frames directly on air

Compatibility note

Beacon flood and wguard cannot run at the same time — both use promiscuous mode and wguard locks to a specific channel. To test wguard’s beacon flood detection (BEACON FLOOD — 100+ unique BSSIDs / 30 s), run bf on a second device while wg runs on the T-Deck.