faq обучение настройка
Текущее время: Вс июл 20, 2025 12:05

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: DSL-2500u перезагрузка с помощью telnet
СообщениеДобавлено: Вт фев 16, 2010 00:39 
Не в сети

Зарегистрирован: Вт фев 16, 2010 00:31
Сообщений: 14
Доброго времени суток.

Недавно модем (после2-х лет безупречной работы) начал терять коннект. Скорее всего вина провайдера, но не в этом дело. Для поднятия конекта его нужно перезагрузить. Пытаюсь сделать это програмно (скрипт на bash), но при выполнении команды reboot вижу такую картину: (привожу сессию полностью)
Код:
telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
BCM96338 ADSL Router
(none) login: admin
Password:


BusyBox v1.00 (2005.04.12-18:11+0000) Built-in shell (msh)
Enter 'help' for a list of built-in commands.


# reboot
kill process [pid: 245] [name: telnetd]...
Connection closed by foreign host.



После чего 23 порт закрывается и не открывается до перезагрузки кнопкой/ч-з веб интерфейс, но при этом продолжает работать интернет и веб морда.

Как его правильно перезагрузить через telnet?

РЕШЕНО: вместо reboot можно использовать
Код:
kill 1
На моей прошивке модем перезагружается. Спасибо пользователю name_w

UPDATE
Наваял скрипт, который проверяет наличие подключения и в случае его отсутствия перегружает модем:
Код:
#!/usr/bin/expect -f

#имя админа
set USER admin
# пароль админа
set PASS admin
# ip адрес модема
set HOST 192.168.1.1
# имя устройства ppp (смотреть командой ifconfig при работающем интернет)
set DEVICE ppp_1_32_1

# комманда на перезагрузку модема. Можно использовать reboot, но у меня работает только так
set command "kill 1"

# timeout подключения. Менять не обязательно :-)
set timeout 5

# подключаемся к модему
spawn telnet $HOST
#ожидаем запроса на логин
expect "(none) login:"
# передаем логин
send $USER\r
# ожидаем запроса пароля
expect "Password:"
# передаем пароль
send $PASS\r
# ожидаем приглашения командной строки
expect "#"
# выводим список работающих интерфейсов
send "ifconfig\r"
# ожидаем нужное устройство. Если нашли - выходим
expect $DEVICE {exit}
# ожидаем приглашения командной строки
expect "#"
# посылаем команду на перезагруку
send $command\r
# ожидаем отключения модема
expect eof



Если у кого-то что-то не заработает - проведите руками подключение к модему и сравните строки приглашения ввода логина/пароля и приглашение командной строки. На разных модемах они могут отличаться, поэтому редактируем их под себя. И да, никакой ответственности автор не несет и денег тоже не просит :-) Юзайте на здоровье


Последний раз редактировалось blow Сб мар 13, 2010 14:31, всего редактировалось 3 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 16, 2010 07:53 
Не в сети

Зарегистрирован: Вт авг 29, 2006 16:44
Сообщений: 2326
Откуда: Ярославль
Это раздел про коммутаторы.

_________________
LiveComm


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 16, 2010 09:51 
Не в сети

Зарегистрирован: Вт фев 16, 2010 00:31
Сообщений: 14
Извиняюсь, перепутал ветку. Модераторы могут перенести или нужно эту удалить, а новую создать?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 17, 2010 16:40 
Не в сети

Зарегистрирован: Вт фев 16, 2010 00:31
Сообщений: 14
Т.е. насколько я понимаю (судя по активности в треде), все таки перегружаться модем должен по команде "reboot". Но у меня этого по какой-то причине не происходит. Тогда другой вопрос - какую посоветуете прошивку (т.к. проблема получется в ней)? И есть ли возможность слить существующую прошивку, чтобы в случае чего можно было откатиться обратно?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 17, 2010 17:06 
Не в сети

Зарегистрирован: Ср окт 21, 2009 19:52
Сообщений: 237
Попробуй эту прогу http://depositfiles.com/files/3herpwfej
Она в месте с исходником.
Утилиту telnet.exe не использует. Она напрямую работает с модемом. Окна на создаёт.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 17, 2010 19:56 
Не в сети

Зарегистрирован: Вт фев 16, 2010 00:31
Сообщений: 14
Спасибо, но мне бы под линукс :-)

И то, что она не трогает telnet.exe ни о чем не говорит, она может сама писать/читать по tcp, и ей telnet.exe для этого не нужен.
Но 99,9% она работает по 23 (telnet) порту. Так что вряд ли она мне поможет (хотя ради интереса под виндой все-таки запущу, если она перезагрузит модем - буду разбираться, как)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 17, 2010 20:16 
Не в сети

Зарегистрирован: Ср окт 21, 2009 19:52
Сообщений: 237
Могу перекомпилировать прогу под линукс (Ubuntu), но там почему-то не получается установить соединение через 23 порт.
Наверное он заблокирован для "левых" прог.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 17, 2010 22:19 
Не в сети

Зарегистрирован: Вт фев 16, 2010 00:31
Сообщений: 14
А вот это уже интереснее.

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

Но и опять таки, если код твой, какая комманда посылается на роутер для перезагрузки? Скрипт под линукс я и сам напишу, там ничего сложного


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 17, 2010 22:22 
Не в сети

Зарегистрирован: Ср окт 21, 2009 19:52
Сообщений: 237
Порт 23
Команда reboot
Там же в архиве есть исходник.
Вот его код.

Код:
InitNetwork()

Procedure.s SendModemData(Connect, Command.s)
Protected Result.s="", Count=0, x
 Command=Command+Chr(13)+Chr(10)
 SendNetworkData(Connect, @Command, Len(Command))
 Repeat
   Delay(20)
   If NetworkClientEvent(Connect)=#PB_NetworkEvent_Data
      *mem=AllocateMemory(10000)
        If *mem
          ReceiveNetworkData(Connect,*mem,10000)
          In.s=PeekS(*mem)
          FreeMemory(*mem)
          Result=Result+In
        EndIf
   EndIf
   Count+1
 Until Count>=40
ProcedureReturn Result
EndProcedure



Connect=OpenNetworkConnection("192.168.1.1", 23)
If Connect
  Delay(50)
  SendModemData(Connect, "admin")
  SendModemData(Connect, "admin")
  Delay(400)
  SendModemData(Connect, "reboot")
  Delay(2000)
  CloseNetworkConnection(Connect)
EndIf


Этот код без модификаций можно скомпилировать под Windows, Linux, MacOS X


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 17, 2010 22:33 
Не в сети

Зарегистрирован: Ср окт 21, 2009 19:52
Сообщений: 237
Скомпилировал прогу для Linux http://depositfiles.com/files/1mxi7258q
Проверяйте.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт фев 18, 2010 01:08 
Не в сети

Зарегистрирован: Вт фев 16, 2010 00:31
Сообщений: 14
:D
Спасибо конечно, но Вы наверное не дочитали/не поняли мою проблему. Моя проблема в том, что по команде "reboot" модем не перезагружается

И не могу удеожаться, чтобы не прокомментировать код :-)

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 28, 2010 17:41 
Не в сети

Зарегистрирован: Вс фев 28, 2010 17:17
Сообщений: 3
А так попробуйте:
Код:
#!/usr/bin/expect -f

set timeout 45
spawn telnet 192.168.1.1
expect "Login:"
send "admin\r"
expect "Password:"
send "yourpassword\r"
expect ">"
send "reboot\r"
expect eof


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 03, 2010 11:47 
Не в сети

Зарегистрирован: Вт фев 16, 2010 00:31
Сообщений: 14
Ух ты, это прикольнее, чем с сокетами :-)

Вот только ничего это не изменит. Команда reboot перезапускает только сервис telnetd на модеме. И неважно, как я ее вызову. Я тут где-то натыкался, как можно перезагрузить через веб интерфейс (выхвать скрипт по http), но пока руки не доходят сделать, чтобы выложить решение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 03, 2010 13:23 
Не в сети

Зарегистрирован: Сб янв 24, 2009 05:33
Сообщений: 111
Может попробовать kill 1 ?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 03, 2010 13:48 
Не в сети

Зарегистрирован: Вт фев 16, 2010 00:31
Сообщений: 14
name_w писал(а):
Может попробовать kill 1 ?


А стоит ли? Не, я буду дома - попробую (удаленно неохота - вдруг не запустится?)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB