This project demonstrates how WiFi captive portals operate, using an ESP32-S3. It is intended for learning, demos, and security awareness only.
- WiFi Access Point (ESP32-S3)
- Captive Portal auto-detection (Android / iOS / Windows / Linux)
- DNS wildcard redirection
- Fake "Free WiFi" login page
- Local logging using LittleFS
- Hidden admin panel to view logs
- On-device log rotation
- User connects to ESP32 WiFi
- DNS resolves all domains to ESP32
- System detects captive portal
- Fake login page is displayed
- User submits form
- Connection details are logged
Each connection records:
- Timestamp (uptime seconds)
- Name
- Password
- Client IP address
- User-Agent (OS / browser)
- Platform
- Vendor
64 | name=ad | email=0adri3n@github.com | password=fakehaha | userAgent=Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 | platform=iPhone | vendor=Apple Computer, Inc. | ip=192.168.4.2| File | Description |
|---|---|
/connections.log |
Connection logs |
| Auto-rotation | File cleared when > 50 KB |
🔐 Admin Panel (Hidden)
A secret admin page allows viewing logs directly from a browser.
http://192.168.4.1/admin-9f3a2c
- View logs in real time
- Monospace readable UI
- Not indexed or linked anywhere
- ESP32-S3 (dual-core 240 MHz)
- 8 MB PSRAM
- 16 MB Flash
- USB or Li-ion battery powered
📦 Ordered on AliExpress here. This is NOT sponsored.
- Arduino IDE
- ESP32 Arduino Core (recommended 2.0.17)
- Libraries:
- WiFi
- DNSServer
- WebServer
- LittleFS
This project:
- Is NOT a hacking tool
- Must not be used on public or private networks without permission
- Is for educational and testing environments only
You are responsible for compliance with local laws.
- Admin authentication
- CSV export
- Log pagination
- NTP timestamp
- MAC address
- HTTPS captive portal
- TFT admin dashboard