I want a UDP echo server to get packets, and reply exactly what it has received. How can I simply do this using
socat? It should stay alive forever and handle packets coming from several hosts.
Another netcat-like tool is the nmap version,
ncat, that has lots of built in goodies to simplify things like this. This would work:
ncat -e /bin/cat -k -u -l 1235
-e means it executes /bin/cat (to echo back what you type)
-k means keep-alive, that it keeps listening after each connection
-u means udp
-l 1235 means that it listens on port 1235
socat -v PIPE udp-recvfrom:5553,fork to run the server and
socat - udp:localhost:5553 for clients.
This was a great help!
You can also use socat (rather than using netcat) as echo server and netcat as client.
Socat echo server (listens on TCP port 1234):
socat -v tcp-l:1234,fork exec:'/bin/cat'
Netcat client (connects to serverip on TCP port 1234):
nc serverip 1234
If you are running on Windows and use a unix like environment like cygwin, netcat migth not provide the -e parameter. This worked just fine for me.
netcat solution pre-installed in Ubunutu
netcat pre-installed in Ubuntu 16.04 comes from
netcat-openbsd, and has no
-c option, but the manual gives a solution:
sudo mknod -m 777 fifo p cat fifo | netcat -l -k localhost 8000 > fifo
Then client example:
echo abc | netcat localhost 8000
TODO: how to modify the input string value? The following does not return any reply:
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
The remote shell example however works:
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
I don't know how to deal with concurrent requests simply however.