netcat 不打印响应

Ari*_*yan 13 pipe netcat

我正在尝试使用netcat管道响应将命令发送到 tcp 端口,
当我运行netcat并键入我的命令时,它会正确打印响应,但是当我从管道传递命令时,它会正确发送命令但不打印响应

所以,这可以正常工作:

netcat  localhost 9009
Run Code Online (Sandbox Code Playgroud)

虽然这只是发送命令但不打印响应:

echo 'my_command' | netcat  localhost 9009
Run Code Online (Sandbox Code Playgroud)

为什么?
如何netcat打印响应文本?

小智 9

正如@Patrick 所说,这个问题通常是由于netcat在给出响应之前退出。您可以通过添加-q 2到命令行来解决这个问题,即netcat在标准输入上检测到 EOF 后告诉挂起大约 2 秒。显然,您也可以让它等待其他几秒钟。

  • 它说`无效选项——'q'` (6认同)

Ale*_*hek 8

用这个:

cat <(echo command) - | nc host port
Run Code Online (Sandbox Code Playgroud)

问题是它nc会在 stdin 关闭后立即关闭连接,这对于一个简单的my_command字符串来说非常快,因此永远没有机会收到响应。(如果您通过管道传输一个非常大的文件,您会看到它可能会在发送完文件之前得到响应)。

输入cat-作为第二个参数:它使cat监听标准输入,通过它发送的第一个参数的内容后,更多的内容来管。第一个参数只是让echo命令通过cat——它也可以是一个包含你的命令的文件 la cat < file - | ...

或者这样做:

(echo command; while true; do sleep 0.01; echo -n "#"; done) | nc host port
Run Code Online (Sandbox Code Playgroud)

这会#在输入的第二行发送无限个字符。#对像 remote 这样的 bash使用作品会忽略它作为注释。我在这里选择了 10 毫秒的小等待时间,因此它在连接端反应更快。天啊。

那缺点可以是catwhile循环并nc继续运行,直到你打^C^D在外壳上。这真的取决于远程端。

使用-w 1(OSX netcat) 或-i 1(nmap's ncat)添加超时使其关闭连接并nc在 1 秒后关闭,但cat会继续运行,直到您输入某个字符并且管道中断(我认为)。

但是,如果远程端在接收和处理命令后自动关闭连接,它就会起作用——这也将结束nc客户端和进程管道进入它。

此答案基于对相同超级用户问题的此答案