Скрипты перезагрузки модема

Не так давно я задался целью немного облегчить свою работу. Все дело в том, что я администратор одной из минских домашних сетей. Работа интересная, творческая, но рутины хватает. Есть сервера, поэтому хочется автоматизма.

Когда модемы долго работают, они начинают тормозить или терять связь. У кого дома стоит ADSL – модем или кто когда-нибудь звонил на техническую поддержку интернет провайдера помнит, что первый вариант решения проблемы: перезагрузите модем. Да, бывает это не так часто, но всеже. А если ты не дома, то что делать? Да и почему бы в качестве перестраховки не сделать так, чтобы можемы перезагружались автоматически? Сказано сделано. Порывшись в интернете я не нашел ничего путного под линукс. Были попытки написать какие-то скрипты под Винду. Но мне это не подходило.

Немного расстроившись, я решил обратиться за помошью к братьям линуксоидам. Естественно, скрипты мне никто не написал, но вот натолкнули на решение проблемы, подкинув ссылку:

http://ru.wikipedia.org/wiki/Expect

Покопав в этом направлении, я понял, что именно этот скриптовой язык и поможет мне решить проблему. Прочем решить ее универсально, написать скрипты для каждой модели модема с минимальными измененями. Как я понял скриптовой язык Expect позволяет парсить выводимую информацию и после определенных фраз вводить те или иные значения. Это стало очень важным, потому что в модемах Zyxel работает специальная оболочка и до командной строки еще добраться надо, это вам не D-Link где все просто: ввел команду и получи сразу результат.

!!!Важно!!!

Перед тем как запускать приведенные скрипты необходимо установить соответствующий пакет, для того чтобы Linux понимал данный скриптовой язык.  Поскольку я являюсь фанатом Linux Debian, то команда установки выглядит следующим образом:


Разработка алгоритма для перезагрузки модема
D-Link DSL-2540U

Что мы делаем для того, чтобы перезагрузить модем через telnet? Мы вводим соответствующие команды в терминале и модем их выполняет. Для перезагрузки модема D-Link мы используем следующие команды:

  1. Подключаемся к модему командой telnet ip-модема
  2. Имя пользователя (модем может запрашивать, а может и не запрашивать.
  3. Вводим пароль.
  4. Вводим команду reboot и ждем пока перезагрузится модем
  5. Выходим из консоли, часто просто закрыв ее, потому что она подвисает после разрыва соединения связанного с перезагрузкой.

Для написания скрипта используются все те же команды, с применением некоторых служебных слов, чтобы указать компьютеру как и что ему делать.  Я не буду подробно расписывать все возможности языка, а непосредственно перейду к решению поставленной задачи. Того что я опишу будет достаточно, чтобы реализовать много задач. Я лишь поясню и прокомментирую те команды, которые были использованы.

Скрипт перезагрузки модема D-Link DSL-2540U

Теперь разберемся в командах. (для непосвященных)

#!/usr/bin/expect -f –директива компилятору чтобы он знал какой скриптовой язык мы используем.

Следующим шагом можно инициализировать переменные. Но я не думаю, что это стоит делать, ведь мы пишем совсем маленький скрипт и само собой перегружать его еще и бесполезными переменными (переменные в данном случае бесполезны поскольку мы не проводим с ними никаких логических операций, а значения присвоенные переменным в процессе работы скрипта используются всего 1 раз, так что смысла в этом нет). Как говорится, краткость сестра таланта.

Теперь перейдем к командам выполняемым скриптом. Вся простота и перелесть заключается в том,  что мы не придумаваем ничего нового, просто используем знакомые нам команды.

Для простоты восприятия хочу отметить, что

spawn telnet 192.168.1.1Команда подключения к модему. Вместо 192.168.1.1 введите IP-адрес Вашего модема.

expect — Команда, которая парсит текст, выводимый в терминал устройством и ищел соответствующее слово или форазу указанное после него в кавычках ” “. Правильно введенная фраза — гарантия того, что скрипт отработает правильно и не свалится в ошибку.

expect “Login:”данная команда означает, что после слова Login: скрипт становит курсор и будет готов ввести следующую команду. Не забываем, что Linux различает верхний и нижний регистр написания, поэтому все тексты, которые должен искать скрипт должны быть написаны именно так, как они отображаются в терминале. Со всеми знаками и символами.

send — команда отправки. Вставляет в строку значения, необходимые нам, грубо говоря вводит команды вместо нас, которые указаны в ” “. Не забываем, что, если после введенной команды нам нужно нажать клавишу ENTER для выплолнения, то в кавычках нужно ввести следующее сочетание символов без пробела после нужной команды или, к примеру логина, \r

send “admin\r” передаем модему имя пользователя.  Вам нужно заметить имя пользователя на то, которое запрограммировано в Вашем модее. Узнать это не сложно из руководства по эксплуатации модема. Оно такое же как и для входа через WEB-интерфейс.

expect “Password:” дожидаемся пока модем запросит пароль.

send “my_password\r” отправляем модему пароль которым он защищен. Не стоит забывать пароль. Замените фразу my_password на ваш пароль. Не забываем, что сразу после пароля должно быть написано  вот это \r” Между параметром и командой использование пробела недопустимо!

Мы успешно авторизовались и вошли в модем.

Теперь транслируем модему нужные команды и наслаждаемся результатом.

expect “>”ищем строку ввода команды. обращаю Ваше внимание, в разных модемов она выглядит по разному. А кавычках рекомендую вписать текст строки, который стоит в начале строки ввода команды.

send “reboot\r”передаем модему команду для перезагрузки.

send “exit\r”передаем модему команду завершения соедниения. Завершаем telnet-сессию.

expect eof данная команда используется для завершения работы скрипта.

Вот собственно, и Весь скрипт. Теперь его можно смело заливать на сервер и выполнять. Как именно его запускать, решать Вам. Я его запускаю по крону ежедневно ночью. Чтобы разрыв связи не мешал. Я в это время уже сплю :)

[dm]4[/dm]

[dm]5[/dm]

[dm]6[/dm]

Поделись с друзьями!
Мои проекты на GITHUB


Мои проекты на GitHub

Реклама




iOnline в социальных сетях
IOnLine.by в социальной сети Вконтакте (vk.com)


Мы в Facebook


Ionline.by в Instagram


Мы в Twitter