serveur d'écho avec netcat ou socat

18

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 netcatou socat? Il devrait rester en vie pour toujours et gérer les paquets provenant de plusieurs hôtes.

Mohammad Hedayati
la source
7
Veuillez ne pas rendre cette chose accessible sur Internet. Comme il est basé sur UDP, il peut être utilisé pour envoyer un flux de paquets vers des destinations arbitraires à l'aide de paquets falsifiés.
Evan Anderson

Réponses:

17

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

Mattias Ahnberg
la source
11

J'ai utilisé socat -v PIPE udp-recvfrom:5553,forkpour exécuter le serveur et socat - udp:localhost:5553pour les clients. Ce fut une grande aide!

Mohammad Hedayati
la source
1
Une alternative, venant de stackoverflow.com/a/35857095/222529 estsocat TCP4-LISTEN:2000,fork EXEC:cat
Jir
6

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 le port TCP 1234):

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

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

nc serverip 1234
Andre Miras
la source
2

Vous pouvez écrire un programme C qui bifurque nc -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.

adamo
la source
Je peux utiliser socat -v PIPE UDP-LISTEN:5555,fork, mais la deuxième connexion est refusée. Soit dit en passant, cela fonctionne bien avec TCP-LISTEN. J'évite de coder, sinon je pourrais tout écrire en C.
Mohammad Hedayati
Vous devez envelopper le tout dans une boucle sans fin: tout en étant vrai; faire des trucs socat; fait
adamo
Vous pouvez également vous inspirer en utilisant ce tutoriel
adamo
0

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/

Chris
la source
0

netcat solution préinstallée dans Ubunutu

Le netcatpré-installé dans Ubuntu 16.04 vient de netcat-openbsd, et n'a pas d' -coption, 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.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source