如何使用nc,echo,xargs等工具编写echo服务器bash脚本,这些工具能够同时处理来自多个客户端的请求,每个客户端都有持久的连接?
我到目前为止最好的是
nc -l -p 2000 -c 'xargs -n1 echo'
但它只允许一个连接。
答案 0 :(得分:38)
如果您使用ncat而不是nc,您的命令行可以正常使用多个连接,但(正如您所指出的那样)没有-p。
ncat -l 2000 -k -c 'xargs -n1 echo'
ncat可在http://nmap.org/ncat/处获得。
P.S。原版Hobbit的netcat(nc)不支持-c标志。
更新:现在需要-k( - keep-open)来处理多个连接。
答案 1 :(得分:20)
以下是一些例子。 ncat simple services
TCP回送服务器
ncat -l 2000 --keep-open --exec "/bin/cat"
UDP echo服务器
ncat -l 2000 --keep-open --udp --exec "/bin/cat"
答案 2 :(得分:7)
如果ncat不是一个选项,socat也会工作:
socat TCP4-LISTEN:2000,fork EXEC:cat
fork
是必需的,因此可以接受多个连接。将reuseaddr
添加到TCP4-LISTEN
可能很方便。
答案 3 :(得分:1)
netcat
预先安装在Ubunutu中的解决方案
Ubuntu 16.04中预先安装的netcat
来自netcat-openbsd
,没有-c
选项,但手册提供了解决方案:
sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo
然后客户端示例:
echo abc | netcat localhost 8000
TODO:如何修改输入字符串值?以下内容未回复任何回复:
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
但我不知道如何处理并发请求。
答案 4 :(得分:0)
关于...
#! /bin/sh
while :; do
/bin/nc.traditional -k -l -p 3342 -c 'xargs -n1 echo'
done