Используйте скрипт для сеанса telnet.

Вопрос или проблема

У меня проблема с моим скриптом. Похоже, мой пароль неверен.

#!/usr/bin/expect

set ip [lindex $argv 0]
spawn telnet $ip
set timeout 10
expect "Login:"
send "administrator\r"
expect "Password:"
send "123456"
send "\r"

Он говорит, login incorrect. Но это работает, когда я использую cmd в Windows для telnet к моему телефону, это работает с “administrator” и 123456 в качестве пароля. Я не знаю, почему в моем скрипте я не смог войти успешно.

Мне нужно использовать этот скрипт для снижения/повышения версии моих телефонов.

Я нашел ответ. Мне просто нужно вставить команду

sleep

перед

expect "Login:"

Спасибо всем.

Ответ или решение

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

Исходный код вашего скрипта выглядит следующим образом:

#!/usr/bin/expect

set ip [lindex $argv 0]
spawn telnet $ip
set timeout 10
expect "Login:"
send "administrator\r"
expect "Password:"
send "123456"
send "\r"

Проблема, с которой вы столкнулись, связана с тем, что время ожидания между переменными значениями, такими как "Login" и "Password", может быть недостаточным. Это может привести к тому, что скрипт попытается отправить имя пользователя и пароль слишком быстро, прежде чем система успеет предоставить нужный ввод.

Улучшенная версия скрипта

Для решения данной проблемы вам необходимо добавить команду sleep перед первой командой expect, чтобы дать системе время для генерации вывода. Вот обновленная версия вашего скрипта:

#!/usr/bin/expect

# Установите IP-адрес из аргументов командной строки
set ip [lindex $argv 0]

# Запускаем telnet с указанным IP-адресом
spawn telnet $ip

# Устанавливаем таймаут
set timeout 10

# Ждем немного перед ожиданием вывода "Login:"
sleep 1

# Ожидаем появления строки "Login:"
expect "Login:"
# Отправляем имя пользователя
send "administrator\r"

# Ожидаем появления строки "Password:"
expect "Password:"
# Отправляем пароль
send "123456\r"

# Ожидаем, что скрипт завершится
expect eof

Объяснение ключевых изменений:

  1. Команда sleep: Добавив sleep 1 перед ожиданием строки "Login:", вы предоставляете системе время для полной инициализации и вывода запрашиваемого сообщения. Таким образом, вероятность возникновения ошибки "login incorrect" снижается.

  2. Таймаут: Переменная set timeout 10 отвечает за максимальное время ожидания, в течение которого скрипт будет дожидаться появления запрашиваемой строки. Убедитесь, что время достаточно для вашего устройства.

  3. Использование expect eof: В конце добавление expect eof делает скрипт более устойчивым, ожидая завершения работы telnet и предотвращая неожиданные ошибки.

Заключение

Убедитесь, что ваш телефон (или устройство) действительно доступен по сети и принимает telnet-настройки. Это важный шаг в процессе устранения неполадок. Также проверьте, что введенные вами имя пользователя и пароль корректны.

Если вы выполните все указанные шаги, ваш скрипт будет работать корректно и поможет в процессе обновления или понижения версии прошивки на вашем устройстве. Обращайтесь за помощью, если возникнут дополнительные вопросы!

Оцените материал
Добавить комментарий

Капча загружается...