Home Homebrew Rilasciato zftpd v1.2.2: il server FTP zero-copy in C migliora stabilità e...

Rilasciato zftpd v1.2.2: il server FTP zero-copy in C migliora stabilità e performance su PS4 e PS5 con nuove ottimizzazioni di rete

149
0

La nuova versione 1.2.2 di zftpd rappresenta uno degli aggiornamenti più significativi dall’introduzione del progetto. Si tratta di un rilascio fortemente incentrato su cambiamenti strutturali interni e miglioramenti architetturali che puntano a rendere il server FTP ancora più stabile, sicuro ed efficiente.

L’aggiornamento è caldamente consigliato, perché interviene in profondità sul comportamento della rete e sulla gestione dell’I/O, introducendo ottimizzazioni che incidono direttamente sulla qualità dei trasferimenti dati.

Il cuore di questa release è una revisione sostanziale del sistema di trasferimento. Il vecchio limitatore di banda per sessione basato su token-bucket è stato rimosso e sostituito da una gestione più moderna del flusso dati tramite socket corking applicato ai cicli di sendfile e read.

Questa scelta consente un controllo più fine sull’invio dei pacchetti, riducendo frammentazioni e migliorando la coerenza delle velocità di trasferimento.

Implementata inoltre una chiusura più elegante dei data socket, così da evitare i fastidiosi reset di connessione (RST) che in passato potevano interrompere bruscamente un trasferimento.

Particolare attenzione è stata dedicata all’affidabilità delle operazioni FTP più critiche, come RETR, STOR e APPE. Ora il sistema effettua flush espliciti con fsync e fornisce report di errore più dettagliati, aumentando la trasparenza e la sicurezza durante le operazioni di lettura e scrittura.

Anche sul fronte sicurezza sono stati compiuti passi avanti, con un rafforzamento della formattazione dei token CSRF nel modulo HTTP, prevenendo potenziali buffer overrun.

Un capitolo importante riguarda le ottimizzazioni specifiche per console, in particolare per PlayStation 4 e PlayStation 5.

In questo ambito sono stati aumentati buffer e dimensioni degli stream per migliorare il throughput, sono stati introdotti timeout I/O dedicati e impostazioni di linger più appropriate, e su PS5 è stato disabilitato il rate limiting per massimizzare la velocità di trasferimento.

Inoltre, la gestione dell’I/O su console è stata resa molto più robusta grazie all’uso di F_NOCACHE e posix_fadvise, tecniche che ottimizzano l’accesso ai file riducendo l’impatto della cache di sistema.

Anche il livello di astrazione della piattaforma, il cosiddetto PAL, ha ricevuto un aggiornamento importante. Sono state introdotte nuove primitive di rete per configurare in modo più sicuro e flessibile i socket dati, inclusi strumenti per corking, gestione dei timeout e drenaggio dei buffer.

I file pal_network.h e pal_network.c sono stati aggiornati per migliorare configurabilità e telemetria, rendendo l’infrastruttura interna più solida e pronta a future evoluzioni.

Infine, non mancano interventi di manutenzione e build system: sono stati corretti piccoli problemi nel Makefile per garantire la creazione corretta delle directory di compilazione, aggiunta documentazione interna sulle API e rifinite configurazioni di build e file .gitignore.

Il risultato complessivo è un server FTP più maturo, stabile e performante, capace di offrire connessioni più sicure e velocità più costanti, soprattutto in ambito console.

Caratteristiche principali

  • Percorso dati zero-copy dove disponibile (fast path con sendfile; fallback su I/O bufferizzato quando attiva la cifratura).
  • I/O TCP robusto (gestione invii parziali, EINTR e buffer di invio consapevoli della backpressure).
  • Timeout per canali di controllo e dati + timeout di inattività della sessione.
  • Hardening dei percorsi (canonicalizzazione, blocco del traversal, safe-list opzionale per /dev, /proc, /sys).
  • Logging strutturato per sessione + statistiche (byte/file inviati e ricevuti).
  • Limitazione della velocità di trasferimento (token bucket, attivabile/disattivabile a compile-time).
  • Ripresa upload tramite REST + STOR; upload in append tramite APPE.
  • Cifratura opzionale ChaCha20 (AUTH XCRYPT) con chiave precondivisa (PSK).
  • Notifiche a schermo su PS4/PS5 (IP/porta e stato).
  • File explorer web ZHTTP opzionale (a compile-time, abilitato di default su PS4/PS5).

Comandi supportati

  • Autenticazione e controllo: USER, PASS, QUIT, NOOP.
  • Navigazione: CWD, CDUP, PWD.
  • Elenco file: LIST, NLST, MLSD, MLST (MLST minimale).
  • Trasferimento: RETR, STOR, APPE, REST.
  • Gestione file: DELE, RMD, MKD, RNFR, RNTO.
  • Connessione dati: PORT, PASV.
  • Informazioni: SIZE, MDTM, STAT, SYST, FEAT, HELP.
  • Parametri di trasferimento: TYPE, MODE, STRU.
  • Cifratura (opzionale): AUTH XCRYPT (ChaCha20 con chiave precondivisa PSK).

Esecuzione (Daemon) per Piattaforma

Linux

./build/linux/release/zftpd-linux--v<version>.elf

Opzioni utili (solo POSIX): -p <porta> e -d <directory_root>.

macOS

./build/macos/release/zftpd-macos-<arch>-v<version>

PS4

Richiede un payload loader (ad esempio WebKit/PPPwn/Netcat/GoldHEN). zftpd non richiede un HEN residente, ma deve essere avviato tramite loader/exploit.

  • Se il loader richiede un payload .bin: inviare build/ps4/release/zftpd-ps4-v<version>.bin.
  • Se il loader accetta ELF: è possibile scegliere tra build/ps4/release/zftpd-ps4-v<version>.bin e build/ps4/release/zftpd-ps4-v<version>.elf.

All’avvio viene mostrata una notifica con l’indirizzo IP e la porta.

PS5

Richiede un payload loader (etaHEN/Netcat o equivalente).

  • Se il loader richiede un payload .bin: inviare build/ps5/release/zftpd-ps5-v<version>.bin.
  • Se il loader accetta ELF: è possibile scegliere tra build/ps5/release/zftpd-ps5-v<version>.bin e build/ps5/release/zftpd-ps5-v<version>.elf.

All’avvio viene mostrata una notifica “started” insieme a FTP: <ip>:<port>.

Configurazione

La configurazione in fase di compilazione si trova in ftp_config.h. Macro utili:

    • FTP_DEFAULT_PORT (PS4/PS5 predefinita 2122, POSIX predefinita 2121)
    • FTP_MAX_SESSIONS
    • FTP_SESSION_TIMEOUT
    • FTP_TRANSFER_RATE_LIMIT_BPS / FTP_TRANSFER_RATE_BURST_BYTES
    • FTP_LOG_COMMANDS

Note

Se su PS4/PS5 compare il messaggio “payload already loaded”, significa che un’istanza è già attiva (deduplicazione). Il nuovo daemon tenterà di terminare la vecchia istanza e avviarne una nuova sulla porta FTP_DEFAULT_PORT:2122.

Se non riesce, proverà con la porta successiva (FTP_DEFAULT_PORT+1:2123) fino a un massimo di 9 porte consecutive.

Per test su host: make TARGET=linux test oppure make TARGET=macos test.

ZHTTP (Web File Explorer)

  • Cos’è: Interfaccia web leggera per navigare, scaricare e (opzionalmente) caricare file direttamente dal browser.
  • Abilitazione/disabilitazione: Attivo di default su PS4/PS5. Disattivato di default sulle altre piattaforme. È possibile forzare l’attivazione con ENABLE_ZHTTPD=1 oppure disattivarlo con ENABLE_ZHTTPD=0 in fase di build (esempio: make TARGET=ps5 ENABLE_ZHTTPD=0).
  • Impatto sulla build: Aggiunge i moduli HTTP (event_loop_kqueue, http_server, http_parser, http_response, http_api, http_csrf, http_resources).
  • Utilizzo: Dopo aver avviato il daemon, aprire http://<ip>:<port>/ (la porta coincide con quella FTP configurata). Viene mostrato un file explorer con breadcrumb, download diretto e — se compilato con ENABLE_WEB_UPLOAD=1 (abilitato insieme a ZHTTP) — un pulsante per l’upload.
  • Sicurezza: Pensato per scenari LAN/payload; non prevede autenticazione aggiuntiva oltre al contesto della rete locale. Mantenere la porta chiusa su WAN.

Changelog

La versione 1.2.2 introduce miglioramenti significativi alla robustezza dei trasferimenti dati e alle prestazioni complessive della rete.

Questa release si concentra fortemente sull’ottimizzazione dell’I/O su file e sul comportamento dei socket, in particolare per le piattaforme PS4 e PS5, garantendo maggiore stabilità, connessioni più sicure e velocità di trasferimento più costanti.

Cambiamenti fondamentali

Ottimizzazioni Rete & Trasferimenti

  • Sostituito il vecchio limitatore di banda per sessione basato su token-bucket con il socket corking attorno ai cicli sendfile/read.
  • Implementata una chiusura elegante del data-socket per evitare reset di connessione (RST).
  • Aggiunti flush fsync e report di errore più dettagliati per i comandi RETR, STOR e APPE.
  • Rafforzata la formattazione dei token CSRF HTTP per prevenire buffer overrun.

Specifiche per Piattaforma (PS4 / PS5 / Console)

  • Aumentate le dimensioni predefinite di buffer e stream per migliorare il throughput.
  • Aggiunti timeout I/O specifici per i dati e impostazioni linger per PS4, PS5 e altre piattaforme.
  • Disabilitato il rate limiting dei trasferimenti su PS5 per massimizzare la velocità.
  • Reso l’I/O su file significativamente più robusto su console tramite F_NOCACHE e posix_fadvise.

Aggiornamenti PAL (Platform Abstraction Layer)

  • Introdotte nuove primitive di rete PAL (ad esempio pal_socket_configure_data, cork/uncork, gestione timeout e funzioni di drain).
  • Aggiornati pal_network.h e pal_network.c per un comportamento dei socket più sicuro, configurabile e con migliore telemetria.

Build & Manutenzione

  • Corretti piccoli problemi nel Makefile per garantire la corretta creazione delle directory di build.
  • Aggiunta documentazione interna delle API e aggiornate configurazioni di build e file .gitignore.

Ringraziamenti

  • Un ringraziamento a tutti i tester che hanno contribuito a raggiungere un livello così elevato di stabilità e velocità costante. Senza il loro supporto, zftpd non avrebbe ottenuto questi risultati in così poco tempo.

Download zftpd v1.2.2

Linux (Debian)

  • zftpd-debian.elf
    SHA256: d627dabf1a2f950f21a3991a74f556291b2947f0b8283d63e19ad94178654550

macOS (Apple Silicon / arm64)

  • zftpd-macos-arm64
    SHA256: e46c0c4b468889ab22348719d6e68f6b38a6c7e4ccf4110f90f38941c98bfa2b

PS4

  • zftpd-ps4-v1.2.2.bin (Payload binario)
    SHA256: 8a0c305140865ad785bb5cb5320b760e2067ae6f159cff43bc359c6c003cfec4
  • zftpd-ps4-v1.2.2.elf (Formato ELF)
    SHA256: 897cc42521dd8f3c1eb0219891ea7d83b8aa6c162f8450b351d1b460eb7eb44e

PS5

  • zftpd-ps5-v1.2.2.bin (Payload binario)
    SHA256: 87e90cd9d12090315cd9126e0c2f15d4a98f7360f5f40921703b562cd595cee1
  • zftpd-ps5-v1.2.2.elf (Formato ELF)
    SHA256: b75436d8c19536fb19f2f77cd3c10861f6865c9a5e0eec91c929896c09fa1df7

Codice Sorgente

  • Source code (ZIP)
    Archivio contenente il codice completo del progetto aggiornato alla versione 1.2.2.

Alcune parti di questo articolo sono state generate con l’aiuto dell’intelligenza artificiale.

🔥 Prodotti in promozione e articoli più venduti: PS4

Vedi altri prodotti PS4

Questo articolo contiene link affiliati a Amazon. Se acquisti tramite questi link, potrei guadagnare una commissione senza costi aggiuntivi per te.

Ultimo aggiornamento 2026-06-10 / Link di affiliazione / Immagini da Amazon Product Advertising API

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui
Captcha verification failed!
Punteggio utente captcha non riuscito. Ci contatti per favore!

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.