如何让ncat echo server将接收到的消息打印到终端后再回传?
原命令失效原因
- ncat 的
-e参数执行的命令,标准输入、标准输出会直接绑定到TCP连接流,和你启动ncat的本地终端无关联,所以tee的输出全部走了网络链路,不会打印到本地 - 你使用的进程替换语法
> (/bin/cat)是shell专属特性,-e后的参数是直接调用exec执行的,不会经过shell预处理,因此语法不生效
可直接使用的实现方法
方法1:使用-c参数调用shell执行(最简方案)
ncat的-c参数会自动启动shell解析后续命令,我们只需要让tee将收到的内容复制一份输出到ncat的标准错误流(默认绑定到启动命令的本地终端)即可:
ncat -l -p 2048 -c 'tee /dev/stderr'
运行逻辑:
- 对端发送的内容会作为
tee的标准输入 tee将输入输出到标准输出,直接回传给对端- 同时
tee将内容复制一份写入/dev/stderr,打印到本地启动终端
方法2:用命名管道实现(无-c/-e权限时可用)
如果你的ncat版本禁用了执行类参数,可以用命名管道搭建流回路实现:
# 第一步:创建命名管道 mkfifo echo_pipe # 第二步:启动echo服务 cat echo_pipe | ncat -l -p 2048 | tee /dev/tty > echo_pipe # 使用结束后删除管道即可 rm echo_pipe
测试方式
另开一个终端执行ncat 127.0.0.1 2048,输入任意内容发送,即可在发送端收到回显,同时服务端终端会打印收到的内容。
内容的提问来源于stack exchange,提问作者Bob R
相关产品推荐
相关产品推荐

