无法通过管道连接到 netcat

无法通过管道连接到 netcat

我有一个在 docker 容器中运行的鱿鱼代理,像这样开始:

docker run --privileged -d --publish=3128:3128 --name foo squid

我想从另一个名为 的容器中获取一些信息bar

docker run --rm -it --name bar ubuntu:trusty bash

如果我在bar容器中运行它:

nc 172.17.0.1 3128
HEAD /

然后我从服务器获得一些输出。但如果我运行这个:

echo 'HEAD /' | nc 172.17.0.1 3128

我什么也没得到。为什么不?

答案1

可能是因为 netcat 在其标准输入上收到文件结尾后不久就退出了。尝试

(echo 'HEAD /'; sleep 5) | nc 172.17.0.1 3128

保持 netcat 的本地输入打开足够长的时间,以便它读取网络数据并将其写入标准输出。这5是延迟的秒数。

Netcat 有一个选项可以解决这个问题。如果指定负退出超时,它将等待网络连接关闭,而不是在 stdin 上的 EOF 后退出:

echo 'HEAD /' | nc -q -1 172.17.0.1 3128

相关内容