WiFi Profile Manager for Hak5 WiFi Pineapple Pager
WiFMan is a graphical payload that allows easy management and switching between saved WiFi networks on the WiFi Pineapple Pager device.
- Features
- Requirements
- Installation
- Controls
- User Interface
- File Structure
- Profile Format
- Troubleshooting
- License
- Multi-profile storage – store multiple WiFi networks in a local JSON file
- GUI-compatible – fully compatible with Pineapple GUI Client Mode
- Real-time status – displays actual connection state (not just configuration)
- Network scanning – automatic detection of available WiFi networks
- Quick connect – "Connect Last" for instant reconnection
- Full on-screen keyboard – enter SSIDs and passwords directly
- Security support – Open, WEP, WPA, WPA2, WPA3
- Connection verification – verifies that connection is actually established
WiFMan stores multiple network profiles in profiles.json, but when connecting it replaces credentials inside the single STA profile (wireless.wlan0cli) used by the Pineapple GUI.
This ensures:
- Pineapple GUI shows correct Client Mode state
- No conflicts with other services (PineAP, etc.)
- System stability
- Hak5 WiFi Pineapple Pager
- Python3 + python3-ctypes (installed automatically if missing)
git clone https://github.com/LOCOSP/pineapple_pager_wifman.git
cd pineapple_pager_wifman- Download ZIP from GitHub repository page
- Extract archive
- Go to extracted folder:
cd pineapple_pager_wifmanscp -r wifman root@172.16.52.1:/root/payloads/user/general/Launch from:
Payloads → General → WiFMan
WiFi Pineapple Pager has 6 physical buttons:
[UP]
[LEFT] [RIGHT] [RED] [GREEN]
[DOWN]
| Button | Function |
|---|---|
| UP | Navigate up |
| DOWN | Navigate down |
| LEFT | Navigate left (keyboard) |
| RIGHT | Profile action menu |
| GREEN (A) | Select / Confirm |
| RED (B) | Back / Cancel |
+----------------------------------+
| WiFMan by LAB5 |
| WiFi Network Manager |
| v1.0 |
+----------------------------------+
+----------------------------------+
| WiFMan Not connected |
+----------------------------------+
| |
| > 1. Profiles |
| 2. Connect Last (none) |
| 3. Disconnect |
| 4. Exit |
| |
+----------------------------------+
| UP/DOWN=Move GREEN=Select RED=Back|
+----------------------------------+
| Option | Description |
|---|---|
| Profiles | Manage saved WiFi networks |
| Connect Last | Connect to last used network |
| Disconnect | Disconnect from current network |
| Exit | Exit payload |
+----------------------------------+
| WiFi Profiles Connected: Home |
+----------------------------------+
| |
| > HomeNetwork [WPA2] |
| OfficeWiFi [WPA2] |
| CafeHotspot [OPEN] |
| + Scan Networks |
| + Add Manually |
| |
+----------------------------------+
| UP/DOWN=Move GREEN=Select RED=Back|
+----------------------------------+
Actions
- GREEN on profile → connect
- GREEN on Scan Networks → scan available networks
- GREEN on Add Manually → add profile manually
- RIGHT on profile → edit/delete menu
- RED → back
+----------------------------------+
| Found 5 Networks |
+----------------------------------+
| |
| > HomeNetwork [WPA2] -45dBm |
| OfficeWiFi [WPA2] -62dBm |
| OpenCafe [OPEN] -70dBm |
| Neighbor5G [WPA3] -75dBm |
| |
+----------------------------------+
+----------------------------------+
| Enter Password |
+----------------------------------+
| [MyPassword123_ ] |
+----------------------------------+
| 1 2 3 4 5 6 7 8 9 0 |
| q w e r t y u i o p |
| a s d f g h j k l |
| z x c v b n m . - _ |
+----------------------------------+
| [SPC] [DEL] [aA] [OK] |
+----------------------------------+
+----------------------------------+
| Security Type |
+----------------------------------+
| Open |
| WEP |
| WPA |
| > WPA2 (Recommended) |
| WPA3 |
+----------------------------------+
+----------------------------------+
| HomeNetwork |
+----------------------------------+
| > Connect |
| Edit |
| Delete |
| Cancel |
+----------------------------------+
wifman/
├── payload.sh # Payload entry script
├── profiles.json # Stored WiFi profiles
├── wifman.py # Main application
├── lib/
│ ├── pagerctl.py # Python wrapper
│ └── libpagerctl.so # Native display library
└── fonts/ # Optional fonts
Profiles are stored in:
wifman/profiles.json
{
"profiles": [
{
"ssid": "KnownAP1",
"security": "wpa2",
"password": "Password1"
},
{
"ssid": "KnownAP2",
"security": "wpa2",
"password": "Password2"
}
],
"last_connected": "KnownAP1" # <-- Don't change that...
}| Field | Description |
|---|---|
| ssid | WiFi network name |
| security | open, wep, wpa, wpa2, wpa3 |
| password | Network password (empty for open) |
| last_connected | Used by Connect Last |
You can manually add or modify known networks by editing profiles.json.
Rules:
- WPA/WPA2/WPA3 → password required
- Open → password can be empty
last_connectedmust match an existing SSID or be null
If payload shows:
PYTHON3 REQUIRED
Install manually:
ssh root@172.16.52.1
opkg update
opkg -d mmc install python3 python3-ctypesPossible causes:
- Wrong password
- Wrong security type
- Network out of range
- wlan0cli misconfiguration
Diagnostics:
ssh root@172.16.52.1
iwinfo wlan0cli info
uci show wirelessuci set wireless.wlan0cli.ssid=NetworkName
uci set wireless.wlan0cli.encryption=psk2
uci set wireless.wlan0cli.key=Password
uci commit wireless
wifi reloadWiFMan uses a Shadow Config Model:
profiles.json → wireless.wlan0cli → runtime connection
Verification:
uci get wireless.wlan0cli.ssid
iw dev phy0-sta0 link
MIT License
LOCOSP
- Hak5 – WiFi Pineapple Pager
- pagerctl – display control library



