
C’è un momento preciso, nel cuore di una notte passata a debuggare una rete Docker che non ne vuole sapere di collaborare, in cui ti senti veramente impotente. Sei lì, dentro un container super-stripped, pulito come un codice scritto da un purista della programmazione, e realizzi che non hai nemmeno wget o curl per fare un semplice test di connettività. Niente, zero, il vuoto pneumatico. Sembra la fine del mondo, ma in realtà è solo l’occasione perfetta per tirare fuori il trucco sporco che ogni vero smanettone dovrebbe avere nel proprio kit di sopravvivenza.
Recentemente è emerso un piccolo gioiello (che in realtà è un classico, ma che sempre stupisce chi non mastica terminale ogni giorno) su come bypassare l’assenza di strumenti standard usando solo Bash e la sua capacità di parlare direttamente con /dev/tcp. Sì, avete letto bene. Non è un vero file su disco, non lo troverete facendo un ‘ls’, ma è una funzione interna di Bash che permette di aprire socket TCP come se steste scrivendo su un file normale.
Il trucco è tutto qui: basta usare ‘exec 3/dev/tcp/hostname/port’ per aprire una connessione e poi iniettare manualmente la stringa della richiesta HTTP. Un ‘printf’ con l’header corretto e un ‘cat’ per leggere la risposta, ed ecco che il server vi risponde. È brutale, è sporco, è meraviglioso. È esattamente lo spirito del retrocomputing: quando le risorse scarseggiavano, non potevi permetterti l’overhead di un client moderno; dovevi parlare direttamente con l’hardware, o in questo caso, con il socket.
Certo, non fate l’ebete: non è un sostituto di curl. Non gestisce redirect, non capisce la compressione GZIP, non sa nemmeno cosa sia l’HTTPS (per quello serve ancora openssl) e, se dimenticate l’header ‘Connection: close’, il comando ‘cat’ rimarrà lì a fissare il vuoto all’infinito, proprio come noi davanti a un bug senza log.
Per noi che amiamo smontare le cose per capire come funzionano, questa è pura poesia tecnica. Ci ricorda che sotto tutto l’hype dell’intelligenza artificiale e dei framework pesantissimi, la base è ancora quella: flussi di byte che viaggiano su socket. Usare questo trucco in un ambiente di produzione è un suicidio, ma usarlo per debuggare un microservizio in un container minimalista è un atto di pura maestria tecnica. È quel tipo di ‘hack’ che ti fa sentire un po’ più vicino ai vecchi hacker degli anni ’70 e un po’ meno uno sviluppatore che dipende da mille dipendenze NPM.
Quindi, la prossima volta che vi trovate in un ambiente deprivato di strumenti, non disperate. Ricordate che Bash ha dei poteri nascosti. Ma per le cose serie, mantenete curl installato, perché non abbiamo tutti il tempo di scrivere manualmente gli header per ogni singola API.
Source: TIL: You can make HTTP requests without curl using Bash /dev/TCP
