如何使用 nc、echo、xargs 等工具编写 echo 服务器 bash 脚本,这些工具能够同时处理来自多个客户端的请求,每个客户端都具有持久连接?
到目前为止我想到的最好的是
nc -l -p 2000 -c 'xargs -n1 echo'
但它只允许一个连接。
如果您使用 ncat 而不是 nc 您的命令行可以在多个连接上正常工作,但是(正如您所指出的)没有 -p。
ncat -l 2000 -k -c 'xargs -n1 echo'
ncat 可在http://nmap.org/ncat/获得。
PS 原版 Hobbit 的 netcat (nc) 不支持 -c 标志。
更新:现在需要 -k (--keep-open) 来处理多个连接。
这里有些例子。ncat 简单服务
TCP 回显服务器
ncat -l 2000 --keep-open --exec "/bin/cat"
UDP 回显服务器
ncat -l 2000 --keep-open --udp --exec "/bin/cat"
如果 ncat 不是一个选项,socat 也可以工作:
socat TCP4-LISTEN:2000,fork EXEC:cat
这fork
是必要的,因此可以接受多个连接。添加reuseaddr
到TCP4-LISTEN
可能很方便。
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
然而,远程外壳示例有效:
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
但是,我不知道如何简单地处理并发请求。
关于什么...
#! /bin/sh
while :; do
/bin/nc.traditional -k -l -p 3342 -c 'xargs -n1 echo'
done