]> git.llucax.com Git - software/wpe.git/blob - rotate-key
Add ifconfig and iwconfig commands path as configuration variables.
[software/wpe.git] / rotate-key
1 #!/bin/sh
2
3 # Copyleft 2006 - Leandro Lucarella <luca at llucax.com.ar>
4 # This script is under the BOLA license, please see the LICENSE file.
5
6 # Must edit
7 ###########
8 # Wireless interface
9 IFACE="wlan0"
10 # Base key used to compute the actual key
11 KEY_BASE="My WEP is better than yours"
12 # Security mode (open/restricted)
13 SECURITY_MODE="open"
14 # Comment this if you don't want to rotate the channel
15 ROTATE_CHANNEL="on"
16 # Channels supported by the wireless interface
17 MAX_CHANNEL=11
18 # Uncomment if you want the script to work only if you're on a specific essid
19 #ESSID="myessid"
20 # Uncomment if your wireless interface need the commit command
21 #COMMIT="commit"
22
23 # May edit
24 ##########
25 # The format has to be in date(1) format, and probably has to have a relation
26 # with the frequency the script is executed. The default value is useful for a
27 # 1/2 day frequency (rotation every 12 hs). date(1) is executed with C locale so
28 # %p can be used.
29 # A good crontab line for this is:
30 # 0 0,12 * * * /path/to/script
31 KEY_FORMAT="$KEY_BASE%D%p"
32 # Key size, 1-5 for 64bit encryption, 6-13 for 128bit encryption
33 KEY_SIZE=13
34 # Hash command/algorithm used to compute the actual key
35 HASH_PROG="sha1sum"
36 # ifconfig path
37 IFCONFIG="/sbin/ifconfig"
38 # iwconfig path
39 IWCONFIG="/sbin/iwconfig"
40
41 # Do not touch
42 ##############
43 # Unless you know what you're doing, and in that case, send me the patch ;)
44
45 export LANG=C
46
47 # Check if interface exists
48 if ! $IFCONFIG "$IFACE" > /dev/null 2>&1
49 then
50   exit 0
51 fi
52
53 # Check if they are using our essid
54 if [ -n "$ESSID" ]
55 then
56   curr_essid=`$IWCONFIG $IFACE | grep ESSID \
57       | sed 's/.*ESSID:"\([^"]\+\)".*/\1/'`
58   if [ "$curr_essid" != "$ESSID" ]
59   then
60     exit 0
61   fi
62 fi
63
64 # Compute the new key
65 str=`date +"$KEY_FORMAT"`
66 size=$(($KEY_SIZE * 2))
67 key=`echo "$str" | $HASH_PROG | cut -c-$size`
68
69 # Compute the new channel
70 if [ -n "$ROTATE_CHANNEL" ]
71 then
72   chan=1`echo $key | tr abcdef 847502 | cut -c-6`
73   chan=$(($chan % $MAX_CHANNEL + 1))
74   channel="channel $chan"
75 fi
76
77 # Commit changes
78 $IWCONFIG $IFACE key $SECURITY_MODE $key $channel $COMMIT
79
80 # vim: set et sw=2 sts=2 :