MokaByte
Numero 14 - Dicembre 1997
|
|||
|
|||
Pietro Venanzangeli |
REALIZZAZIONE E PROGETTAZIONE DI UN SERVER TELNET | ||
HTTP e SMPT sono i più noti e richiesti servizi di rete. Ma oltre a questi, ne esiste una serie meno conosciuta ed utilizzata soprattutto dagli addetti ai lavori, come news telnet e gofer. Quello che ci accingiamo ad analizzare è un piccolo server telnet.
PROGETTARE
UN SERVER TELNET
Prima di realizzare
un qualsiasi server ci si deve porre delle domande più o meno importanti,
sia per il servizio che si intende dare all'utilizzatore, sia per le specifiche
che intendiamo seguire nella realizzazione del server.
Un' ipotetica
lista dei punti da seguire potrebbe essere :
SICUREZZA
Uno dei punti
fondamentali su cui bisogna fare, secondo me, particolarmente attenzione
sia in fase di analisi che in fase di stesura del codice è la sicurezza
del servizio. La sicurezza del servizio può essere a sua volta suddivisa
in vari eventi:
c) Attacchi
esterni.
Tutti i servizi
on-line devono essere molto robusti, per difendersi sia dai crash descritti
sopra sia dagli attacchi esterni dei vari giocherelloni della rete, che
si divertono a fare incursioni in tutti i server del pianeta. Questo forse
è il punto più delicato e più difficile da proteggere,
sia in fase di analisi, sia di stesura del codice, perché non sempre
si conoscono le armi del nemico. Per esempio tramite alcune piccole utility
è possibile intercettare le sessioni telnet degli altri utenti della
rete e monitorare tutti i dati che fluiscono da loro verso il server e
viceversa. L' unica soluzione a questo problema è quella di codificare
le informazioni trasmesse dal server verso il client, questo pero' porta
alla scrittura di un programma client in grado di decodificare i dati.
|
|
|
Si occupa di accettare le connessioni dai vari client che vogliono accedere al servizio, si puo' considerare come la nostra porta di ascolto. |
|
Questa
classe viene creata ogni volta che arriva una richiesta di connessione
da parte di un nuovo utente.
È eseguita in thread. |
|
E' la nostra interfaccia verso il client telnet, gestisce la sua connessione ed I possibili messaggi anomali, genera l'eccezione TException. |
|
Si occupa della gestione di tutte le richieste di comandi da parte dell'utente e di caricare se necessario i comandi richiesti. |
|
|
|
Classe di eccezioni generate da GetTelnetLine, in particolare è generata alla chiusura del telnet e alla sua disconnessione. |
|
|
|
Verifica login e passowrd per tutti i nuovi client. |
|
Contiene tutte le informazioni sull'utente attualmente collegato. |
|
Contiene il nostro ponte, la nostra interfaccia, per il caricamento dinamico dei dati. |
|
Esegue un CHECK del sistema del server. Questa classe viene caricata dinamicamente. |
|
Esegue il comando PWD delle console UNIX, cioè mostra la directory corrente, nel nostro caso la directory privata. Questa classe viene caricata dinamicamente. |
|
Esegue il vecchio e buon comando dir del dos. Questa classe viene caricata dinamicamente. |
Ora possiamo analizzare gli unici due punti oscuri di tutto il programma, il quale rimane ugualmente di facile lettura .
DynaMode e
il caricamento delle classi
La classe DynaMode
è il punto di ingresso per le classi caricate dinamicamente. Questo
meccanismo ci permette di chiamare dei metodi di una classe DERIVATA da
una classe "PADRE " . Questo è quello che in C++ è gestito
da quell'insieme di funzioni RTTI ( Run Time Type Identification ). Per
maggiori informazioni a riguardo vedi la documentazione ufficiale. Il punto
più caldo e pragmatico di tutti i sorgenti potrebbe essere la seguente
istruzione :
Hashtable
per i comandi personalizzati
Per contenere
tutti i comandi personalizzati di ogni utente, la mia scelta è ricaduta
su una hashtable, questo perché permette un recupero dei comandi
molto veloce e quindi riduce i tempi di risposta del servizio, anche se
ha un grande spreco di risorse.
Come
configurare un nuovo utente.
Ogni utente
che accede al nostro MST dispone di :
0 - password utente.
1 - directory privata
da 2 in poi la lista dei comandi dell'utente.
Ad esempio:
File : Moka.psw
[ Linea 0 ] moka
[ Linea 1 ] C:\.
[ Linea 2 ] DIR
[ Linea 3 ] PWD
[ Linea 4 ] SYSTEM
La path privata
deve terminare con il carattere ' . , . La password è case
sensitive, qundi attenzione !
SICUREZZA
Quello che ho
presentato è solo una bozza di ciò che si può fare
e ci sono molte migliorie da apportare tra cui :
|
|
|
|
|
|
|
|
|
|
Pietro
Venanzangeli è programmatore C/C++ e JAVA. Diplomato in informatica
all'ITIS B.Pascal di Roma.
Si interessa di amministrazione di siti WEB e allo sviluppo di applicazioni internet e di networking. Attualmente lavora come consulente. Puo' essere contattato via e-mail a: networkmanager@lcnet.it |
|
||
|
||
MokaByte ricerca
nuovi collaboratori
|
||
|