?>/script>'; } ?> BASH: Problema con salir de un loop desde otra funcion en background Widgets Magazine

Autor Tema: BASH: Problema con salir de un loop desde otra funcion en background  (Leído 3612 veces)

0 Usuarios y 1 Visitante están viendo este tema.

vk496

  • Visitante
Bueno, me estoy pelendo con el Bash estos ultimos dias, y no hay forma de conseguir lo que quiero...

El problema es que en un momento determinado de mi script, entro en un menu en el que el usuario tiene distintas opciones para poder desautentificar para conseguir el handshake de un AP. A su vez, antes de entrar en el menu, se ejecuta una funcion en el backround que se encarga de comprobar si el handshake ha sido capturado o no, y cuando se capturó, cerrarse a si misma y pasar al siguiente apartado (en mi caso, el siguiente apartado es webinterface). El problema de eso, es que todavía estaba abierto el menu, y no śe como poder cerrarlo para no crear problemas.


Código: [Seleccionar]
checkhandshakestatus=0

while [ "$checkhandshakestatus" = 0 ]; do
checkhandshake &


  echo "¿SE CAPTURÓ el HANDSHAKE?"
  echo "                                       "
  echo -e "      2) No (lanzar ataque de nuevo)"
  echo -e "      3) No (seleccionar otro ataque)" 
  echo -e "      4) Seleccionar otra red" 
  echo -e "      5) Salir"
  echo " "
  echo -n '      #> '
  read yn
  case $yn in

    2 ) capture; $DEAUTH ;;
    3 ) conditional_clear; askclientsel; break;;
    4 ) killall airodump-ng &>$linset_output_device; CSVDB=dump-01.csv; breakmode=1; selection; break ;;
    5 ) exitmode; break;;
    * ) echo "Opción desconocida. Elige de nuevo"; conditional_clear ;;
  esac

done

cuando la función del backround verifica que se capturó el handshake, modifica la variable checkhandshakestatus a valor 1. Al haber un case dentro del loop, no hay ningun avance hasta que el usuario no haga algo, para volver a verificar el valor de checkhandshakestatus y poder salir...


La función que se encarga de comprobar el handshake es esta:

Código: [Seleccionar]
function checkhandshake {

sleep 4
until [ "$checkhandshakestatus" = 1 ]; do

if aircrack-ng $DUMP_PATH/$Host_MAC-01.cap | grep -q "1 handshake"; then
  checkhandshakestatus=1
  killall airodump-ng &>$linset_output_device
  killall aircrack-ng &>$linset_output_device
  fi

if [ "$checkhandshakestatus" = 1 ]; then
break # Se sale del loop
fi

sleep 0.6
checkhandshakestatus=0
done

webinterface # Se avanza al proximo apartado
exit # Se cierra esta funcion del background
}


He probado sacando el PID de las funciones, y matandola cuando se encuentra el handshake, pero no me ha funcionado, porque devuelve un mensaje que el read del siguiente apartado interpreta como respuesta, y me devuelve un error de entrada y salida del script....

Alguna idea?  :-\

Salu2

SubSeven

  • Visitante
Re: BASH: Problema con salir de un loop desde otra funcion en background
« Respuesta #1 en: 19-01-2014, 12:26 (Domingo) »
una preguntita, y disculpa mi ignorancia pero, estas tratando de sacar el handshake con el aircrack?? no es con el airodump?, ahh y otra cosa tu funcion esta dentro del mismo script o esta en un script aparte,  porque si esta aparte a lo mejor la variable no es visible

deberias poner un poco mas del script para entender mejor lo que deseas hacer, xD

saludos y suerte

vk496

  • Visitante
Re: Re: BASH: Problema con salir de un loop desde otra funcion en background
« Respuesta #2 en: 19-01-2014, 12:57 (Domingo) »
El script está capturando el tráfico con airodump-ng, y para saber si se ha conseguido el handshake o no hago uso de aircrack-ng...

La función que quiero que se ejecute en background está dentro del script principal, y hago una llamada desde allí mismo.

El código de arriba es un fragmento del proyecto LINSET con el que estaba trasteando para ver si me salía, y es el que más cerca estaba de mi objetivo.

Quisiera implementar eso en vez de que el usuario elija una opción y tenga que ser llamada la función de forma normal, es decir, una comprobación constante en segundo plano.

Salu2

Solo sé que no sé nada...