Skip to content

CLI Reference

ysl edited this page Oct 13, 2026 · 1 revision

Every module is a standalone script. The GUI is a view over them. Anything you can click, you can script — and for repeatable work, scripting is usually the better choice.

The launcher

sudo bash wifisting.sh

Presents the module list. Type a module number to open it.

  • Modules with their own interface open that
  • The rest show the verbs parsed from the module's --help, and prompt for any arguments
bash wifisting.sh --list        # list modules, no root needed

Running modules directly

modules/41_wifi_geolocate.sh --apple-lookup e4:9e:12:05:34:59
e4:9e:12:05:34:59   43.2255745   0.0792846   45

Every module takes --help:

modules/53_jamming.sh --help

Conventions

Output is TSV — KEY<TAB>VALUE, one record per line. Designed to be piped:

modules/01_iface.sh --list-tsv | cut -f1
modules/58_proximity.sh --events-tsv | awk -F'\t' '$3 == "appear"'

Headers are a line of column names, so tail -n +2 skips them.

Errors go to stderr and set a non-zero exit code. Nothing important is reported only on stdout, so 2>/dev/null is safe when you want silence.

--status-tsv reports capability. Most modules answer it, and it says what the module can and cannot do on this machine:

modules/53_jamming.sh --caps-tsv

--selftest checks the module without hardware. Every module has one. It exits non-zero on failure:

for m in modules/*.sh; do
    bash "$m" --selftest >/dev/null 2>&1 || echo "FAIL: $m"
done

Privileges

Anything touching a radio needs root. In the GUI this happens per action through pkexec, so you're prompted only when a privileged step runs.

From the CLI:

sudo modules/03_attack.sh --deauth <BSSID>

pkexec resets PATH, which is a common source of "works in my shell, fails in the GUI" reports. The app widens PATH at startup to include /usr/sbin and /sbin for exactly this reason. If you hit it in your own scripts, set PATH explicitly.

Scripting a module

--selftest first, always. Then parse TSV:

#!/usr/bin/env bash
set -euo pipefail

mod=modules/02_recon.sh
"$mod" --selftest >/dev/null

"$mod" --scan wlan0 --duration 20 \
  | awk -F'\t' 'NR > 1 && $4 > 60 { print $2 }'

The --selftest line costs a second and tells you whether a failure is your script or the module — which is most of the debugging.

Exit codes

Code Meaning
0 Success
1 Operation failed — see stderr
2 Usage error — bad arguments or a missing one

A module that reports success while doing nothing is treated as a defect. If you find one, report it.

Clone this wiki locally