Как стать автором
Обновить

Пляски с роутером DLink

Время на прочтение2 мин
Количество просмотров842
Как же надоедают эти постоянные обрывы Укртелекомовских интернетов. Вроде и линия в порядке, и роутер правильно настроен, но стабильно работать интернет отказывается. Все бы хорошо, если бы это не влияло на мою непосредственную работу. Я фрилансер, что в переводе означает проснулся — и уже на работе. То есть любые незапланированные сбои (у меня в городе бывают и сбои по плану) мягко говоря не очень радуют и сказываются на производительности.

Ну да ладно, не буду ныть — к делу.

Во время очередной забастовки моего роутера решил автоматизировать процесс его перезагрузки, что обычно ведет за собой подключение ppp-соединения. Написал баш-скрипт, который подключается к моему DLink-у, логинится и запрашивает файл rebootinfo.cgi. Весь этот процесс успешно помещается в цикл «пока не будет инета», а я соответственно — перемещаюсь на кухню пить чай. Все просто. Vim в руки — и поехали:

#!/bin/bash
host=${host:="4.2.2.2"}
router_ip="192.168.1.1"
router_reboot_path="/rebootinfo.cgi"
router_user="admin"
router_pw="pw_here"
num_packets=4
receiving=""
reboots=1
connect_wait=60
while [ "$receiving" == "" ]
do
        echo -ne `date +%T`"\t"
        echo "pinging $host with $num_packets packets"
        receiving=`ping $host -c $num_packets | grep "$num_packets received"`
        if [ "$receiving" != "" ]
        then
                echo -ne `date +%T`"\t"
                echo "$host is alive"
        else
                echo -ne `date +%T`"\t"
                echo "$host not responding"
                echo -ne `date +%T`"\t"
                echo -n "reboot router - attempt $reboots"
                let "reboots += 1"
                `curl -s -u $router_user:$router_pw "http://$router_ip$router_reboot_path" > /dev/null`
                sleep 10
                routerAlive=""
                while [ "$routerAlive" == "" ]
                do
                        routerAlive=`ping $router_ip -c $num_packets | grep "$num_packets received"`
                        if [ "$routerAlive" != "" ]
                        then
                                echo "done. "
                                echo -ne `date +%T`"\t"
                                echo -n "waiting $connect_wait sec for possible connect"
                                sec=0
                                while [ "$sec" != $connect_wait ]
                                do
                                        let "sec += 1"
                                        if [ "$sec" == $connect_wait ]
                                        then
                                                echo "."
                                        else
                                                echo -n "."
                                        fi
                                        sleep 1
                                done
                        else
                                echo -n "."
                        fi
                done
        fi
done

Приблизительный вывод:

$ ./routerReboot
23:25:48        pinging 4.2.2.2 with 4 packets
23:26:01        4.2.2.2 not responding
23:26:01        reboot router - attempt 1.....done. 
23:27:10        waiting 60 sec for possible connect............................................................
23:28:11        pinging 4.2.2.2 with 4 packets
23:28:14        4.2.2.2 is alive

Правда приходилось разбираться в баше без гугла — сам-то я в нем не силен, так что искал скрипты в /usr/lib, чтоб по примеру, читал мануал. В конечном итоге скрипт заработал (правда инет появился быстрее :). Спустя некоторое время он мне действительно пригодился.

Да, 4.2.2.2 — все время пингуется, так что можно юзать вместо ya.ru. К тому же с помощью него можно проверить ДНС.

С пятницей!
Теги:
Хабы:
Всего голосов 11: ↑8 и ↓3+5
Комментарии15

Публикации