Скрипт telnet для роутера

Скрипт telnet для роутера

Надоело выполнять рутинные операции с большим парком железа? Давайте разберем, как автоматизировать процесс подключения по протоколу telnet и ввода команд для удаленной настройки железа, используя скриптовый язык программирования bash.

bash (Bourne again shell, «Born again» shell — «возрождённый» shell) — Самая популярная командная оболочка UNIX/Linux.

Telnet bash script

Первым делом, давайте сформулируем задачу. Допустим, у нас есть три маршрутизатора cisco c ip адресами 192.168.10.10, 192.168.10.11 и 192.168.10.12 и компьютер с Linux. Нам требуется подключиться к каждому маршрутизатору через протокол telnet и узнать версию IOS, используя команду «show ver | include IOS». Можно, конечно, пройтись по этим маршрутизаторам, набирая команды вручную, но когда количество железок вырастет, например, до 100, согласитесь, проделать данную процедуру уже будет довольно утомительно. Поэтому сделаем скрипт, который соберет вывод команд со всех маршрутизаторов в файл.

#!/bin/bash set -x #Входные данные: USER="admin" PASSWD="123456" LOG="telnnet_conn.log" HOSTS=" 192.168.10.10 192.168.10.12 192.168.10.11 " for H in $HOSTS do echo START SCRIPT: >> $LOG date +%x-%R >> $LOG ( sleep 1; echo -en "$USER\r"; sleep 1; echo -en "$PASSWD\r"; sleep 1; echo -en "show ver | include IOS\r"; sleep 1; echo -en "exit\r"; sleep 1; ) | telnet $H >> $LOG echo =================================== >> $LOG done

Описание telnet скрипта

1. Начинаться любой bash-скрипт всегда должен со строки, указывающий путь к bash-интерпритатору.

2. Включаем режим отладки, прописав set -x (позволяет наблюдать за ходом выполнения скрипта в терминале).

3. Задаем входные данные. В нашем случае это имя пользователя (USER), пароль (PASSWD), названия файла, в который будет собираться вывод команд (telnnet_conn.log), и ip адреса, к которым будем подключаться телнетом (HOSTS).

4. Для организации подключения сделаем цикл с перебором ip адресов.

for H in $HOSTS do #Тело цикла (выполняемые операции в цикле) done

5. Для удобства обработки вывода команд добавим строчку начала скрипта, используя echo и дату и время начала выполнения.

echo START SCRIPT: >> $LOG date +%x-%R >> $LOG

6. Теперь начинается основная часть работы скрипта. Укажем команды, которые мы хотели бы, чтобы скрипт вводил за нас, а именно ввод логина, пароля и команду вывода версии IOS. Команда «sleep 1» используется чтобы расставить паузы при выполнение команд.

( sleep 1; echo -en "$USER\r"; sleep 1; echo -en "$PASSWD\r"; sleep 1; echo -en "show ver | include IOS\r"; sleep 1; echo -en "exit\r"; sleep 1; ) | telnet $H >> $LOG

7. Для удобства чтения выведем разделитель (=========), используя echo.

Создать файл можно, используя команду touch имя_файла.

Чтобы не мучиться с правами, можно дать максимум привилегий.

Читайте также:  Настройка роутера как шлюза

Скрипт отработает и создаст файл с названием telnnet_conn.log, в котором и будет храниться вывод выполняемых на железяках команд.

Пример содержания файла telnet_conn.log

START SCRIPT: 05.11.2017-14:19 Trying 192.168.10.10. Connected to 192.168.10.10. Escape character is '^]'. User Access Verification Username: admin Password: R1>show ver | include IOS Cisco IOS Software, 7200 Software (C7200-ADVIPSERVICESK9-M), Version 15.2(4)S5, RELEASE SOFTWARE (fc1) R1>exit ============================== START SCRIPT: 05.11.2017-14:19 Trying 192.168.10.11. .

На этом все. Нам удалось с помощью написанного скрипта на bash автоматизировать процесс подключения к маршрутизаторам по протоколу telnet, выполнить ввод команд на удаленных хостах и записать результат их выполнения в файл. Комментируем, подписываемся ну и всем пока:)

Источник

Скрипт перезагрузки роутера при разрыве коннекта

image

Дома, как, как и у многих, интернет раздает роутер.
Купленный в свое время ZyXEL P-330W вполне справлялся со своей задачей, пока однажды не начались проблемы. Видимо провайдер что-то там у себя делал, сетка падала, а роутер оставался в полной уверенности, что все в порядке и не переподключал соединение.
Единственное, что оставалось — перегружать сам роутер путем отключения питания.
Т.к. домашний сервак работает 24/7 и интернет ему нужен постоянно, озадачился проблемой автоматической перезагрузки роутера в случае, если отрубается интернет.

ПРОБЛЕМА:
Роутер или ADSL модем теряет связь и не восстанавливает соединение.

РЕШЕНИЕ:
Использование скрипта для проверки подключения к интернет и перезагрузки роутера в случае необходимости.
Как это все будет работать – Раз в полчаса планировщик запускает скрипт, который пингует определенные адреса и если ответа нет, заходит на роутер через телнет и отправляет команду перезагрузки.

Теперь подробно, по шагам.

Создаем в текстовом редакторе файл router.vbs (например)

Копируем туда следующий код:
>>>Начало кода со следующей строки
Function PcOnline (strComputer)
‘Check if the remote machine is online.
Dim objPing,objStatus
Dim TextStream, TimeVar
Dim fso, tf
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set objPing = GetObject(«winmgmts:»)._
ExecQuery(«select Replysize from Win32_PingStatus where address = ‘» & strComputer & «‘»)
For Each objStatus in objPing
If IsNull(objStatus.ReplySize) Then
PcOnline=False
‘Пишем Лог файл
Set fso = CreateObject(«Scripting.FileSystemObject»)
If (fso.FileExists(«c:\routerlog.txt»)) Then
Set tf = fso.OpenTextFile(«c:\routerlog.txt»,ForAppending, True)
tf.WriteLine(Now() & » » & strComputer & » is down «)
tf.Close()
Set fso = Nothing
Set tf = Nothing
Else
Set tf = fso.CreateTextFile(«c:\routerlog.txt»,ForAppending, True)
tf.WriteLine(Now() & » » & strComputer & » is down «)
tf.Close()
Set fso = Nothing
Set tf = Nothing
End If
‘ Конец Лог файла
Else
PcOnline = True
‘Wscript.Echo strComputer & » is responding to a ping »
End If
Next
Set objPing=Nothing
Set objStatus=Nothing
End Function
Dim fsot, tft
Const ForReading = 1, ForWriting = 2, ForAppending = 8
If PcOnline(«www.ya.ru»)_
OR PcOnline(«www.google.com»)_
Then
‘ если статус = 0, пустая строка — другое
Wscript.Echo «all ok»
Set fsot = CreateObject(«Scripting.FileSystemObject»)
Set tft = fsot.OpenTextFile(«c:\routerlog.txt»,ForAppending, True)
tft.WriteLine(«——————«)
tft.Close()
Set fsot = Nothing
Set tft= Nothing
WScript.Quit 0
Else
‘WScript.Echo «Reboot»
‘Set oShell = WScript.CreateObject(«WScript.Shell»)
‘oShell.Run «telnet.exe 1.1.0.1»
‘WScript.Sleep 2000
‘oShell.SendKeys «user» & chr(13)
‘WScript.Sleep 2000
‘oShell.SendKeys «password» & chr(13)
‘WScript.Sleep 2000
‘oShell.SendKeys «reload» & chr(13)
‘WScript.Sleep 2000
‘oShell.SendKeys «^()q» & chr(13)
‘WScript.Quit 255
End If
Set fsot = CreateObject(«Scripting.FileSystemObject»)
Set tft = fsot.OpenTextFile(«c:\routerlog.txt»,ForAppending, True)
tft.WriteLine(«——————«)
tft.Close()
Set fsot = Nothing
Set tft= Nothing
>>>Конец кода на предыдущей строке

Читайте также:  Роутер eltex почему скупают

Что к чему:
ya.ru и google.com сервера, которые пингует скрипт для проверки ест ли интернет или нет
user — логин админа роутера или модема – обычно admin
password – пароль админа.
В строчке ‘oShell.Run «telnet.exe 1.1.0.1» вместо 1.1.0.1 прописываем адрес своего роутера (192.168.1.1 например)
В строчке ‘oShell.SendKeys «reload» & chr(13) – reload, это команда, которая перегружает роутер или модем, может отличаться от модели к модели. Посмотрите в документации или методом научного тыка и вставьте ту команду, которая подходит вам – я встречал reload и reboot.
Также скрипт пишет лог файл c:\routerlog.txt

ИСПОЛЬЗОВАНИЕ:
Сохраняем файл router.vbs с кодом внутри.
Добавляем в качестве задания запускать этот файл каждые 30 минут (по желанию)
Для XP — Панель управления -> Назначенные задания -> Добавить задание

Теперь скрипт будет каждые 30 минут проверять соединение с интернет и в случае срыва коннекта перегружать роутер/модем.

Источник

Скрипт telnet для роутера

Вы здесь: Главная Статьи Роутеры, модемы, точки доступа Перезагрузка удаленного роутера через Telnet и Cron

Перезагрузка удаленного роутера (модема) с использованием Telnet и Cron в Linux

На объекте заказчика установлен 4G/LTE модем ZYXEL и есть роутер TP-Link TL-WR842N/ND v2. Основная жалоба заказчика на необходимость частой перезагрузки модема и роутера, по причине пропадания интернета, зависания роутера или просто неподключения к wifi сети.

Все действия вы делаете на свой страх и риск. Автор не несет ответственности за возможные последствия

Для исправления ситуации было проделано следующие:

1) Сброшены настройки, обновлены прошивки на модеме и роутере от производителя и заново все настроено — перезагружать стало нужно реже, но проблема осталась.

2) Поиск альтернативных прошивок. Для 4G модема Zyxel не существует, а на TP-Link TL-WR842N/ND v2 была установлена OpenWrt Chaos Calmer 15.05.1 (Рисунок 1). После перехода на альтернативную прошивку проблемы с зависанием и неподключением по wifi более не наблюдаются.

Установка OpenWrt Chaos Calmer 15.05.1 на TP-Link TL-WR842N/ND v2

3) 4G модем Zyxel LTE6100, как удалось выяснить, теряет интернет по нескольким причинам:

  • а) перестает видеть сим-карту. Замена симки не помогает. Помогает только перезагрузка.
  • б) рвет соединение с оператором и потом его не восстанавливает. Помогает только перезагрузка.
  • в) просто перестают «ходить пакеты». Помогает только перезагрузка.

К сожалению, альтернативной прошивки не существует, а с офф. сайта проблему не решает. Раз помогает перезагрузка, значит нужно «ребутить», но делать это без участия пользователи и во время когда в интернете нет необходимости.

4) Есть несколько способов делать перезагрузку модема Zyxel LTE6100.

  • а) Через WEB интерфейс.
  • б) Через Telnet (SSH не поддерживает)
  • в) Передергивать питание.
  • а) При помощи розетки-таймера.
  • б) Написать скрипт, который будет запускаться по расписанию и через Telnet перезагружать модем.
Читайте также:  Wifi роутер netis mw5240

Нами был выбран последний вариант со скриптом, тем более, что роутер Tp-link включен постоянно, а OpenWrt позволяет все это реализовать через Cron.

5) Скрипт выглядит так (Рисунок 2). Данная реализация немного корявая, лучше делать через инструмент Expect, но его нет в базе OpenWrt.

В скрипте вам нужно заменить значения на свои admin, pass, ip_adress

Скрипт для перезагрузки удаленного роутера или модема через Telnet в Linux

Создаем папку scripts в корне и сохраняем скрипт под названием rebootmodem.sh. Названия папки и скрипта могут быть любыми. Далее нужно перейти на роутере в раздел System-Scheduled Tasks и прописать в Cron (планировщик) параметры запуска (Рисунок 3). Обязательно перезапустите Cron, либо перезагрузите роутер для сохранения параметров запуска.

Создание задания Cron в OpenWRT (Linux)

В нашем случаи запуск скрипта происходит в 4 часа ночи, во вторник, четверг, субботу и воскресение.

После проделанных действий заказчик уже больше 2 месяцев даже близко не подходит к роутеру и модему.

Копирование материалов с сайта разрешено только с согласия автора, либо с указанием адреса источника.

Источник

Linux Скрипт перезагрузки роутера по telnet

Всем доброго времени суток.
Тут мелькало много тем по ребуту роутера при потере связи, мало толковых решений.
Вот моё :

простые скрипты на bash для линукс. (Если кому надо для винды — их есть у меня )
код с комментами, читайте — там всё предельно ясно.

первый скрипт обзываем ping и кидаем в /home/$USER

#!/bin/bash #replace '8.8.8.8' with your preferred address to ping. This is a Google DNS server address which you should be able to ping successfully if you are connected to the internet. if ! /bin/ping -c 1 8.8.8.8 then /home/user/restart-router # replace 'user' with your username fi

Второй скрипт обзываем restart-router
это, собственно, сама «функция» чтоб ребутать наш роутер
Тут вам потребуется допилить под себя, потому что у всех роутеров телнет немного отличается. Я выкладываю под среднестатистический ZYXEL LTE (конкретно мой LTE6101)
Вам же нужно будет зайти по телнет на свой роутер и посмотреть, что он у вас спрашивает при входе, и какие строки ввода нужны.

#!/usr/bin/env expect #replace 'admin' with your username set username admin #replace 'password' with your password set pass password #replace 192.168.1.1 with your router's IP address, if it differs set host 192.168.1.1 spawn telnet $ expect -re "router login:" send "$\r" expect "Password:" send "$\r" expect -re "ZySH" #replace 'reboot' with whatever your router's specific command is send "reboot\r" #replace 'logout' with whatever your router's specific command is send "exit\r" expect eof

Далее нам потребуется сделать наши скрипты исполняемыми

chmod +x ping chmod +x restart-router

И в самом конце — добавляем наш ping в cron

Источник

Оцените статью
Adblock
detector