Tworzenie skryptu dla sesji Telnet?

Czy ktoś zna prosty sposób na stworzenie skryptu, który może połączyć się z serwerem telnet, zrobić jakieś zwykłe rzeczy z telnetu, a potem się wylogować? Mam do czynienia z użytkownikami, którzy nie są zaznajomieni z telnetem i poleceniami, które będą musieli uruchomić. Chcę tylko, aby dwukrotnie kliknęli skrypt i aby skrypt automatycznie wykonywał dla nich polecenia.

Prawdopodobnie zastanawiasz się, " na jakiej platformie są użytkownicy?"Będą działać zarówno w systemie Windows, jak i Linux. Wdrożenia w języki takie jak Perl, Java czy Python są dopuszczalne. Widzę, że Perl ma moduł Net:: Telnet. Ktoś tego używał?

Moim idealnym rozwiązaniem byłoby utworzenie dwóch plików skryptów. plik BAT Dla windows i skrypt powłoki dla Linuksa. Chociaż sprawiłoby to problem z podwójną konserwacją, oznaczałoby to, że nie musiałbym instalować Perl/Java / Python / etc... na każdej maszynie. Niestety, nie widziałem sposobu na zautomatyzowanie sesji telnet z plikami wsadowymi lub powłoką Skrypty.

Dzięki.
Author: Sameer, 2009-04-02

12 answers

Expect jest do tego stworzony i może obsługiwać wejścia/wyjścia oraz timeouty itp. Zauważ, że jeśli nie jesteś fanem TCL, istnieją Moduły Expect dla Perl / Python/Java.

EDIT: powyższa strona sugeruje, że wpis na Wikipedii jest przydatnym zasobem: -)

 13
Author: Brian Agnew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-02 14:02:31

Używałem różnych metod do skryptowania sesji telnet pod Uniksem, ale najprostszą z nich jest prawdopodobnie Sekwencja poleceń echo I sleep, z ich wyjściem przekazywanym do telnetu. Możliwe jest również przekierowanie wyjścia do innego polecenia.

Głupi przykład

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

To (zasadniczo) pobiera tabelę routingu routera Cisco.

 32
Author: Vatine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-02 14:04:12

Inną metodą jest użycie netcat (lub nc, w zależności od którego posix) w tym samym formacie, co pokazuje vatine lub można utworzyć plik tekstowy, który zawiera każde polecenie w jego własnej linii.

Odkryłem, że niektóre telnety posix nie obsługują przekierowań poprawnie (dlatego proponuję netcat)

 12
Author: KevinDTimm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-02 14:39:00

Ten skrypt VBS przeładowuje przełącznik cisco, upewnij się, że telnet jest zainstalowany w systemie 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
 7
Author: Arjan Keij,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-28 14:52:30

Może to nie brzmi dobrze, ale używałem Javy i używałem prostego programowania gniazd TCP / IP do łączenia się z serwerem telnet i komunikacji exchange. I działa doskonale, jeśli znasz zaimplementowany protokół. W przypadku SSH itp może być ciężko, chyba że wiesz jak zrobić uścisk dłoni itp, ale prosty telnet działa jak uczta.

Innym sposobem, jaki próbowałem, było użycie zewnętrznego procesu w systemie java.exec () itp, a potem niech windows wbudowany w telnet zrobi to za Ciebie i po prostu wysyłasz i odbiór danych do lokalnego procesu systemowego.

 3
Author: rizwan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-16 00:14:24

Sprawdź narzędzie SendCommand .

Możesz go użyć w następujący sposób:

perl sendcommand.pl -i login.txt -t cisco -c "show ip route"
 3
Author: Youri Reddy-Girard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-15 17:27:51
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
Author: Harshan Gowda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-19 07:12:35

Powłoka Bash obsługuje ten out-of-box, np.

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

Aby filtrować i pokazywać tylko niektóre linie, uruchom: grep Example <&${stream}.

 1
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-09 12:32:36

Kilka pytań:

    Czy możesz umieścić rzeczy na urządzeniu, do którego się podłączasz?
  1. czy polecenia wykonywane przez skrypt są takie same czy różnią się w zależności od maszyny/użytkownika?
  2. Czy chcesz, aby osoba klikająca ikonę musiała podać identyfikator użytkownika i / lub hasło?

To powiedziawszy, napisałem jakiś czas temu trochę Javy, aby porozmawiać z kilkoma listwami zasilającymi obsługującymi IP (BayTech RPC3s), które mogą ci się przydać. Jeśli jesteś zainteresowany, zobaczę, czy uda mi się to wykopać i wyślij to gdzieś.

 0
Author: BonkaBonka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-02 15:10:33

Podoba mi się przykład podany przez Active State używając Pythona. Oto pełny link . Dodałem prostą część logowania z linku, ale możesz uzyskać streszczenie tego, co możesz zrobić.

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
Author: rshield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-28 20:30:27

Chociaż nie jest to bezpośrednio związane z twoim pytaniem, zalecałbym użycie ssh, ponieważ możesz za jego pomocą wykonywać określone polecenia (plus jest domyślnie bezpieczniejszy).

 -1
Author: Brian Mitchell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-02 14:51:30

Zapisz sesję telnet w pliku Bat Dos i wykonaj.

 -1
Author: D4f56w4e,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-14 13:08:47