#!/bin/bash wpa_ret ( ) { if [ $1 != "OK" ] then if [ $3 == 1 ] then wpa_cli remove_network $2>/dev/null echo "wpa_cli command failed on $2" fi exit 1 fi } connect_ap ( ) { #if [ $1 -eq 1 ] #then ssid=\""$2"\" pw=\""$3"\" declare -i scantimes=1 nw_no=$(wpa_cli add_network | sed '1d') ret=$(wpa_cli set_network $nw_no ssid $ssid | sed '1d') echo "Set ssid for nw $nw_no: $ret" wpa_ret $ret $nw_no 1 if [ $5 == "WPA" -o $5 == "WPA2" ] then ret=$(wpa_cli set_network $nw_no psk $pw | sed '1d') echo "Set PSK: $ret" wpa_ret $ret $nw_no 1 elif [ $5 == "WEP40" -o $5 == "WEP128" -o $5 == "OPEN" ] then ret=$(wpa_cli set_network $nw_no key_mgmt NONE | sed '1d') echo "Set Key-mgmt: $ret" wpa_ret $ret $nw_no 1 ret=$(wpa_cli set_network $nw_no auth_alg OPEN | sed '1d') echo "Set Aith-alg: $ret" wpa_ret $ret $nw_no 1 if [ $5 != "OPEN" ] then ret=$(wpa_cli set_network $nw_no wep_key0 $pw | sed '1d') echo "Set wep key: $ret" wpa_ret $ret $nw_no 1 fi fi #echo "Set proto" #ret=$(wpa_cli set_network $nw_no proto WPA | sed '1d') #wpa_cli status #echo $ret #wpa_ret $ret $nw_no 1 #echo "Set key_mgmt" #ret=$(wpa_cli set_network $nw_no key_mgmt WPA-PSK | sed '1d') #wpa_cli status #echo $ret #wpa_ret $ret $nw_no 1 #echo "Set pairwise" #ret=$(wpa_cli set_network $nw_no pairwise CCMP | sed '1d') #wpa_cli status #echo $ret #wpa_ret $ret $nw_no 1 #echo "Set group" #ret=$(wpa_cli set_network $nw_no group CCMP | sed '1d') #wpa_cli status #echo $ret #wpa_ret $ret $nw_no 1 ret=$(wpa_cli enable_network $nw_no | sed '1d') echo "Enable nw $nw_no: $ret" wpa_ret $ret $nw_no 1 #echo "Connect" #ret=$(wpa_cli reconnect | sed '1d') #wpa_cli status #echo $ret #wpa_ret $ret $nw_no 1 state=$(wpa_cli status -i $1 | grep wpa_state | sed 's/wpa_state=//g') form_st="INACTIVE" while [ $state != "COMPLETED" ] do if [ $form_st != $state ] then echo "Status: $state" fi if [ $state == "SCANNING" ] then sleep 1 elif [ $state == "DISCONNECTED" ] then if [ $scantimes <= $4] then echo "Connect" ret=$(wpa_cli reconnect | sed '1d') wpa_ret $ret $nw_no 1 $scantimes=$scantimes + 1 else echo "exceed scan times=$scantimes" fi fi form_st=$state state=$(wpa_cli status -i $1 | grep wpa_state | sed 's/wpa_state=//g') done if [ $state == "COMPLETED" ] then echo "Connected and request for IP address" dhclient -4 $1 >/dev/null fi #fi } if [ $# -eq 5 ] then echo "Scanning" declare -i total_scantime=$4 for((i=1; i<=$4; i=i+1)) do echo "scan loop:$i" scan_st=$(wpa_cli scan -i $1) total_scantime=total_scantime-1 sleep 2 result=$(wpa_cli scan_results -i $1 | grep -c $2) if [ $result -eq 1 ] then echo "Target AP $2 is found." break; fi done if [ $result -eq 1 ] then connect_ap $1 $2 $3 $total_scantime $5 else echo "Target ap is not found" fi elif [ $3 == "off" ] then echo "Disconnect AP" dhclient -r $1 >/dev/null dhclient -x >/dev/null nw_no=$(wpa_cli list_network | grep CURRENT | awk '{print $1}') echo "Disable network" ret=$(wpa_cli disable_network $nw_no | sed '1d') wpa_ret $ret $nw_no 1 echo "Remove network" ret=$(wpa_cli remove_network $nw_no | sed '1d') wpa_ret $ret $nw_no 0 else echo "=====================================================================================" echo "manual scan & connect script" echo "./scan_conn.sh " echo "./scan_conn.sh off" echo "=====================================================================================" fi