Introduction

Il est possible de faire des requêtes HTTP sans utiliser l'outil curl, directement depuis le shell Bash. Cette fonctionnalité peut être utile dans des situations où les ressources sont limitées, comme dans un conteneur Docker minimal.

Contexte Technique

La commande exec 3<>/dev/tcp/service/8642 permet d'ouvrir une connexion TCP vers un hôte et un port spécifiques. Ensuite, la commande printf peut être utilisée pour envoyer une requête HTTP. Par exemple, pour faire une requête GET, on peut utiliser : printf 'GET /health HTTP/1.1 Host: service Connection: close ' >&3. La réponse du serveur peut alors être lue avec cat <&3.

Il est important de noter que /dev/tcp n'est pas un fichier réel sur le disque, mais plutôt une redirection gérée internement par Bash. De plus, la fonctionnalité /dev/tcp n'est disponible que si Bash est compilé avec l'option --enable-net-redirections.

Analyse et Implications

Cette fonctionnalité peut être très utile dans des situations où les ressources sont limitées, comme dans un conteneur Docker minimal. Cependant, il est important de noter que cette méthode ne prend pas en charge le protocole HTTPS, car /dev/tcp ouvre une socket brute. Pour utiliser HTTPS, il faudrait utiliser un outil comme openssl s_client.

Perspective

Il est important de noter que cette fonctionnalité n'est pas disponible dans tous les shells, comme dash ou zsh. De plus, il est recommandé de vérifier si la fonctionnalité /dev/tcp est activée avant de l'utiliser, en particulier sur des systèmes anciens ou minimalistes.