C'est le petit couteau suisse du réseau. Certains connaissent déjà netcat ...(nc).
Socat permet de lier presque n'importe quoi vers n'importe quoi.
TCP -> UDP
TCP -> FICHIER
TCP -> EXECUTABLE
OPENSSL -> FICHIER
(Socket unix, pipe, un serveur proxy, ...)
Enfin bref, n'importe quoi vers n'importe quoi.
L'utilisation principale est d'en faire un relais réseau:
socat tcp4-listen:9999,reuseaddr,fork tcp4:google.com:80
- le reuseaddr c'est pour éviter les problèmes avec le CTRL+C)
- le fork c'est pour avoir plusieurs connexions
Socat, permet ainsi de créer un point d'entrée sur le port 9999 directement vers google.com:80
socat tcp4-listen:9999,reuseaddr,fork exec:"cat /proc/meminfo"
puis tester : telnet 127.0.0.1 9999 (et hop le meminfo)
Mais le plus intéressant c'est le SSL pour les paranos:
D'abord générer un certficat x509 (self signé ou plus, si vous êtes riches :))
openssl genrsa -out server.key 1024
openssl req -x509 -key server.key -out server.crt -days 365 -new
socat openssl-listen:9999, cert=server.crt,key=server.key,reuseaddr,fork exec:"cat /proc/meminfo"
puis tester: openssl s_client -connect 127.0.0.1:9999
ou encore
socat openssl-listen:9999,cert=server.crt,key=server.key,reuseaddr,fork tcp4:google.com:80
puis: firefox https://127.0.0.1:9999
Mais là tout le monde peut se connecter... il est possible de faire une authentification par certificat pour limiter les accès.
openssl genrsa -out client.key 1024
openssl req -key client.key -out client.csr -new
openssl x509 -CA server.crt -CAkey server.key -in client.csr -req -CAcreateserial -out client.crt
socat openssl-listen:9999,cert=server.crt,key=server.key, cafile=server.crt,reuseaddr,fork,verify=1,cipher=HIGH:3DES:MD5 file:/proc/cpuinfo,rdonly
puis tester: openssl s_client -host 127.0.0.1 -port 9999 -cert client.crt -key client.key
Voila amusez vous bien.
@+ Dominique D.
note 1: pour plus de sécurité il faut ajouter -des3 lors de la génération des clefs pour avoir une passphrase.
note 2: http://www.dest-unreach.org/socat/
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.