#!/bin/sh try_wps_pin(){ # # ESSID MAC CHANNEL ENC WPA WPA2 PIN #set -ef ESSID="$1" MAC="$2" CHANNEL="$3" ENC="$4" WPA="$5" WPA2="$6" PIN="$7" [ "$ENC" == off ] && return 2 WPA_CONF=/tmp/wpa.conf WPA_LOG=/tmp/wpa.log rm $WPA_LOG #mkfifo $WPA_LOG killall wpa_supplicant && sleep 1 cat > $WPA_CONF <<EOF ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=0 update_config=1 EOF wpa_supplicant -Dwext -iwlan0 -c $WPA_CONF -f $WPA_LOG & sleep 2 if !(sudo wpa_cli wps_reg $MAC $PIN | grep -q OK) ;then echo "wpa_cli wps_reg failed, bailing out!" return 1 fi WPA_PID=$! #*"WPA: Key negotiation completed"*) # association failed # exit 1 ;; if ( tail -f $WPA_LOG & echo "TAILPID: $!" )| while read line ; do bye(){ kill -HUP $TAILPID exit $1 } echo $line case "$line" in TAILPID:*)IFS=" " set -- $line; TAILPID=$2;; *"WPS-FAIL msg=10 config_error=18"*) bye 1 ;; # wrong pin *"CTRL-EVENT-EAP-FAILURE EAP authentication failed"*) bye 1;; # rate limiting *CTRL-EVENT-DISCONNECTED*):;; *CTRL-EVENT-CONNECTED*) bye 0;; #yay connected esac done ; then #echo "Connected!" sed -n 's/[ \t]*psk="\(.*\)"$/\1/p' $WPA_CONF return 0 else echo "failed!" return 1 fi kill $WPA_PID }