Files
cute-handshake-capture/handshake-capture-c6
drjones ec3e0449a1 Add live capture visuals: progress bar, blinking active targets, per-network state
- Progress bar under status line shows captured/total WPA targets
- Three visual states per network:
  Green (pending) -> Orange blinking (active target) -> Red + checkmark (captured)
- Active targets show live info: client count during observation,
  EAPOL progress during capture (e.g. " NetworkName 1/2")
- Status line shows channel number and phase context
- LVGL symbols: lightning bolt for active, checkmark for captured
- Title updated to " Capture" with WiFi icon

Made-with: Cursor
2026-03-17 22:25:46 -07:00
..

Handshake Capture - ESP32-C6 1.47" LCD

Automatic WiFi 4-way handshake capture for Waveshare ESP32-C6-LCD-1.47.

Features

  • SD card storage: Saves .pcap files to TF card (not SPIFFS)
  • Auto-deauth: Aggressive 150ms deauth interval to force handshakes
  • Display: Networks in green = not captured, red = captured
  • No web interface: Capture-only device
  • WPA/WPA2 only: Skips Open/WEP networks
  • BSSID cache: Captured networks stay red across rescans

Hardware

  • Waveshare ESP32-C6-LCD-1.47 (non-touch, ST7789)
  • TF card in onboard slot

Build & Flash

Requires LVGL and lv_conf from the ESP32-C6-LCD-1.47-Demo:

cd "/path/to/4 way handshake"
arduino-cli compile \
  -b 'esp32:esp32:esp32c6:PartitionScheme=huge_app' \
  --build-path /tmp/arduino-build-handshake-c6 \
  --libraries "ESP32-C6-LCD-1.47-Demo/Arduino/libraries" \
  handshake-capture-c6
arduino-cli upload \
  -p /dev/cu.usbmodem* \
  -b 'esp32:esp32:esp32c6:PartitionScheme=huge_app' \
  --input-dir /tmp/arduino-build-handshake-c6

Use arduino-cli board list to find the correct port.

Flow

  1. Boot → scan → display networks (green)
  2. Pick first uncaptured WPA/WPA2 network
  3. Set channel, deauth every 150ms, capture EAPOL
  4. On full handshake → save to SD, mark red, next network
  5. When all done → rescan, repeat