我想要一个UDP回应服务器来获取数据包,并确切地回复它收到的。 我怎样才能简单地使用netcat或socat做到这一点? 它应该永远活着,处理来自多个主机的数据包。
另一种类似netcat的工具是nmap版本, ncat ,它有很多内置的东西来简化这样的事情。 这将工作:
ncat -e /bin/cat -k -u -l 1235
-e表示它执行/ bin / cat(回显你input的内容)
-k表示保持活动状态,每次连接后都会继续收听
-u表示udp
-1235表示它监听端口1235
我使用socat -v PIPE udp-recvfrom:5553,fork为客户端运行服务器和socat - udp:localhost:5553 。 这是一个很大的帮助!
你也可以使用socat(而不是netcat)作为echo服务器和netcat作为客户端。
Socat回声服务器(侦听TCP端口1234):
socat -v tcp-l:1234,fork exec:'/bin/cat'
Netcat客户端(连接到TCP端口1234上的serverip):
nc serverip 1234
您可以编写一个C程序, 分叉 nc -u -l -p 4321 ,然后使用dup(2)连接:
然后在一个无限循环中,父进程从stdin中读取,并在stdout中写入父进程读的任何内容。
如果您正在Windows上运行,并使用类似cygwin的unix环境,则netcat migth不会提供-e参数。 这对我来说工作得很好。
在Ubunutu预装netcat解决scheme
预装在Ubuntu 16.04中的netcat-openbsd来自netcat-openbsd ,没有-c选项,但是手册给出了一个解决scheme:
sudo mknod -m 777 fifo p cat fifo | netcat -l -k localhost 8000 > fifo
然后客户端示例:
echo abc | netcat localhost 8000
TODO:如何修改input的string值? 以下不返回任何答复:
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
远程shell例子工作:
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
但是我不知道如何处理并发请求。