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.
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
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!
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
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.