web-dev-qa-db-fra.com

serveur d'écho avec netcat ou socat

Je veux qu'un serveur d'écho UDP reçoive des paquets et réponde exactement à ce qu'il a reçu. Comment puis-je simplement faire cela en utilisant netcat ou socat? Il doit rester en vie pour toujours et gérer les paquets provenant de plusieurs hôtes.

21
Mohammad Hedayati

Un autre outil de type netcat est la version nmap, ncat, qui a beaucoup de goodies intégrés pour simplifier des choses comme ça. Cela fonctionnerait:

ncat -e /bin/cat -k -u -l 1235

-e signifie qu'il exécute/bin/cat (pour répéter ce que vous tapez)
- k signifie garder en vie, qu'il continue d'écouter après chaque connexion
- u signifie udp
- l 1235 signifie qu'il écoute sur le port 1235

18
Mattias Ahnberg

J'ai utilisé socat -v PIPE udp-recvfrom:5553,fork pour exécuter le serveur et socat - udp:localhost:5553 pour les clients. This a été d'une grande aide!

12
Mohammad Hedayati

Vous pouvez également utiliser socat (plutôt que d'utiliser netcat) comme serveur d'écho et netcat comme client.

Serveur d'écho Socat (écoute sur TCP port 1234):

socat -v tcp-l:1234,fork exec:'/bin/cat'

Client Netcat (se connecte à serverip sur TCP port 1234):

nc serverip 1234
6
Andre Miras

Vous pouvez écrire un programme C qui fourchesnc -u -l -p 4321 puis utilise dup (2) pour se connecter:

  • nc stdin avec la sortie standard du parent
  • nc stdout avec stdin du parent

Ensuite, dans une boucle sans fin, le parent lit à partir de stdin et écrit dans stdout tout ce que le parent lit.

2
adamo

netcat solution pré-installée dans Ubunut

netcat pré-installé dans Ubuntu 16.04 provient de netcat-openbsd, et n'a pas de -c option, mais le manuel donne une solution:

Sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo

Ensuite, exemple client:

echo abc | netcat localhost 8000

TODO: comment modifier la valeur de la chaîne d'entrée? Ce qui suit ne renvoie aucune réponse:

cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo

L'exemple de shell distant fonctionne cependant:

cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo

Cependant, je ne sais pas comment traiter les demandes simultanées.

Si vous utilisez Windows et utilisez un environnement de type Unix comme cygwin, netcat migth ne fournit pas le paramètre -e. Cela a très bien fonctionné pour moi.

http://bansky.net/echotool/

0
Chris