summaryrefslogtreecommitdiffstats
path: root/usr/bin/autowifi
diff options
context:
space:
mode:
Diffstat (limited to 'usr/bin/autowifi')
-rwxr-xr-xusr/bin/autowifi177
1 files changed, 177 insertions, 0 deletions
diff --git a/usr/bin/autowifi b/usr/bin/autowifi
new file mode 100755
index 00000000..6b9a090c
--- /dev/null
+++ b/usr/bin/autowifi
@@ -0,0 +1,177 @@
+#!/bin/sh
+cd $(dirname $(readlink -f $0))
+
+
+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
+
+
+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 '^#' | grep -v "|$1|" ; echo "$2|$1|$bandw|$4" ) | ( echo "#SSID|MAC|BANDWIDTH|KEY";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" && 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
+ wifi_scan > /tmp/${interface}.scan
+ . /tmp/${interface}.scan
+}
+loop_over_networks(){
+
+ wifi_init
+ for i in `seq 1 $WIFI_COUNT`; do
+ loop_over_cracks "$i"
+ if [ $? -eq 0 ]; then
+ return 0
+ fi
+ done
+}
+
+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 connect \"\${MAC_${i}}\" \"\${ESSID_${i}}\" \${ENCRYPTION_${i}} \"\${KEY}\"
+ if [ $? -eq 0 ]; then
+ return 0
+ fi
+ 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 connect \"\${MAC_${i}}\" \"\${ESSID_${i}}\" \${ENCRYPTION_${i}} \"\${KEY}\"
+ if [ $? -eq 0 ]; then
+ return 0
+ fi
+ fi
+ done
+ done
+
+}
+
+#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
+#}
+
+wifi_init
+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
+ check_internet || loop_cracks_over_networks
+
+ while sleep 10; do
+ if ! check_gateway; then
+ loop_cracks_over_networks
+ fi
+ done
+fi