#!/bin/sh -x cd $(dirname $(readlink -f $0)) interface=${interface:-wlan0} root=${root:-../../} crackdir=$root/usr/lib/autowifi/plugins wifi_keys=$root/etc/autowifi/wifi_keys # exists() run_hooks() . $root/usr/lib/autowifi/lib/core . $root/usr/lib/autowifi/lib/network # start_wpa_supplicant() . $root/usr/lib/autowifi/lib/wpa_supplicant connect(){ #mac ssid encryption key run_hooks interface pre run_hooks profile pre connect_wifi "$@" ip_start dhcp if check_gateway && check_internet; then echo yay internet >&2 run_hooks interface post run_hooks profile post write_profile "$@" return 0 fi return 1 } write_profile(){ bandw=$(check_bandwidth) (cat $wifi_keys | grep -v "|$1|" ; echo "$2|$1|$bandw|$4" ) | sort | uniq > "${wifi_keys}2" mv "${wifi_keys}2" "$wifi_keys" } find_count_of_ssid(){ c=0 for i in `seq 1 $WIFI_COUNT`; do eval SSID=\${ESSID_${i}} if [ "$SSID" = "$1" ]; then c+=1 echo "$i" fi done if [ $c -eq 0 ];then exit 1 fi exit 0 } connect_to_network_by_ssid(){ find_count_of_ssid "$1" | (while read i do loop_over_cracks $i done;exit 1) if [ $? -eq 0 ]; then exit 0 fi echo "no network found :(" exit 1 } connect_with_pw(){ find_count_of_ssid "$1" | (while read i do KEY="$2" eval connect \"\${MAC_${i}}\" \"\${ESSID_${i}}\" \${ENCRYPTION_${i}} \"\${KEY}\" if [ $? -eq 0 ]; then exit 0 fi done;exit 1) } loop_over_networks(){ for i in `seq 1 $WIFI_COUNT`; do loop_over_cracks $i if [ $? -eq 0 ]; then exit 0 fi done } loop_over_cracks(){ i=$1 KEY='' for crack in $(find $crackdir -type f | sort -u); do KEY="$(eval root=$root \$crack \"\${ESSID_${i}}\" \"\${MAC_${i}}\" \${FREQ_${i}} \${ENCRYPTION_${i}})" if [ $? -eq 0 ]; then eval connect \"\${MAC_${i}}\" \"\${ESSID_${i}}\" \${ENCRYPTION_${i}} \"\${KEY}\" if [ $? -eq 0 ]; then return 0 fi fi done return 1 } #scan_all(){ # for i in `seq 1 $WIFI_COUNT`; do # loop_over_cracks $i # done #} # #scan_unscanned(){ # find_unscanned_networks | (while read i # do # loop_over_cracks $i # done) #} #find_unscanned_networks(){ # #TODO broken # for i in `seq 1 $WIFI_COUNT`; do # eval SSID=\${ESSID_${i}} # eval MAC=\${MAC_${i}} # cat $wifi_stats 2>/dev/null | (while IFS='|' read SSID MAC BANDW KEY; do # if [ "$1" = "$SSID" -a "$2" = "$MAC" ]; then # continue # fi # done; echo $i) # done # exit 0 #} start_wpa_supplicant /tmp/autowifi.wpa_supplicant wifi_scan > /tmp/${interface}.scan . /tmp/${interface}.scan if [ -n "$2" ]; then echo connecting to $1 with pw $2 connect_with_pw "$1" "$2" elif [ -n "$1" ]; then echo connecting to $1 connect_to_network_by_ssid "$1" else echo looping network now loop_over_networks fi