Wifiweasel
From Openmoko
(→comments) |
(→timeout) |
||
| Line 88: | Line 88: | ||
====timeout==== | ====timeout==== | ||
Added a timeout script to keep udhcpc from hanging everything. | Added a timeout script to keep udhcpc from hanging everything. | ||
| − | As we all know, dhcp should not take 60sec | + | As we all know, dhcp should not take 60sec <br> |
INSTALL /usr/bin/timeout | INSTALL /usr/bin/timeout | ||
<pre> | <pre> | ||
Revision as of 05:37, 23 July 2008
script to Auto connect to Open 802.11 wireless AP's
Contents |
wifiweasel
wifiweasel v2 - once run this script takes control of the wireless interface, then detects and connects to strongest open wifi AP in the vicinity. Subsequently it checks the connectivity every X seconds. If the connection fails, the whole process repeats itself; this requires the timeout script below (needs to be tested with multiple AP's - might have an iwconfig essid glitch).
#!/bin/sh
##### WifiWeasel ###### Ver. 2
########################### 08-07-22
#/var/wifi/hacker/kd8ikt###
# OMG i'm programming now!#
###########################
###we.trekbeyond.org#######
#####################
#install /usr/bin/wifiweasel
#
#Variables
IFACE=eth0
DHCP_TIMEOUT=3 # requires /usr/bin/timeout
CHECK_NET_TIMER=15 #secs
TEMPDIR=/mnt/wifiweasel/
#
#Functions
#
#(dont touch unless you
#know wtf your doing
#
#### Scan Funk
Func_iwlist_open () {
iwlist $IFACE scanning | awk -F '[ :=]+' '/(ESS|Freq|Qual)/{ printf $3" " } /Encr/{ print $4 }' \
| sort -k4 -k3nr |grep -m1 off \
|awk '{print $1}' > /tmp/wifiweasel/scan
cat $TEMPDIR/scan |grep '"' -m1 > $TEMPDIR/scan1
sed /\"/s/\"//g $TEMPDIR/scan1 > $TEMPDIR/ESSID
echo
echo Using ESSID
cat $TEMPDIR/ESSID
echo
}
#### interface down Funk
Func_ifconfig_down () {
killall udhcpc
ifconfig $IFACE down
}
#### iface up Funk
Func_ifconfig_up () {
iwconfig $IFACE essid `cat $TEMPDIR/ESSID`
}
#### Connection check Funk
Func_chk_net () {
echo checking...
ping -w 2 -c1 $dns
if [ $=0 ];then ERROR=0; echo; echo Online! W00T ; echo ; sleep $CHECK_NET_TIMER ; Func_chk_net ;
fi #W00T
if [ $=1 ] ; then ERROR=1 ;echo ;echo FAIL!\
... Searching ; echo ; Func_Main ;
fi
}
#### Main loop Funk
Func_MAIN () { while [ ERROR=1 ] ; do
Func_ifconfig_down ;
Func_iwlist_open Func_ifconfig_up ;
timeout $DHCP udhcpc $IFACE ;
export dns=`cat /etc/resolv.conf |grep name |awk '{print $2}'`
Func_chk_net ;
Func_MAIN ;
done;
}
#Prep
mkdir $TEMPDIR
touch $TEMPDIR/scan
touch $TEMPDIR/scan1
touch $TEMPDIR/ESSID
# RunProgram
Func_ifconfig_down
Func_iwlist_open Func_ifconfig_up
timeout $DHCP udhcpc $IFACE
export dns=`cat /etc/resolv.conf |grep name |awk '{print $2}'`
Func_chk_net
Func_MAIN
echo This is the end, my only friend the end
Done; #actually i dont think it ever ends but i'm done writing it
#####################EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#EOF#########
timeout
Added a timeout script to keep udhcpc from hanging everything.
As we all know, dhcp should not take 60sec
INSTALL /usr/bin/timeout
#Newsgroups: comp.unix.admin,comp.unix.solaris,comp.unix.shell
#From: gwc@root.co.uk (Geoff Clare)
#Subject: Re: timeout -t <sec> <unix command> (Re: How to give rsh a shorter timeout?)
#Message-ID: <EoBxrs.223@root.co.uk>
#Date: Fri, 13 Feb 1998 18:23:52 GMT
#
# Conversion to bash v2 syntax done by Chet Ramey <chet@po.cwru.edu
# UNTESTED
#
prog=${0##*/}
usage="usage: $prog [-signal] [timeout] [:interval] [+delay] [--] <command>"
SIG=-TERM # default signal sent to the process when the timer expires
timeout=60 # default timeout
interval=15 # default interval between checks if the process is still alive
delay=2 # default delay between posting the given signal and
# destroying the process (kill -KILL)
while :
do
case $1 in
--) shift; break ;;
-*) SIG=$1 ;;
[0-9]*) timeout=$1 ;;
:*) EXPR='..\(.*\)' ; interval=`expr x"$1" : "$EXPR"` ;;
+*) EXPR='..\(.*\)' ; delay=`expr x"$1" : "$EXPR"` ;;
*) break ;;
esac
shift
done
case $# in
0) echo "$prog: $usage" >&2 ; exit 2 ;;
esac
(
for t in $timeout $delay
do
while (( $t > $interval ))
do
sleep $interval
kill -0 $$ || exit
t=$(( $t - $interval ))
done
sleep $t
kill $SIG $$ && kill -0 $$ || exit
SIG=-KILL
done
) 2> /dev/null &
exec "$@"
comments
not sure but i think one has to make the /tmp/ files manually
- fixed as of v2
sandbox
iwscan perl
#!/usr/bin/perl
# Tim Osburn - tim@osburn.com
#
# install perl
$iwlist = "/sbin/iwlist eth0 scanning";
open scan, "$iwlist |";
while (<scan>) {
if (/^\s+Cell (\S+) - Address: (\S+)/) {
$CELL=$1;
$ADDRESS=$2;
# print "$1 $2";
$INLOOP=1;
}
if (/^\s+ESSID:(\S+)/) {
$ESSID=$1;
print " $1";
}
if (/^\s+Frequency:\S+ \S+ \(Channel (\S+)\)/) {
$CHAN=$1;
print " $1";
}
if (/^\s+Quality=\S+\s+Signal level=(\S+).*/) {
$SIGNAL=$1;
print " $1";
}
if (/^\s+Encryption key:(\S+)/) {
$ENCRYPTION=$1;
print " $1\n";
}
}
close scan;
produces output in the form of "essid" channel signal_strength encryption_status
"ESSID_NAME1" 1 -82 on
"ESSID_NAME2" 1 -49 off
