如何使用Bash制作Echo服务器?

时间:2011-12-04 14:09:59

标签: bash tcp netcat

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

我到目前为止最好的是

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

但它只允许一个连接。

5 个答案:

答案 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