Seena

Script to reset Bell Canada modem

Jul 4th, 2013
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.16 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. # Script to check if internet is reachable and if not reset BELL modem
  4. # DATE=$(date +'%d/%m/%Y %H:%M:%S')
  5. # echo "********** $DATE WIRELESS CHECK STARTED **********"
  6.  
  7. # if script already running -> exit
  8. if [ -f /home/se/checking-internet ]; then
  9.   # echo "Script already running. Exiting now..."
  10.   exit
  11. fi
  12. # Create lockfile
  13. touch /home/se/checking-internet
  14.  
  15. # Check if Ipadress has changed
  16. ipcheck () {
  17.   curr_ip=$(curl --silent --max-time 5 http://ipecho.net/plain)
  18.  
  19.   # If curl was successfull compare old ip with current ip
  20.   if [ $? -eq 0 ] && [ ! -z "$curr_ip" ]; then
  21.     #echo "Current IP is: $curr_ip"
  22.     old_ip=`cat /home/se/ipaddress`
  23.     #echo "Old IP was: $old_ip"
  24.  
  25.     # If Ip differs write log
  26.     if [ "$old_ip" != "$curr_ip" ]; then
  27.       change_date=$(date +'%d/%m/%Y %H:%M:%S')
  28.       echo "$change_date: Adress has changed from $old_ip to $curr_ip \n\n"
  29.       # Write new IP into file
  30.       echo "$curr_ip" > /home/se/ipaddress
  31.     fi
  32.  
  33.   # If curl fail, just ignore
  34.   else
  35.     change_date=$(date +'%d/%m/%Y %H:%M:%S')
  36.     # echo "$change_date: Could not determine external IP. Ignored.\n\n"
  37.   fi
  38. }
  39.  
  40. # Check if internet is reachable
  41. start_time=`date +%s`
  42. a=0
  43. reachable=0
  44. # Try 3 times for max. 20min each to see if internet works.
  45. # Multiple times prevents modem reboot due to temporary DNS errors
  46. # If Bell transiently block internet access the we have up to 1h patience
  47. while [ $a -lt 3 ]; do
  48.   curl --silent --show-error --max-time 3 --retry 9 --retry-max-time 600 --head www.google.ca >/dev/null
  49.   if [ $? -eq 0 ];then
  50.     reachable=1
  51.     break
  52.   else
  53.     a=`expr $a + 1`
  54.     sleep 10
  55.   fi
  56. done
  57.  
  58. # Computing runtime
  59. end_time=`date +%s`
  60. run_time=$((end_time-start_time))
  61. run_min=`date -u -d @${run_time} +"%T"`
  62.  
  63. # If reachable during the course of all curl retries
  64. if [ $reachable -eq 1 ]; then
  65.   # If internet reachable within a minute: check ip and exit (normal case)
  66.   if [ $run_time -le 60 ]; then
  67.     # echo "Internet running fine. Checking if IP has changed."
  68.     ipcheck
  69.     rm /home/se/checking-internet
  70.     exit
  71.   # If internet is reachable after some tries, echo to log
  72.   else
  73.     echo "Internet was not reachable for $run_min (h:m:s)"
  74.     reach_time=$(date +'%d.%m.%Y %H:%M:%S')
  75.     echo "Since $reach_time internet is reachable again.\n\n"
  76.     # Check if IP has changed
  77.     ipcheck
  78.     rm /home/se/checking-internet
  79.     exit
  80.   fi
  81. fi
  82.  
  83. # If not reachable check if router is reachable
  84. change_date=$(date +'%d/%m/%Y %H:%M:%S')
  85. echo "$change_date: Internet not reachable since $run_min (h:m:s). Pinging router..."
  86. ping -c 3 -W 10 192.168.12.1 >/dev/null
  87.  
  88. # If not reachable - reset wlan connection
  89. if [ $? -ne 0 ]; then
  90.   echo 'Router not reachable. Reseting wireless.'
  91.   service network-manager restart
  92.   sleep 5
  93.   echo "Exiting..."
  94.   rm /home/se/checking-internet
  95.   exit
  96. # if router is reachable, modem must be crashed
  97. else
  98.   echo "Router is reachable. Taking modem down"
  99.   curl --silent --user admin:admin -d "action=submit&page=resets&factory_reset=reboot" 192.168.2.1
  100.   echo "Modem rebooting. Waiting 5min..."
  101.   sleep 300
  102.   echo "Exiting...\n\n"
  103.   rm /home/se/checking-internet
  104.   exit
  105. fi
Advertisement
Add Comment
Please, Sign In to add comment