Richieste HTTP senza curl: Bash /dev/tcp spiegato

Ti trovi all'interno di un container Docker ridotto all'osso. Devi controllare un endpoint API. Digiti curl e ricevi "command not found". Provi con wget e ricevi lo stesso errore.

Non c'è bisogno di farsi prendere dal panico. Bash ha una funzione nascosta integrata nel suo nucleo. Si chiama /dev/tcp.

Questa funzione ti permette di aprire connessioni TCP grezze senza installare alcun tool. Funziona su quasi tutti i sistemi Linux.

Come funziona: Quando fai riferimento a /dev/tcp/hostname/port, Bash apre una connessione socket. Questa è una funzione specifica di Bash. Non funzionerà in sh o zsh.

Il comando magico: exec 3<>/dev/tcp/hostname/port

Questa riga apre un file descriptor bidirezionale. Puoi scriverci dei dati e leggere le risposte.

Esempio di richiesta GET:

#!/bin/bash
exec 3<>/dev/tcp/example.com/80
printf "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n" >&3
cat <&3
exec 3>&-

Perché è utile: • Debugging in ambienti minimali dove non è possibile installare pacchetti. • Esecuzione di health check in pipeline CI/CD con zero dipendenze. • Test di connettività su sistemi embedded. • Imparare esattamente come funzionano gli header HTTP.

Limiti importanti da ricordare: • No HTTPS: Bash non può gestire la crittografia TLS/SSL. Usa openssl s_client per il traffico criptato. • No Redirect: Devono essere gestiti manualmente. • No complessità: Non usare questo metodo per client HTTP di produzione. Per quello, usa curl.

Includi sempre l'header Connection: close. Se lo dimentichi, lo script potrebbe bloccarsi in attesa del server.

La prossima volta che ti trovi bloccato su un server con restrizioni, usa questo trucco. Trasforma un vicolo cieco in uno strumento funzionante.

Fonte: https://dev.to/onsen/http-requests-without-curl-bash-devtcp-explained-5852

Community di apprendimento opzionale: https://t.me/GyaanSetuAi