2012-03-21 7 views
10

Mam serwer, który akceptuje połączenia telnet do zarządzania. Brakuje historii poleceń, więc chcę, aby moja sesja Telnet ją wspierała. Moje pytania:Jak zaimplementować historię poleceń na kliencie Telnet? (strzałki w górę/w dół)

1) Czy muszę to zaimplementować po stronie serwera, aby serwer wysłał wcześniejsze polecenia do klienta, a następnie klient mógł ponownie wykonać?

2) Czy istnieje sposób wdrożenia tej funkcji w kliencie Telnet (nie zadzieraj z serwerem)?

Jeśli odpowiedź to 1), to muszę wiedzieć, jak przechwytywać i wysyłać klawisze strzałek w górę iw dół podczas sesji telnet bez konieczności naciskania klawisza Enter.

Odpowiedz

33

To nie jest problem z serwerem. Po prostu użyj rlwrap z klientem Telnet. To daje readline bez programowania.

$ rlwrap telnet server port 

(. I faktycznie korzysta nc zamiast telnet ponieważ jest łatwiejszy w obsłudze i bardziej wytrzymałe)

+0

10000000 dzięki! – chrisapotek

+1

to działało jak czar! – chrisapotek

+0

Jeden problem tutaj: ^], aby wyjść NIE działa. :( – chrisapotek

5

użycie socat:

socat readline,history=$HOME/.telnet_history TCP:host:23 
+1

Uwaga: jeśli 'history' zostanie pominięty, zostanie użyty plik' $ HOME/.history'. – Lekensteyn

+1

Nie działa na najnowszym systemie Ubuntu/Debian, niestety, [z powodu problemu licencyjnego] (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=677371). –

1

Jestem zakładając, że jest to usługa napisałem w Perlu na podstawie Twoich tagów.

Możesz użyć modułu Term :: ReadLine z CPAN, aby zrobić to, co chcesz. Ze strony CPAN, oto podstawowy przykład:

use Term::ReadLine; 
    my $term = Term::ReadLine->new('My Management Service'); 
    my $prompt = "Enter your management command: "; 
    my $OUT = $term->OUT || \*STDOUT; 
    while (defined ($_ = $term->readline($prompt))) { 
     my $res = eval($_); 
     warn [email protected] if [email protected]; 
     print $OUT $res, "\n" unless [email protected]; 
     $term->addhistory($_) if /\S/; 
    } 
Powiązane problemy