_ _ ____ _ _ _
/ \ (_) _ __ / ___| | |_ _ __ (_)| | __ ___
/ _ \ | || '__|\___ \ | __|| '__|| || |/ / / _ \
/ ___ \ | || | ___) || |_ | | | || < | __/
/_/ \_\|_||_| |____/ \__||_| |_||_|\_\ \___|
AirStrike is a Flask + Socket.IO web interface for orchestrating Wi-Fi assessment tools from a browser.
This build intentionally focuses on the three most stable attacks in the suite: Deauthentication, Cracking (handshake capture + aircrack-ng), and Evil Twin.
- Deauthentication – kicks associated clients off the selected AP by flooding crafted 802.11 deauth frames.
- Cracking (Handshake) – captures WPA/WPA2 handshakes while simultaneously brute-forcing them with
aircrack-ngand a configurable wordlist. - Evil Twin – clones the target SSID via
hostapd/dnsmasq, sets up DHCP/DNS spoofing, and can optionally front a captive portal.
All other experimental attack stubs were removed to keep the UI, API, and code paths lean.
- Python 3.10+ and
pip - Install the package and its dependencies
python -m venv .venv source .venv/bin/activate pip install -e . # installs deps + the `airstrike` console script # or: pip install -r requirements.txt
- Root access (AirStrike refuses to start otherwise)
- External CLI tooling available in
$PATH:aircrack-ngsuite (airmon-ng,airodump-ng,aircrack-ng)iw,ip,ifconfig/net-toolshostapd,dnsmasq,iptables,dnsspoof- A wireless adapter that supports monitor mode and injection
sudo python run.pyThe runner enforces sudo, exports the required environment variables, and ensures /etc/hosts contains 127.0.0.1 airstrike.local.
The server binds to 127.0.0.1:5000 (loopback only) by default; browse to http://airstrike.local:5000 or http://127.0.0.1:5000. (sudo airstrike runs the same thing via the console script.)
On the default loopback bind there is no login — for a single-operator box the loopback bind is the access control, so you go straight to the dashboard. (A login gate turns on automatically if you expose the panel with AIRSTRIKE_BIND_ALL=1; set AIRSTRIKE_PASSWORD then, or force auth on/off with AIRSTRIKE_REQUIRE_AUTH=1 / AIRSTRIKE_DISABLE_AUTH=1.) Use the Scan tab to discover networks, select one, and switch to Attack. You still confirm authorization before an attack starts, and every launch/stop is written to airstrike-audit.log. Live logs and capture summaries are under Results.
To reach it from another machine, prefer an SSH tunnel (ssh -L 5000:127.0.0.1:5000 <host>). Exposing it on all interfaces (AIRSTRIKE_BIND_ALL=1) serves the panel over plaintext HTTP and is discouraged — see THREAT_MODEL.md.
- Runtime defaults (interface, wordlist path, capture directory) live in
app/config.pyunder theconfigdict; the Settings tab edits them live. - Environment variables:
AIRSTRIKE_PASSWORD(login),AIRSTRIKE_SECRET_KEY(persistent sessions),AIRSTRIKE_BIND_ALL=1(expose on all interfaces — discouraged),AIRSTRIKE_ORIGINS(Socket.IO CORS allowlist when not on loopback),AIRSTRIKE_AUDIT_LOG(audit-file path). - Captured handshakes are stored per-BSSID inside
captures/. run.pyis a thin shim intoapp.cli:main(also installed as theairstrikeconsole script); it enforces root, mapsairstrike.local, and starts Socket.IO.
The backend is a single installable app/ package (restructured from the original flat layout — see PR #8):
app/engine/– framework-agnostic attack workers (deauth, handshake capture/cracking, evil twin); importable without Flask.app/core/– shared plumbing: network/monitor-mode utils, sudo, logging, plus the validation, auth, and audit modules.app/services/– orchestration (attack/scan/settings) between the blueprints and the engine.app/blueprints/– Flask routes;app/__init__.pyis thecreate_app()factory.app/static/·app/templates/– the front-end (per-attack config lives inapp/static/js/modules/attacks/).run.py·pyproject.toml– entry-point shim + packaging.tests/– pytest suite (factory/route contract, parsers, and the security/auth regression tests).
- Interface stuck in monitor mode? Use the Settings → Interface tools or
utils/network_utils.set_managed_mode. - Missing binaries (e.g.,
airodump-ng,hostapd) will surface in the attack log pane. Install them through your package manager and restart AirStrike. - Ensure your wireless chipset supports the required modes; USB adapters with Atheros or Ralink chipsets are typically reliable.
AirStrike runs as root, so its own security matters. Hardening includes: no shell execution (argv only), input validation on all OS-bound values, a login gate + CSRF + same-origin enforcement, loopback-by-default binding, XSS escaping, an authenticated Socket.IO channel, and an authorization gate + audit log. The full trust model, residual risks (notably: no TLS — use an SSH tunnel), and a safe-operation checklist are in THREAT_MODEL.md. Run the test suite with pytest.
AirStrike performs active, offensive attacks (deauthentication, handshake capture, rogue AP). Running them against networks you do not own — or lack written authorization to assess — is illegal in most jurisdictions (e.g. US CFAA, FCC §333 for deauthentication, UK CMA, German StGB §202c). This is a lab / research / portfolio tool: use it only on your own equipment or within an authorized engagement. The in-app authorization gate records your confirmation; it does not grant permission. You are responsible for how you use it.