Réaliser un proxy TCP est assez simple dans la plupart des languages compilés C ou interprétés.

En shell, c'est moins simple... Encore que, nc (netcat) est très puissant et permet de faire des trucs de "barbus" ;) :

mknod pipe p && nc -l localhost 25 <pipe | nc localhost 10025 >pipe && rm -f pipe

Dans cet exemple, le proxy TCP écoute sur le port 25 (SMTP) et renvoie le flux sur le port 10025 de la même machine. Explication :

  1. on crée un fichier pipe (voir plus bas)
  2. nc -l crée un server TCP qui écoute sur le port 25. Il envoie sur sa sortie standard (dans le |) les données qu'il reçoit.
  3. le nc suivant est un client TCP qui envoie sur le serveur et le port précisé les données qu'il reçoit sur son entrée standard (c'est à dire envoyée par le serveur nc précédent au travers du |. Il renvoie sur ca sortie standard les réponse du serveur. Pour boucler la boucle, il faut renvoyer les réponses du serveur final au client initial et c'est là qu'intervient le fichier pipe.
  4. le client TCP nc redirige sa sortie standard (données reçues du serveur final) dans le fichier pipe qui lui alimente l'entrée standard du serveur (afin de retourner au client initial les flux retournés par le serveur final).

Il est possible d'intercaler entre les deux commandes nc un traitement du contenu par exemple avec sed ou perl qui ne doit pas bufferiser ses sorties.