2012-03-21 11 views
10

Ho un server che accetta connessioni telnet per la gestione. Mi manca la cronologia dei comandi, quindi voglio che la mia sessione telnet lo supporti. Le mie domande:Come implementare una cronologia dei comandi su un client telnet? (frecce su/giù)

1) Devo implementarlo sul lato server, quindi il server invierà i comandi passati al client e quindi il client potrà eseguire nuovamente?

2) È comunque necessario implementare questa funzionalità nel client telnet (non disturbare il server)?

Se la risposta è 1), quindi ho bisogno di sapere come acquisire e inviare i tasti freccia su e giù sulla mia sessione telnet senza dover premere invio.

risposta

33

Questo non è un problema del server. Basta usare rlwrap con il tuo client telnet. Ti dà readline senza programmazione.

$ rlwrap telnet server port 

(. Io in realtà uso nc invece di telnet poiché è più facile da usare ed è più robusto)

+0

10000000 grazie! – chrisapotek

+1

ha funzionato come un fascino! – chrisapotek

+0

Un problema qui: ^] per uscire NON funziona. :( – chrisapotek

5

uso socat:

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

Nota: se si omette 'history', viene utilizzato il file' $ HOME/.history'. – Lekensteyn

+1

Non funziona sull'ultima Ubuntu/Debian, sfortunatamente, [a causa di un problema di licenza] (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=677371). –

1

Sto assumendo questo è un servizio che si ho scritto in Perl, in base ai tuoi tag.

È possibile utilizzare il modulo Term :: ReadLine di CPAN per fare ciò che si desidera. Dal sito Web CPAN, ecco un esempio di base:

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/; 
    } 
Problemi correlati