53

如何使用 nc、echo、xargs 等工具编写 echo 服务器 bash 脚本,这些工具能够同时处理来自多个客户端的请求,每个客户端都具有持久连接?

到目前为止我想到的最好的是

nc -l -p 2000 -c 'xargs -n1 echo'

但它只允许一个连接。

4

5 回答 5

52

如果您使用 ncat 而不是 nc 您的命令行可以在多个连接上正常工作,但是(正如您所指出的)没有 -p。

ncat -l 2000 -k -c 'xargs -n1 echo'

ncat 可在http://nmap.org/ncat/获得。

PS 原版 Hobbit 的 netcat (nc) 不支持 -c 标志。

更新:现在需要 -k (--keep-open) 来处理多个连接。

于 2011-12-04T20:42:04.110 回答
33

这里有些例子。ncat 简单服务

TCP 回显服务器

ncat -l 2000 --keep-open --exec "/bin/cat"

UDP 回显服务器

ncat -l 2000 --keep-open --udp --exec "/bin/cat"
于 2012-11-10T01:53:02.627 回答
18

如果 ncat 不是一个选项,socat 也可以工作:

socat TCP4-LISTEN:2000,fork EXEC:cat

fork是必要的,因此可以接受多个连接。添加reuseaddrTCP4-LISTEN可能很方便。

于 2016-03-08T01:02:45.360 回答
2

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

但是,我不知道如何简单地处理并发请求。

于 2017-05-29T15:55:36.767 回答
0

关于什么...

#! /bin/sh

while :; do
/bin/nc.traditional -k -l -p 3342 -c 'xargs -n1 echo'
done
于 2019-03-15T18:41:13.030 回答