Netcat socat

De Aldeid.

Nom de l'article : Netcat & Socat
Auteur(s) : Sébastien DAMAYE
Statut : publié
Version : 1.0
Date dernière mise à jour : 18/08/2008
Mots clés : netcat socat
Pièces jointes :


Description : Cet article présente Netcat, considéré comme le "couteau suisse" du réseau, et Socat, une version améliorée.


Netcat

Description

Netcat, souvent nommé le « couteau suisse TCP/IP » permet de créer des sockets, c'est-à-dire d’établir des connexions réseaux TCP ou UDP.

Installation

Windows

Exécutable Netcat

http://www.hackosis.com/wp-content/uploads/2008/01/nc.zip

Installation via Cygwin

  • Sélection du package Cygwin Netcat 1.10-2
  • Ou installation à partir des sources :
# wget ftp://heanet.dl.sourceforge.net/n/ne/netcat/netcat-0.7.1.tar.gz
# tar zvxf netcat-0.7.1.tar.gz
# ./compile
# make
# make install

Sous Debian

# apt-get install netcat

Utilisation

Ecoute sur un port

A partir d’un client, l’établissement d’une connexion vers un serveur (host) sur un port spécifique (port) se fait simplement :

# nc <hostname> <port>

Sur le serveur, pour écouter sur un port spécifique :

# nc –l –p <port>

Par exemple, dans un premier terminal, entrez la commande suivante (écoute sur le port 23) :

# nc –l –p 23

Dans un second terminal, entrez la commande

# nc 127.0.0.1 23

Puis entrez du texte. Celui-ci apparaît dans le premier terminal.

Image:info.png
Remarque
Une fois que le client se déconnecte, la connexion se ferme automatiquement. L’option –l peut être remplacée par l’option –L afin de laisser la connexion ouverte, même si le client se déconnecte.

Option « detach »

Sous Windows, l’option –d permet de détacher netcat, c'est-à-dire de l’ajouter dans la liste des services actifs. Par exemple, la commande suivante, lancée sur un client Windows, permet d’ajouter un service d’écoute sur le port 1234 :

$ nc -d –L –e cmd.exe –p 1234

Il ne suffira alors, à partir du serveur, que de la ligne de commande suivante pour accéder au client :

$ netcat 192.168.182.1 10001
Microsoft Windows XP [version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\cygwin\home\a011830>

Port Scanning

Netcat propose une option de port scanning comme le montrent les résultats suivants :

$ nc -v -w 2 -z 127.0.0.1 1-200
DNS fwd/rev mismatch: localhost != xpsp2-20cc7397e
localhost [127.0.0.1] 135 (epmap) open
localhost [127.0.0.1] 110 (pop3) open
localhost [127.0.0.1] 25 (smtp) open

Pipe (« | ») et redirections (« < », « << », « >> », « > »)

Transfert de fichier

L’utilisation du pipe et des redirections permet d’étendre les fonctionnalités de Netcat, comme le montrent les exemples qui suivent.

  • Dans un premier terminal, entrez :
$ nc –l –p 1234 > output.txt
  • Dans un second terminal (le fichier input.txt est supposé exister à la racine du répertoire à partir duquel la ligne de commande est lancée) :
$ cat input.txt | nc 127.0.0.1 1234 –w 10

Dans l’exemple ci-dessus, la commande lancée dans le premier terminal permet d’écouter sur le port 1234 et de rediriger tout ce qui est reçu vers le fichier output.txt. La commande du second terminal permet d’afficher le contenu du fichier (cat input.txt), intercepté par netcat (par l’utilisation du pipe) qui l’envoie à l’hôte 127.0.0.1 sur le port 1234. Le paramètre –w 10 permet de terminer automatiquement la connexion à la fin de l’opération.

Transfert de répertoire

Un autre exemple pourrait consister à copier un répertoire complet en le compressant (opérations de compression/décompression intermédiaire assurée par la fonction tar).
Dans un premier terminal :

$ nc -l -p 1234 | tar xvfpz –

Dans un second terminal :

$ tar cvzfp - directory | nc -w 3 127.0.0.1 1234

Le premier terminal écoute sur le port 1234. Grâce au caractère pipe, tout ce qui arrivera sur cette connexion sera intercepté par la fonction tar qui décompressera (option xvfpz) le contenu reçu dans le répertoire courant.
Le second terminal compresse le répertoire directory et le transmet à Netcat qui établit une connexion à l’hôte local (127.0.0.1) sur le port 1234.

Serveur Web

L’exemple suivant montre comment utiliser netcat pour faire un serveur Web rudimentaire.
Vous avez besoin d’un fichier index.html contenant les lignes suivantes :

 <html>
   <head>
     <title>Welcome</title>
   </head>
   
   <body>
     <h1>Welcome</h1>
     <div style=background:#ff0000>Welcome to my web server</div>
   </body>
 </html>

Dans un terminal, entrez la commande suivante :

$ cat index.html | nc -v -l -p 80 -w 3

Lorsque vous appelez l’adresse http://127.0.0.1 à partir de votre navigateur, vous obtenez le résultat suivant :

Image:netcat_socat_14.jpg
Par ailleurs, le terminal affiche la sortie suivante, correspondant à ce qu’a renvoyé le navigateur (ici Firefox). Vous pouvez vous amuser à vous connecter avec Internet Explorer ou d’autres navigateurs afin d’analyser le contenu des en-têtes renvoyés par les différents navigateurs.

listening on [any] 80 ...
DNS fwd/rev mismatch: localhost != xpsp2-efc514119
connect to [127.0.0.1] from localhost [127.0.0.1] 3955
GET / HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive


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 :

Image:Socat_netcat_15.jpg

Outils personnels