2009-04-02 3 views
39

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

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

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

Спасибо.

+0

Использовать модуль telnetlib python. Пример здесь http://stackoverflow.com/questions/1491494/telnet-automation-scripting – Vanuan

ответ

12

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

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

+1

Ожидайте, что реализации также доступны на других языках, таких как модуль Expect.pm от Perl, если вы не хотите изучать TCL. –

+1

В дистрибутив Expect входит скрипт под названием autoexpect, который генерирует сценарий ожидания, просматривая сеанс. Сгенерированный скрипт достаточно прост для настройки. – sigjuice

+3

TCL/TK засасывает много за то, что у него есть инструменты, написанные с ним - просто потому, что зависимости не могут быть полностью удовлетворены на встроенных системах ... забыть обо всем дерьме и просто использовать netcat = почти без загрузки процессора. –

31

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

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

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

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

+0

В чем заключаются круглые скобки? –

+5

@WakanTanka Принуждение эха и спит для работы в суб-оболочке, совместное использование stdout и фактически спящий режим приостанавливает вывод до того, как команда «quit» будет эхом, чтобы разрешить печать всей таблицы маршрутизации до того, как соединение закончится. – Vatine

+0

спасибо @Vatine хороший простой пример, работал для меня. – MikeRoger

12

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

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

+0

Отличный ответ, telnet не работал, но работал с ним через nc. – I82Much

+5

C'mon люди, когда вы downvote, скажите мне, почему (особенно через годы после факта) – KevinDTimm

+0

Ваш ответ мог быть просто комментарием в ответе Ватине. Или отредактируйте его. Не нужно было публиковать совершенно новый ответ, когда вы упоминаете «тот же формат, что и ватинные шоу». В SO, получение лучшего ответа лучше, чем наличие большого количества ответов, перекрестных ссылок друг на друга, или, как я полагаю. Кстати, я не спустил вниз. – artfuldev

-1

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

0

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

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

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

3

Проверьте наличие SendCommand tool.

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

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

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

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

7

Этот скрипт 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 
-1

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

+2

Вы не можете контролировать/запускать сеанс FTP из файла BATch, вы можете начать сеанс FTP. Для сценария сеанса FTP вы должны использовать команду сценария '-s: filename.txt' для идентификации текстового файла, содержащего ваш скрипт. –

+0

FTP? Я считаю, что речь идет о сеансе TELNET – Sara

0

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

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() 
2
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") 
1

оболочки 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}.

Смежные вопросы