Telnet fornisce un metodo di comunicazione standard e bidirezionale, attraverso il quale due host possono comunicare.
Il protocollo Telnet, descritto nelle RFC 854 e 855, permette a due host di comunicare tra loro. Grazie a questo protocollo è possibile impartire comandi al server remoto come se si fosse localamente collegati a quest'ultimo. Una sessione telnet, utilizza il protocollo TCP per la comunicazione e necessita di un Telnet Server in ascolto sulla porta 23.
Le funzioni fornite a due host che comunicano tramite una sessione telnet sono:
- Network Virtual Terminal (NVT);
- Negoziazione delle opzioni;
- Viste simmetriche di terminali e processi;
Network Virtual Terminal
NVT, come indica il nome, è un ambiente virtuale creato ai due estremi della connessione, dove operano rispettivamente il client ed il server Telnet. Le funzioni disponibili per la connessione sono negoziate tra i due host partendo da un insieme minimo, il quale deve essere necessariamente disponibile. In questo modo è possibile offrire un ambiente identico per i due host che instaurano la connessione in base alle caratteristiche comuni disponibili per ciascuno e preventivamente negoziate. Grazie a NVT, non è quindi necessario utilizzare software specifici sia dal lato client che da quello server.
Negoziazione delle opzioni
In quanto non tutti i client ed i server Telnet supportano le medesime funzioni, è stato implementato un meccanismo di negoziazione delle opzioni grazie al quale, una sessione può avvenire utilizzando le caratteristiche comuni ai due host. Le opzioni di base disponibili possono poi essere successivamente ampliate.
La negoziazione, che avviene solitamente all'inizio di una connessione, utilizza quattro tipi di richieste:
- DO <codice opzione>: Richiede all'NVT ricevente di implementare l'opzione richiesta;
- DON'T <codice opzione>: Richiede all'NVT ricevente di cessare l'utilizzo dell'opzione richiesta;
- WILL <codice opzione>: Propone all'NVT ricevente di implementare l'opzione indicata;
- WON'T <codice opzione>: Propone all'NVT ricevente di cessare l'utilizzo dell'opzione indicata;
Viste simmetriche di terminali e processi
La capacità di negoziare le opzioni, essendo simmetrica può dare origine ad un ciclo infinto di richieste qualora uno dei due host interpretasse erronamente le richieste. Telnet prevede delle funzioni per evitare questo tipo di problema:
- La richiesta di definizione di un'opzione può essere inviata ad un NVT solo se viene richiesto un cambiamento dello stato delle opzioni;
- Se un NVT riceve una richiesta di definizione di un'opzione già definita non deve inviare nessun messaggio di accettazione al fine di evitare la possibile nascita di un loop senza fine;
- E' possibile definire una nuova opzione anche quando il flusso dati della sessione è in corso. L'opzione sarà attiva dalla sua definizione in avanti;
Funzioni di controllo standard
Essendo tra gli obbiettivi del protocollo quello di definire uno metodo standard per la comunicazione, indipendentemente dal sistema su cui è in funzione il terminale, sono stati definite alcune funzioni di controllo standard:
- Interrupt Process (IP): sospende un processo in corso su un server Telnet;
- Break (BRK): indica che è stato premuto il tasto break;
- Abort Output (AO): porta a termine il processo in esecuzione senza visualizzare l'output sul terminale utente;
- Are You There (AYT): permette di sapere se l'host remoto è ancora online;
- Erase Character (EC): permette di correggere i caratteri di una stringa di testo prima di inviarla al server;
- Erase Line (EL): permette di cancellare una riga completa dall'input dei comandi;
- Synchronize (SYNCH): permette di riprendere il controllo della sessione in caso di problemi;
Caratteri di Escape
Ogni comando inviato da un client ad un server Telnet è composto da due parti: il codice di Escape detto anche IAC (Interpret As Command) ed il codice del comando. I codici di Escape hanno lo scopo di distinguere i comandi dai dati durante la sessione Telnet tra due host.
Alcuni dei principali comandi telnet:
close
: chiude la sessione corrente;
display
: visualizza i parametri operativi della sessione;
open <host> <porta>
: indica a quale server e su quale porta deve avvenire il collegamento;
quit
: esce dal client telnet;
send <codice>
: invia dei caratteri speciali al server;
set <parametro>
: imposta i parametri operativi;
unset <parametro>
: elimina l'impostazione di un parametro operativo;
status
: visualizza lo stato della connessione;
?
: visualizza l'help in linea;
Un classico utilizzo: l'accesso ad una shell di un host in rete. Un esempio:
homer@Apollo13:~$ telnet
telnet> open 192.168.0.1
Avvio del client e connessione all'host 192.168.0.1
Trying 192.168.0.1...
Welcome to Joker Linux Slackware Box!!!
Joker login: homer
Password: du367fh34r
L'host risponde quindi passa alla fase di autenticazione...
Linux 2.4.18.
Last login: Wed Jul 23 09:35:32 +0200 2003 on pts/0 from 192.168.0.100.
No mail.
homer@Joker:~$
Connessione avvenuta con successo. A questo punto è possibile impartire comandi come da locale. (Esiste anche la possibilità di implementare un telnet server con accesso anonimo)
Essendo Telnet un protocollo flessibile, può essere utilizzato per diversi molti altri compiti come per esempio: effettuare sessioni POP3, IMAP, SMTP, oppure collegarsi alla console di router.