Создание сценария для сеанса Telnet?

Кто-нибудь знает простой способ создания сценария, который может подключаться к серверу telnet, выполнять какие-то обычные действия telnet, а затем выходить из системы? Я имею дело с пользователями, которые не знакомы с telnet и командами, которые они должны будут выполнить. Все, что я хочу, это чтобы они дважды щелкнули по сценарию, и чтобы этот сценарий автоматически выполнял команды для них.

Вы, наверное, задаетесь вопросом: "На какой платформе пользователи?" Они будут как на Windows, так и на Linux. Реализации на таких языках, как Perl, Java или Python, являются приемлемыми. Я вижу, что в Perl есть модуль Net:: Telnet. Кто-нибудь использовал это?

Мое идеальное решение было бы создать два файла сценария. BAT-файл для Windows и сценарий оболочки для Linux. В то время как это сделало бы проблему двойного обслуживания, это означало бы, что мне не пришлось бы устанавливать Perl/Java/Python/etc... на каждую машину. К сожалению, я не видел способа автоматизировать сеанс telnet с помощью пакетных файлов или сценариев оболочки.

Благодарю.

12 ответов

Решение

Expect создан для этого и может обрабатывать ввод / вывод плюс таймауты и т. Д. Обратите внимание, что если вы не являетесь поклонником TCL, существуют модули Expect для Perl/Python/Java.

РЕДАКТИРОВАТЬ: выше страница предполагает, что запись в Википедии Ожидание является полезным ресурсом:-)

Я использовал различные методы для сценариев сеансов telnet под Unix, но самый простой из них, вероятно, представляет собой последовательность команд echo и sleep с выводом их по конвейеру в telnet. Передача вывода в другую команду также возможна.

Глупый пример

(пароль эха; эхо "show ip route"; сон 1; эхо "выход") | Telnet Myrouter

Это (в основном) извлекает таблицу маршрутизации маршрутизатора Cisco.

Другой метод заключается в использовании netcat (или nc, в зависимости от того, какой posix) в том же формате, что и vatine, или вы можете создать текстовый файл, содержащий каждую команду в отдельной строке.

Я обнаружил, что некоторые Telnet от Posix неправильно обрабатывают перенаправление (вот почему я предлагаю netcat)

Этот скрипт vbs перезагружает коммутатор cisco, убедитесь, что telnet установлен на windows.

Option explicit
Dim oShell
set oShell= Wscript.CreateObject("WScript.Shell")
oShell.Run "telnet"
WScript.Sleep 1000
oShell.Sendkeys "open 172.25.15.9~"
WScript.Sleep 1000
oShell.Sendkeys "password~"
WScript.Sleep 1000
oShell.Sendkeys "en~"
WScript.Sleep 1000
oShell.Sendkeys "password~"
WScript.Sleep 1000
oShell.Sendkeys "reload~"
WScript.Sleep 1000
oShell.Sendkeys "~"
Wscript.Quit

Это может показаться не очень хорошей идеей, но я использовал java и использовал простое программирование сокетов TCP/IP для подключения к серверу telnet и обмена сообщениями. И это работает отлично, если вы знаете, реализованный протокол. Для SSH и т. Д. Это может быть сложно, если вы не знаете, как делать рукопожатие и т. Д., Но простой telnet работает как удовольствие.

Еще один способ, которым я пытался, - использовать внешний процесс в java System.exec() и т. Д., А затем позволить окнам, встроенным в telnet, делать работу за вас, а вы просто отправляете и получаете данные в локальный системный процесс.

Проверьте инструмент SendCommand.

Вы можете использовать его следующим образом:

perl sendcommand.pl -i login.txt -t cisco -c "show ip route"
import telnetlib

user = "admin"
password = "\r"

def connect(A):
    tnA = telnetlib.Telnet(A)
    tnA.read_until('username: ', 3)
    tnA.write(user + '\n')
    tnA.read_until('password: ', 3)
    tnA.write(password + '\n')
    return tnA
def quit_telnet(tn)
    tn.write("bye\n")
    tn.write("quit\n")

Bash shell поддерживает это из коробки, например

exec {stream}<>/dev/tcp/example.com/80
printf "GET / HTTP/1.1\nHost: example.com\nConnection: close\n\n" >&${stream}
cat <&${stream}

Чтобы отфильтровать и показать только несколько строк, выполните: grep Example <&${stream},

Пара вопросов:

  1. Можете ли вы положить что-то на устройство, на которое вы звоните?
  2. Команды, выполняемые сценарием, одинаковы или различаются в зависимости от компьютера / пользователя?
  3. Вы хотите, чтобы человек, щелкающий по значку, должен указать ИД пользователя и / или пароль?

Тем не менее, я написал некоторое время на Java, чтобы поговорить с парой разветвителей с поддержкой IP (BayTech RPC3), которые могут быть вам полезны. Если вам интересно, я посмотрю, смогу ли я выкопать это и опубликовать где-нибудь.

Мне нравится пример, приведенный Active State с использованием Python. Вот полная ссылка. Я добавил простую часть журнала по ссылке, но вы можете понять суть того, что вы можете сделать.

import telnetlib

prdLogBox='142.178.1.3'
uid = 'uid'
pwd = 'yourpassword'

tn = telnetlib.Telnet(prdLogBox)
tn.read_until("login: ")
tn.write(uid + "\n")
tn.read_until("Password:")
tn.write(pwd + "\n")
tn.write("exit\n")
tn.close()

Хотя это не имеет прямого отношения к вашему вопросу, я бы порекомендовал вам использовать ssh, поскольку вы можете выполнять через него определенные команды (плюс по умолчанию он более безопасный).

Запишите сеанс telnet в файле BAT Dos и выполните его.

Другие вопросы по тегам