Page 3 of 3 FirstFirst 123
Results 31 to 44 of 44

Thread: expect на shell, или авто-телнеттинг

  1. #31
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    покажите ваш expect_test, а также ответ устройства когда вы успешно логинитесь на него вручную.

  2. #32
    expect_test:
    #!/bin/sh

    . /usr/local/sbin/mini-tools/expect.lib.sh
    # цепляем библиотеку (ее код дан ниже)
    expect_open -c telnet 192.168.1.1
    # использование: expect_open [-c | -e <filename> ] <command> ....
    #опция -с включает дублирование вывода на консоль
    #опция -e включает дублирование вывода в <filename>
    #без опций - вывода нет

    expect Login
    # ждем строку включающую в себя login - запрос имени пользователя

    send_line admin
    # отправляем строку с именем пользователя "admin" и перевод строки

    expect_eol
    # ждем перевод строки, который мы же и отправили

    expect Password:
    send_line 123
    expect_eol
    expect_exact '>'
    # ждем строку состоящую только из # - запрос от shell'а

    expect_echo_start
    # для примера - включение вывода на консоль с этого момента

    send_line ifconfig
    expect_eol

    expect_capture_start
    # начало захвата вывода в переменную $EXPECT_OUTPUT, очищает переменную

    expect_eol
    # ждем перевода строки, т.е. в $EXPECT_OUTPUT будет вывод от первого

    echo "Modem is: $EXPECT_OUTPUT"
    # date -s $EXPECT_OUTPUT
    send_line logout
    expect_eol
    expect_close
    # закрываем запущенный процесс (телнет)
    пробовал send_line в кавычках и без

    ]$ telnet 192.168.1.1

    Entering character mode
    Escape character is '^]'.

    BCM96332 ADSL Router
    Login: admin
    Password:
    > logout

    Bye bye. Have a nice day!!!
    Connection closed by foreign host

  3. #33
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    Глобальных проблем не вижу, поэтому по мелочам.

    Ругань на строку 6 в первом случае относится к строке с коммандой expect_open
    Однако, в приведенном скрипте это строка 5, что немного странно

    Во втором случае, скорее всего это не фатальная ошибка, т.к. после нее выводится подсказка и вводится логин и скорее всего пароль. Виснет это все скорее всего на
    Code:
    expect_exact '>'
    может там в возвращаемой строке какой пробел затесался или невидимый китайский символ...

    Можно предложить попробовать
    Code:
    expect '>'
    либо вообще убрать эту строку, можно попробовать добавить паузу, напр. sleep 5

  4. #34
    а не может быть что ругань идет на эту строку:
    send_line 123
    или та эту:
    expect Password:
    ведь пробельные строки и строки с комментариями отбрасываются, тогда эта как раз 6-я
    кроме того, курсор мигает сразу после слова Password:<курсор>, т.е. переход на следующую строку не осуществляется, так и висит пока таймаут не истечет. т.е. как будто до expect_exact '>' дело не доходит
    пробовал убирать expect_exact '>' и ставить sleep 5, менял '>' на '> ' - такая же реакция

    провел эксперименты на дебиане, коннектился к довекоту, расставил echo "--mark--" по скрипту, история такая же, до пароля метка выводится, после метка не выводится, т.е. скрипт останавливается на вводе пароля.
    Last edited by mitay; 13-12-2010 at 03:13.

  5. #35
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    для отладки можно после #!/bin/sh поставить set -x
    А вообще, скорее всего дело в : после Password. Его надо убрать.

  6. #36
    двоеточие не причем, за отладку спасибо!
    попадает в бесконечный цикл в функции expect_handle_input ()
    while true; do
    пойду найду умную книшку по скриптам, буду разбираться

    так уже bash использую
    установил так: ipkg install bash
    в скрипте пишу #!/bin/bash
    те же грабли, счас буду разбираться, пока ясно одно, что условие [ ! -d /proc/$EXPECT_APP_ID ] всегда ложно, т.е. это каталог
    Last edited by mitay; 13-12-2010 at 08:18.

  7. #37
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    все же советую попробовать исполнить это через bash. По bash книжек много, а вот по встроенному ash из busybox не очень. К тому же он обильно конфигурируется при сборке, так что не исключено, что какая то фича просто не включена в нашей прошивке. Если через один интерпретатор будет работать, через другой нет, задача упростится до "найди отличие".

    Я разбирался с этим скриптом уже довольно давно --- не помню ньюансов, но по каким-то причинам остановился на решении с bash

  8. #38
    злобный expect_eol приносил с собой строку Password, так что когда expect Password ждал слово Password, то уже ничего не дожидался, цикл-таймаут-цикл-таймаут...
    удалил expect_eol после ввода логина и пароля и заработало,
    принцип ясен, большое спасибо за помощь!

    поспешил с выводами, эксперименты на дебиане с рор3-сервером принесли положительные плоды, но там пароль выводился на экран
    на асусе потерпел фиаско, там пароль не выводится, а после send_line 123 программа ждет вывода 123, и зацикливается ((...
    Last edited by mitay; 14-12-2010 at 02:38.

  9. #39
    Join Date
    Apr 2008
    Location
    город самоваров и пряников
    Posts
    1,492

    Автоматический вход по telnet на подключённое устройство

    Как выполнить команду через telnet на подключённом к роутеру устройству, передав пароль в качестве параметра?
    Ламер, деградировавший до чайника.

    1. WL-500gP(v1)|RAM 128M|Entware 3.0.4-r4844M|Доработаны цепи питания|Заменены светодиоды
    Samsung G2 Portable HX-MU050DC|Скрипт поднятия wan после падения|transmission|dlengine|vnstat
    2. DIR-320|RAM 64M|Flash 8M|Entware 1.9.2.7-rtn-r4772M|Принт-сервер для HP 1000-1022, P1005-P1505

  10. #40
    Join Date
    Apr 2008
    Location
    город самоваров и пряников
    Posts
    1,492
    Спасибр автору за скрипт.
    У меня заработало так (например, узнать состояние ADSL-соединения на модеме Huawei MT880):
    Code:
    #!/bin/sh
    
    . /usr/local/bin/expect.lib.sh
    
    expect_open telnet -l admin 192.168.1.1
    
    expect Password
    send_line 'пароль'
    expect_eol
    expect ">"
    expect_echo_start
    send_line "show wan adsl status"
    expect_eol
    
    expect_close
    Почему-то на Хуавей-МТ880 telnet и без ключа -l тоже упорно входил, сразу требуя пароль. Имя вводить не нужно.

    Совет: войдите сначала в телнет вручную и посмотрите, что там вообще выскакивает и требует ввода - какие символы, вопросы и т.д. и в соответствии с этим измените скрипт.

    ЗЫ: cyrax, может упростите Вашу библиотеку, чтобы можно было всего-навсего передать команду телнет (как в моём случае) без наворотов со считыванием даты-времени? Мозг закипает при взгляде на этот скрипт...
    Last edited by Omega; 15-05-2011 at 20:31. Reason: 2 post merged
    Ламер, деградировавший до чайника.

    1. WL-500gP(v1)|RAM 128M|Entware 3.0.4-r4844M|Доработаны цепи питания|Заменены светодиоды
    Samsung G2 Portable HX-MU050DC|Скрипт поднятия wan после падения|transmission|dlengine|vnstat
    2. DIR-320|RAM 64M|Flash 8M|Entware 1.9.2.7-rtn-r4772M|Принт-сервер для HP 1000-1022, P1005-P1505

  11. #41

    Question Выполнение linux-команды telnet через html-страницу. Как можно сделать?

    Решили создать на wl500gpv2 web-сервер со ссылками на выполнение определенных команд в телнете (linux-команд).

    Как эти ссылки можно написать? Выполнимо ли это со встроенным сервером в прошивке от энтузиастов?



    Спасибо

  12. #42
    Quote Originally Posted by cyrax View Post
    Привет,

    да, давно не заходил сюда.......
    Не хочет работать, жалуется в ответ
    /myscript.sh: readonly: line 5: EXPECT_APP_PIPE_IN: is read only
    5 линия в скрипте
    expect_open telnet -l admin 192.168.1.1
    Дир 320. Прошивка 1.9.2.7-d-r2624

  13. #43

    simple telnet in linux

    Являюсь владельцем модема cmotech 550pro.
    Гадость отвратная, но можно настроить работу в режиме моста.
    Очередное НО. После потери первого коннекта связь пропадает навсегда.

    Выход из ситуации:
    В файле для pppd убрать "persist"
    Добавить "maxfail 15"

    Само подключение вызывать след. скриптом:
    #!/bin/sh
    while true ; do
    /usr/sbin/pppd file /tmp/ppp/ppp.conf
    sleep 5
    /usr/local/sbin/ppp-fail
    sleep 20
    done
    exit 0



    Файл /usr/local/sbin/ppp-fail:
    #!/bin/sh
    (sleep 2; \
    echo -en "admin\r\n"; \
    sleep 2; \
    echo -en "password\r\n"; \
    sleep 2; \
    echo -en "reboot\r\n"; \
    sleep 15) | telnet 192.168.0.1

  14. #44
    Можно сделать без expect

    Code:
    #!/bin/bash
     (sleep 5; echo Mypassword; sleep 3; echo "reboot"; sleep 1) |
           socat - EXEC:'ssh -l router 192.168.1.1',pty,setsid,ctty
    Предварительно установив socat

Page 3 of 3 FirstFirst 123

Similar Threads

  1. Ищутся добровольцы с WL500g или WL500b
    By lly in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 19
    Last Post: 31-08-2008, 07:22
  2. Что быстрее: 54g only или Performance?
    By el-pashteto in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 8
    Last Post: 05-12-2007, 20:27
  3. Printing in shell
    By thE_29 in forum WL-500gP Q&A
    Replies: 17
    Last Post: 19-10-2007, 12:40

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •