在终端上打印 netcat 输入

在终端上打印 netcat 输入

我正在尝试编写一个脚本,在其中捕获文件的内容并将其通过管道传输到nc

$cat somefile.txt | nc server port

文件内容按预期发送到服务器,但在终端上我只能看到服务器的响应。

我需要做什么才能看到我发送的内容。

我从 somefile.txt 中得到的每一行都有不同的响应,我希望将所有内容放在一起。

答案1

您可以使用tee并利用流程替换:

$ cat somefile.txt | tee >(nc server port)

tee只需复制其输入二者皆是stdout 一份文件。

使用<()bash进程替换),您告诉bash写入命令的输入而不是文件。

答案2

您可以使用tee并避免进程替换:

$ ( cat somefile.txt | tee /dev/fd/3 | nc host port ) 3>&1

这样做的好处是nc可以同步运行。以下是异步进程替换行为的示例:

user@hostname $ cat somefile.txt
GET / HTTP/1.0
Host: StackOverflow.com

user@hostname $ cat somefile.txt | tee >(nc stackoverflow.com 80); echo "DONE"
GET / HTTP/1.0
Host: StackOverflow.com

DONE
user@hostname $ HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https://stackoverflow.com/
[...]

请注意,它显示“DONE”并在输出中间绘制一个提示。如果nc同步运行,这不是问题:

user@hostname $ ( cat somefile.txt | tee /dev/fd/3 | nc stackoverflow.com 80 ) 3>&1; echo "DONE"
GET / HTTP/1.0
Host: StackOverflow.com

HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https://stackoverflow.com/
[...]
DONE

相关内容