Создание сценария для сеанса Telnet? - PullRequest
41 голосов
/ 02 апреля 2009

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

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

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

Спасибо.

Ответы [ 12 ]

36 голосов
/ 02 апреля 2009

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

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

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

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

13 голосов
/ 02 апреля 2009

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

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

12 голосов
/ 02 апреля 2009

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

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

7 голосов
/ 28 февраля 2012

Этот скрипт 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
3 голосов
/ 19 февраля 2014
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")
3 голосов
/ 16 сентября 2011

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

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

3 голосов
/ 24 августа 2011

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

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

perl sendcommand.pl -i login.txt -t cisco -c "show ip route"
0 голосов
/ 20 июля 2017

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

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}.

0 голосов
/ 29 марта 2013

Мне нравится пример, данный 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()
0 голосов
/ 14 сентября 2012

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

...