Socat
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
Netcat | Socat | |
---|---|---|
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 :