Où sont passés les tuyaux ?

Publié le 26 août 2007 par Peck
Cet article est maintenant sur http://linux-attitude.fr/post/Ou-sont-passes-les-tuyaux

Niveau :
Résumé : socat

Vous connaissez le pipe et le pipe nommé pour rediriger des données d'un programme vers un autre. Dans l'histoire d'Unix le pipe a précédé la socket qui elle est bidirectionnelle. On peut la considérer comme la somme de 2 pipes. Tout ceci a été rendu générique et puisque tout ceci fonctionne à travers la même API (les file descriptors), il devrait être simple de remplacer une chose par une autre. Et c'est ce que nous permet socat.

Socat permet de rediriger un flux mono ou bi directionnel vers un autre flux mono ou bi directionnel. Ceci inclue les pipe, les fichiers, les file descriptor ouverts, les terminaux, les socket ipv4, ipv6, tcp, udp, unix ...

Quelques exemples d'équivalents avec les outils existants :
$ nc toto.fr 80
$ socat - TCP4:toto.fr:80,crnl

$ cat fichier
$ socat FILE:fichier -

$ cat > fichier
$ socat -u - FILE:fichier,creat=1

$ openssl s_client -connect wws.toto.fr:443
$ socat - SSL:wws.toto.fr:443,crnl,verify=0

Passons à plus évolué.

Un tunnel pas cher (ne marche que pour une connexion) :
$ socat TCP4-LISTEN:1022 TCP4:machine.toto.fr:22

Un tunnel un peu plus évolué :
$ socat TCP4-LISTEN:1022,reuseaddr,fork TCP4:machine.toto.fr:22

Un tunnel passant à travers un proxy :
$ socat TCP4-LISTEN:2022,reuseaddr,fork PROXY:proxy:machine.toto.fr:22,proxyport=3128,proxyauth=user:pass

Rendre une commande shell accessible à distance (utile hein !) :
$ socat TCP4-LISTEN:1234,reuseaddr,fork 'SYSTEM:/bin/cat /home/infos.txt'

Un logger distant :
$ socat -u TCP4-LISTEN:1234,reuseaddr,fork OPEN:/var/log/net.log,creat,append

Sécuriser un serveur :
$ socat OPENSSL-LISTEN:443,reuse‐addr,pf=ip4,fork,cert=server.pem,cafile=client.crt TCP4-CONNECT:localhost:80


Notez que socat dispose de nombreuses options pour chaque type de flux. Le man est très complet et vous sera d'une aide précieuse. Vous n'êtes plus maintenant limités que par votre imagination.

Comme disait le célèbre romain Proverbus : Adauces fortuna juvat.