v2.2.0 — Full arsenal expansion: 16 new security modules
Add WiFi Audit, API Fuzzer, Cloud Scanner, Threat Intel, Log Correlator,
Steganography, Anti-Forensics, BLE Scanner, Forensics, RFID/NFC, Malware
Sandbox, Password Toolkit, Web Scanner, Report Engine, Net Mapper, and
C2 Framework. Each module includes CLI interface, Flask routes, and web
UI template. Also includes Go DNS server source + binary, IP Capture
service, SYN Flood, Gone Fishing mail server, and hack hijack modules
from v2.0 work.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 05:16:31 -08:00
|
|
|
"""WiFi Auditing routes."""
|
|
|
|
|
from flask import Blueprint, request, jsonify, render_template
|
2026-03-03 05:28:14 -08:00
|
|
|
from web.auth import login_required
|
v2.2.0 — Full arsenal expansion: 16 new security modules
Add WiFi Audit, API Fuzzer, Cloud Scanner, Threat Intel, Log Correlator,
Steganography, Anti-Forensics, BLE Scanner, Forensics, RFID/NFC, Malware
Sandbox, Password Toolkit, Web Scanner, Report Engine, Net Mapper, and
C2 Framework. Each module includes CLI interface, Flask routes, and web
UI template. Also includes Go DNS server source + binary, IP Capture
service, SYN Flood, Gone Fishing mail server, and hack hijack modules
from v2.0 work.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 05:16:31 -08:00
|
|
|
|
|
|
|
|
wifi_audit_bp = Blueprint('wifi_audit', __name__, url_prefix='/wifi')
|
|
|
|
|
|
|
|
|
|
def _get_auditor():
|
|
|
|
|
from modules.wifi_audit import get_wifi_auditor
|
|
|
|
|
return get_wifi_auditor()
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/')
|
|
|
|
|
@login_required
|
|
|
|
|
def index():
|
|
|
|
|
return render_template('wifi_audit.html')
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/tools')
|
|
|
|
|
@login_required
|
|
|
|
|
def tools_status():
|
|
|
|
|
return jsonify(_get_auditor().get_tools_status())
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/interfaces')
|
|
|
|
|
@login_required
|
|
|
|
|
def interfaces():
|
|
|
|
|
return jsonify(_get_auditor().get_interfaces())
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/monitor/enable', methods=['POST'])
|
|
|
|
|
@login_required
|
|
|
|
|
def monitor_enable():
|
|
|
|
|
data = request.get_json(silent=True) or {}
|
|
|
|
|
return jsonify(_get_auditor().enable_monitor(data.get('interface', '')))
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/monitor/disable', methods=['POST'])
|
|
|
|
|
@login_required
|
|
|
|
|
def monitor_disable():
|
|
|
|
|
data = request.get_json(silent=True) or {}
|
|
|
|
|
return jsonify(_get_auditor().disable_monitor(data.get('interface')))
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/scan', methods=['POST'])
|
|
|
|
|
@login_required
|
|
|
|
|
def scan():
|
|
|
|
|
data = request.get_json(silent=True) or {}
|
|
|
|
|
return jsonify(_get_auditor().scan_networks(
|
|
|
|
|
interface=data.get('interface'),
|
|
|
|
|
duration=data.get('duration', 15)
|
|
|
|
|
))
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/scan/results')
|
|
|
|
|
@login_required
|
|
|
|
|
def scan_results():
|
|
|
|
|
return jsonify(_get_auditor().get_scan_results())
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/deauth', methods=['POST'])
|
|
|
|
|
@login_required
|
|
|
|
|
def deauth():
|
|
|
|
|
data = request.get_json(silent=True) or {}
|
|
|
|
|
return jsonify(_get_auditor().deauth(
|
|
|
|
|
interface=data.get('interface'),
|
|
|
|
|
bssid=data.get('bssid', ''),
|
|
|
|
|
client=data.get('client'),
|
|
|
|
|
count=data.get('count', 10)
|
|
|
|
|
))
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/handshake', methods=['POST'])
|
|
|
|
|
@login_required
|
|
|
|
|
def capture_handshake():
|
|
|
|
|
data = request.get_json(silent=True) or {}
|
|
|
|
|
a = _get_auditor()
|
|
|
|
|
job_id = a.capture_handshake(
|
|
|
|
|
interface=data.get('interface', a.monitor_interface or ''),
|
|
|
|
|
bssid=data.get('bssid', ''),
|
|
|
|
|
channel=data.get('channel', 1),
|
|
|
|
|
deauth_count=data.get('deauth_count', 5),
|
|
|
|
|
timeout=data.get('timeout', 60)
|
|
|
|
|
)
|
|
|
|
|
return jsonify({'ok': True, 'job_id': job_id})
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/crack', methods=['POST'])
|
|
|
|
|
@login_required
|
|
|
|
|
def crack():
|
|
|
|
|
data = request.get_json(silent=True) or {}
|
|
|
|
|
job_id = _get_auditor().crack_handshake(
|
|
|
|
|
data.get('capture_file', ''), data.get('wordlist', ''), data.get('bssid')
|
|
|
|
|
)
|
|
|
|
|
return jsonify({'ok': bool(job_id), 'job_id': job_id})
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/wps/scan', methods=['POST'])
|
|
|
|
|
@login_required
|
|
|
|
|
def wps_scan():
|
|
|
|
|
data = request.get_json(silent=True) or {}
|
|
|
|
|
return jsonify(_get_auditor().wps_scan(data.get('interface')))
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/wps/attack', methods=['POST'])
|
|
|
|
|
@login_required
|
|
|
|
|
def wps_attack():
|
|
|
|
|
data = request.get_json(silent=True) or {}
|
|
|
|
|
a = _get_auditor()
|
|
|
|
|
job_id = a.wps_attack(
|
|
|
|
|
interface=data.get('interface', a.monitor_interface or ''),
|
|
|
|
|
bssid=data.get('bssid', ''),
|
|
|
|
|
channel=data.get('channel', 1),
|
|
|
|
|
pixie_dust=data.get('pixie_dust', True)
|
|
|
|
|
)
|
|
|
|
|
return jsonify({'ok': bool(job_id), 'job_id': job_id})
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/rogue/save', methods=['POST'])
|
|
|
|
|
@login_required
|
|
|
|
|
def rogue_save():
|
|
|
|
|
return jsonify(_get_auditor().save_known_aps())
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/rogue/detect')
|
|
|
|
|
@login_required
|
|
|
|
|
def rogue_detect():
|
|
|
|
|
return jsonify(_get_auditor().detect_rogue_aps())
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/capture/start', methods=['POST'])
|
|
|
|
|
@login_required
|
|
|
|
|
def capture_start():
|
|
|
|
|
data = request.get_json(silent=True) or {}
|
|
|
|
|
return jsonify(_get_auditor().start_capture(
|
|
|
|
|
data.get('interface'), data.get('channel'), data.get('bssid'), data.get('name')
|
|
|
|
|
))
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/capture/stop', methods=['POST'])
|
|
|
|
|
@login_required
|
|
|
|
|
def capture_stop():
|
|
|
|
|
return jsonify(_get_auditor().stop_capture())
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/captures')
|
|
|
|
|
@login_required
|
|
|
|
|
def captures_list():
|
|
|
|
|
return jsonify(_get_auditor().list_captures())
|
|
|
|
|
|
|
|
|
|
@wifi_audit_bp.route('/job/<job_id>')
|
|
|
|
|
@login_required
|
|
|
|
|
def job_status(job_id):
|
|
|
|
|
job = _get_auditor().get_job(job_id)
|
|
|
|
|
return jsonify(job or {'error': 'Job not found'})
|