#!/bin/sh ########################################## # simthefon.sh # # # # simulate an active LaFonera with an # # alternative firmware on maps.fon.com # # # # First version made by # # fon.freddy.eu.org@freddy.eu.org # # http://fon.freddy.eu.org/ # # # # modified by futejia # # futejia.blog@gmail.com # # http://futejia.blogspot.com/ # # # # updated to work on dd-wrt (2007-02-02) # # http://www.krikkit.net/contact # # # # made it working (2007-02-05) # # MailTo ben@wildblue.de # # # # A step by step guide is available at # # www.wildblue.de/fonera/heartbeat/howto # # # ########################################## # version 2.0.0 (modified for DD-WRT) # # version 2.0.1 (autodetection MAC) # # version 2.0.2 (added cron mode) # # version 2.0.3 (changed MAC-retrival) # # version 2.0.4 (changed update freq.) # ########################################## echo "***********************************************************" echo "* simthefon - heartbeat script for the LaFonera *" echo "* This script makes your LaFonera active on maps.fon.com *" echo "* *" echo "* Version 2.0.4 *" echo "* This Version made by ben@wildblue.de *" echo "***********************************************************" WLMAC="$(nvram get ath0_hwaddr )" #the WLAN mac-adress MAC="$(nvram get et0macaddr)" #the WAN mac-adress FONREV=2 FIRMWARE=0.7.1 FONKEY=/tmp/simthefon/key #the path to the fon-public-key DEVICE="fonera" CHILLVER="1.0" THCLVER="1.0" echo echo "Your WLAN MAC is: " $WLMAC echo "Your Ethernet MAC is:" $MAC echo echo "* starting ..." echo "mode='start' wlmac='$WLMAC' mac='$MAC' fonrev='$FONREV' firmware='$FIRMWARE' chillver='$CHILLVER' thclver='$THCLVER' device='$DEVICE'" | dbclient -T -p 1937 -i $FONKEY openwrt@download.fon.com > startscript exec_every_mode () { echo "* making connection to fon" echo "mode='cron' wlmac='$WLMAC' mac='$MAC' fonrev='$FONREV' firmware='$FIRMWARE'" | dbclient -T -p 1937 -i $FONKEY openwrt@download.fon.com > newscript if cat newscript | grep http > /dev/null 2>&1 then echo "* downloading a new version" DWL_DATE=$(date +%Y%m%d-%H%M) FON_FILE=$DWL_DATE.fon wget -q -O $FON_FILE $(cat newscript | grep http | awk '{print $2}') rm newscript #begin untar package dd if=$FON_FILE of=VERSION_FILE bs=1 count=4 > /dev/null 2>&1 VERSION=$(cat VERSION_FILE) rm VERSION_FILE dd if=$FON_FILE of=OFFSET_FILE bs=1 count=3 skip=4 > /dev/null 2>&1 OFFSET=$(expr $(cat OFFSET_FILE)) rm OFFSET_FILE dd if=$FON_FILE of=SIGNATURE_FILE bs=1 count=$OFFSET skip=7 > /dev/null 2>&1 rm SIGNATURE_FILE TO_SKIP=$(expr $OFFSET + 7) dd if=$FON_FILE of=tar_file bs=1 skip=$TO_SKIP > /dev/null 2>&1 tar zx -f ./tar_file rm ./tar_file UPGRADE_FILE=$(cat upgrade | grep tar | awk '{print $3}') rm -f ./upgrade rm -f hotfix mkdir fon-firmware > /dev/null 2>&1 tar xzf $UPGRADE_FILE -C fon-firmware/ rm $UPGRADE_FILE #end untar package #begin get new versions FONREV=$(cat fon-firmware/etc/fon_revision) FIRMWARE=$(cat fon-firmware/etc/fon_version) echo "* Version is now $FIRMWARE, Revision is now $FONREV" #end get new versions else echo "* Can't find a new version"; fi } exec_cron_mode () { echo "* Cron Mode - repeating must be done with a cronjob!" echo exec_every_mode exit } exec_standard_mode () { while true; do echo "* Standard mode - Repeating is done with a sleep command!" echo exec_every_mode RANDOM_S=$((0x$(head -c2 /dev/urandom | hexdump | awk '$2 > 0 {print $2}') % 1800)) TIMTS=$(echo "`expr 1800 + $RANDOM_S`") echo "* going to sleep for $TIMTS seconds" sleep $TIMTS done; exit } case "$1" in cron) exec_cron_mode ;; *) exec_standard_mode exit esac