Autarch/web/routes/deauth.py

134 lines
4.0 KiB
Python
Raw Permalink Normal View History

"""Deauth Attack routes."""
from flask import Blueprint, request, jsonify, render_template
from web.auth import login_required
deauth_bp = Blueprint('deauth', __name__, url_prefix='/deauth')
def _get_deauth():
from modules.deauth import get_deauth
return get_deauth()
@deauth_bp.route('/')
@login_required
def index():
return render_template('deauth.html')
@deauth_bp.route('/interfaces')
@login_required
def interfaces():
return jsonify({'interfaces': _get_deauth().get_interfaces()})
@deauth_bp.route('/monitor/start', methods=['POST'])
@login_required
def monitor_start():
data = request.get_json(silent=True) or {}
interface = data.get('interface', '').strip()
return jsonify(_get_deauth().enable_monitor(interface))
@deauth_bp.route('/monitor/stop', methods=['POST'])
@login_required
def monitor_stop():
data = request.get_json(silent=True) or {}
interface = data.get('interface', '').strip()
return jsonify(_get_deauth().disable_monitor(interface))
@deauth_bp.route('/scan/networks', methods=['POST'])
@login_required
def scan_networks():
data = request.get_json(silent=True) or {}
interface = data.get('interface', '').strip()
duration = int(data.get('duration', 10))
networks = _get_deauth().scan_networks(interface, duration)
return jsonify({'networks': networks, 'total': len(networks)})
@deauth_bp.route('/scan/clients', methods=['POST'])
@login_required
def scan_clients():
data = request.get_json(silent=True) or {}
interface = data.get('interface', '').strip()
target_bssid = data.get('target_bssid', '').strip() or None
duration = int(data.get('duration', 10))
clients = _get_deauth().scan_clients(interface, target_bssid, duration)
return jsonify({'clients': clients, 'total': len(clients)})
@deauth_bp.route('/attack/targeted', methods=['POST'])
@login_required
def attack_targeted():
data = request.get_json(silent=True) or {}
return jsonify(_get_deauth().deauth_targeted(
interface=data.get('interface', '').strip(),
target_bssid=data.get('bssid', '').strip(),
client_mac=data.get('client', '').strip(),
count=int(data.get('count', 10)),
interval=float(data.get('interval', 0.1))
))
@deauth_bp.route('/attack/broadcast', methods=['POST'])
@login_required
def attack_broadcast():
data = request.get_json(silent=True) or {}
return jsonify(_get_deauth().deauth_broadcast(
interface=data.get('interface', '').strip(),
target_bssid=data.get('bssid', '').strip(),
count=int(data.get('count', 10)),
interval=float(data.get('interval', 0.1))
))
@deauth_bp.route('/attack/multi', methods=['POST'])
@login_required
def attack_multi():
data = request.get_json(silent=True) or {}
return jsonify(_get_deauth().deauth_multi(
interface=data.get('interface', '').strip(),
targets=data.get('targets', []),
count=int(data.get('count', 10)),
interval=float(data.get('interval', 0.1))
))
@deauth_bp.route('/attack/continuous/start', methods=['POST'])
@login_required
def attack_continuous_start():
data = request.get_json(silent=True) or {}
return jsonify(_get_deauth().start_continuous(
interface=data.get('interface', '').strip(),
target_bssid=data.get('bssid', '').strip(),
client_mac=data.get('client', '').strip() or None,
interval=float(data.get('interval', 0.5)),
burst=int(data.get('burst', 5))
))
@deauth_bp.route('/attack/continuous/stop', methods=['POST'])
@login_required
def attack_continuous_stop():
return jsonify(_get_deauth().stop_continuous())
@deauth_bp.route('/attack/status')
@login_required
def attack_status():
return jsonify(_get_deauth().get_attack_status())
@deauth_bp.route('/history')
@login_required
def history():
return jsonify({'history': _get_deauth().get_attack_history()})
@deauth_bp.route('/history', methods=['DELETE'])
@login_required
def history_clear():
return jsonify(_get_deauth().clear_history())