Server FTP in C compatibile con FileZilla

C · Reti di Calcolatori · A.A. 2022-2023

Server FTP funzionante scritto in C, progettato per essere pienamente compatibile con il client FileZilla. Realizzato come progetto per il corso di Reti di Calcolatori (A.A. 2022-2023), copre i fondamentali del protocollo FTP definiti nell’RFC 959.

Funzionalità principali

Il server gestisce l’intero ciclo di vita di una sessione FTP: dall’autenticazione al trasferimento file, passando per la navigazione del filesystem remoto.

Trasferimento dati

Supporta entrambe le modalità previste dal protocollo:

  • Modalità attiva (PORT) - il client apre la porta dati e il server si connette ad essa
  • Modalità passiva (PASV) - il server apre la porta dati e attende la connessione del client

Comandi supportati

Comando Funzione
USER / PASS Autenticazione utente
PORT / PASV Selezione modalità di trasferimento
LIST Elenco file e directory
PWD / CWD Navigazione del filesystem
RETR / STOR Download e upload di file
MKD / RMD Creazione e rimozione directory
DELE Eliminazione file
TYPE Selezione tipo di trasferimento (ASCII / Binario)
QUIT Chiusura sessione

Architettura

Il progetto è strutturato in moduli separati per mantenere il codice leggibile e manutenibile.

ftpServer.c   →  entry point, socket, accept loop
handlers.c    →  logica dei comandi FTP
myLib.c       →  utilità: I/O, parsing, wrapper socket

Concorrenza - il server adotta un’architettura multi-processo (fork): ogni connessione accettata genera un processo figlio dedicato, mantenendo le sessioni completamente isolate tra loro.

Doppio canale TCP - seguendo le specifiche del protocollo FTP, l’implementazione gestisce due connessioni TCP distinte per sessione: il canale di controllo (comandi e risposte) e il canale dati (contenuto dei file e listing delle directory).

Gestione degli errori - i codici di risposta seguono lo standard FTP (2xx, 3xx, 4xx, 5xx), garantendo la compatibilità con qualsiasi client conforme all’RFC e fornendo feedback significativo in caso di trasferimenti falliti o operazioni non valide.

Stack tecnologico

  • Linguaggio: C
  • Ambiente: Unix-like (Linux / macOS)
  • Compilazione: GCC + Makefile
  • Protocollo: FTP - RFC 959

Vedi su GitHub