Подтвердить что ты не робот

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

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

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

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

Спасибо.

4b9b3361

Ответ 1

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

EDIT: приведенная выше страница предполагает, что запись в Wikipedia Expect является полезным ресурсом: -)

Ответ 2

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

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

(echo password; echo "show ip route"; sleep 1; echo "quit" ) | telnet myrouter

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

Ответ 3

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

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

Ответ 4

Этот vbs script перезагружает коммутатор 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

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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")

Ответ 8

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

  • Можете ли вы поместить вещи на устройство, в которое вы работаете telnetting?
  • Являются ли команды, выполняемые с помощью script одинаковыми, или они зависят от машины/пользователя?
  • Вы хотите, чтобы пользователь нажал значок, чтобы указать идентификатор пользователя и/или пароль?

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

Ответ 9

Мне нравится пример 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()

Ответ 10

Bash оболочка поддерживает этот готовый вариант, например

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

Ответ 11

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

Ответ 12

Запишите сеанс telnet внутри файла DAT DAT и выполните.