diff options
Diffstat (limited to 'usr/bin/autowifi_dryrun')
-rwxr-xr-x | usr/bin/autowifi_dryrun | 101 |
1 files changed, 78 insertions, 23 deletions
diff --git a/usr/bin/autowifi_dryrun b/usr/bin/autowifi_dryrun index c9867106..68e38a8f 100755 --- a/usr/bin/autowifi_dryrun +++ b/usr/bin/autowifi_dryrun @@ -1,38 +1,61 @@ -#!/bin/sh -# ENV: -# the root directory (e.g. root=$PWD/../../ if run from here ) +#!/bin/sh cd $(dirname $(readlink -f $0)) -test "${1:-}" = 'quiet' && exec 2>&- + interface=${interface:-wlan0} root=${root:-../../} crackdir=$root/usr/lib/autowifi/plugins wifi_keys=$root/etc/autowifi/wifi_keys wifi_log=$root/var/log/autowifi.log +painmode=${painmode:-} # 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 -crack_wifi(){ - #SSID MAC FREQ ENCRYPTION - - ALL_RET=1 - for hack in $(find $root/usr/lib/autowifi/plugins -type f | sort -n); do - printf "%s" "Trying $(basename $hack) against $1 : " >&2 - key=$($hack "$@"); - ret=$? - if [ $ret -eq 0 ];then - echo "success!" >&2 - echo $1|$2|$encr|$key - ALL_RET=0 - else - echo "fail ..." >&2 + +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 - return $ALL_RET + 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" && exit 0 + 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) } wifi_init(){ wpa_supplicant_is_usable || start_wpa_supplicant /tmp/autowifi.wpa_supplicant @@ -40,12 +63,44 @@ wifi_init(){ . /tmp/${interface}.scan } loop_over_networks(){ - wifi_init - echo "SSID:MAC:FREQ:ENCRYPTION:key" + wifi_init for i in `seq 1 $WIFI_COUNT`; do - eval crack_wifi \"\${ESSID_${i}}\" \${MAC_${i}} \${FREQ_${i}} \${ENCRYPTION_${i}} + loop_over_cracks "$i" + if [ $? -eq 0 ]; then + return 0 + fi done } -loop_over_networks +loop_over_cracks(){ + i=$1 + KEY='' + for crack in $(find $crackdir -type f | sort -u); do + KEY="$(eval root=$root painmode=$painmode \$crack \"\${ESSID_${i}}\" \"\${MAC_${i}}\" \${FREQ_${i}} \${ENCRYPTION_${i}})" + if [ $? -eq 0 ]; then + eval echo \"\${MAC_${i}}\" \"\${ESSID_${i}}\" \${ENCRYPTION_${i}} \"\${KEY}\" + fi + done + return 1 +} +loop_cracks_over_networks(){ + wifi_init + for crack in $(find $crackdir -type f | sort -u); do + for i in `seq 1 $WIFI_COUNT`; do + KEY="$(eval root=$root \$crack \"\${ESSID_${i}}\" \"\${MAC_${i}}\" \${FREQ_${i}} \${ENCRYPTION_${i}})" + if [ $? -eq 0 ]; then + eval echo \"\${MAC_${i}}\" \"\${ESSID_${i}}\" \${ENCRYPTION_${i}} \"\${KEY}\" + fi + done + done + +} + +wifi_init +if [ -n "$1" ]; then + echo cracking $1 + connect_to_network_by_ssid "$1" +else + loop_cracks_over_networks +fi |