Socat

From aldeid
Jump to navigation Jump to search
This article needs to be translated
This article has been copied from the old wiki and is in french. It needs to be translated into english. If you wish to participate, please send a mail to (click to reveal email)
You might also see: Netcat

Socat

Description

Netcat est considéré comme ‘le couteau suisse TCP/IP’. Socat en est la version améliorée (bien que poursuivant des objectifs sensiblement différents). Comme son nom l'indique, Socat est un outil similaire à cat. Il permet d'établir deux flux bidirectionnels via le réseau (ou autres) et d'y faire transiter des données.

Installation

# wget http://www.dest-unreach.org/socat/download/socat-1.4.0.3.tar.gz
# tar xzvf socat-1.4.0.3.tar.gz
# cd socat-1.4
# ./configure
# make
# make install

Utilisation

La syntaxe de Socat est relativement simple :

$ socat [options] <adresse1> <adresse2>

La liste des options, non décrite dans ce manuel, est disponible avec la commande man socat.
Socat utilise des « adresses » qui peuvent, en réalité, être toutes sortes de choses, liens TCP, sockets, fichiers, tubes, STD*, commandes...
La simple consultation de la page de manuel et du fichier d'exemples laisse rêveur. Avec un peu de bonne volonté et de temps, socat vous permettra de venir à bout de nombreux problèmes (traversée de firewall, relayage SMTP, redirections depuis une passerelle, etc.).

Equivalences Socat/Netcat

 NetcatSocat
Joindre une adresse sur un port donné$ nc 127.0.0.1 80$ socat - tcp:127.0.0.1:80,crnl
Ecouter sur un port$ nc -l -p 80$ socat - TCP-LISTEN:80,reuseaddr
Interroger un serveur NTP (serveur de temps)$ nc time.nist.gov 13$ socat TCP:time.nist.gov:13 -
54178 07-03-19 10:42:02 50 0 0 427.6 UTC(NIST) *

Le nombre de possibilités offertes est presque infini. Du simple équivalent à netcat (socat - TCP-LISTEN:1025,crlf) au relais (socat TCP-LISTEN:8110 TCP:192.168.0.20:110) en passant pas la connexion en mode telnet amélioré (socat readline TCP:192.168.0.20:110), socat s'avère rapidement être un outil indispensable de contrôle, de test et de configuration système et réseau.

Transfert de fichier

Sur le serveur à partir duquel l'on souhaite récupérer le fichier "test"

# socat TCP-LISTEN:1234 test

Sur le client :

# socat TCP:hostname:1234 test

Redirection de port

L’exemple qui suit montre comment rediriger les requêtes arrivant sur le port local 80 vers un autre serveur.
Dans un terminal, entrez la commande suivante :

$ socat TCP-LISTEN:80,fork TCP:www.google.com:80

Cette commande donne le résultat suivant dans le navigateur :