我如何将命令通过管道传输到能够保持活动的 netcat?

我如何将命令通过管道传输到能够保持活动的 netcat?
echo command | netcat host port

这会导致命令被发送到远程主机并读回一些数据。但几秒钟后,连接关闭。-w 参数没有改变任何东西。我在 SuSE 10.1 上使用 netcat v1.10。

答案1

这适用于ncOS X 上的命令(假设您要发送的命令在文件中):

cat file - | nc host port

(本质上,cat将文件内容转储到标准输出,然后在标准输入上等待您)。

扩展一下,如果您想从 shell 本身发送命令,您可以这样做:

cat <(echo command) - | nc host port

答案2

ncUbuntu 上:

nc -q -1 host port

来自Ubuntunc手册页

 -q seconds
         after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.

请注意,不同发行版之间的可用nc选项差别很大,因此这可能不适用于您的发行版(OpenSUSE)。

答案3

我找到了:

echo command | netcat host port -

我的同事知道这一点。但我在文档中根本没看到这一点。

答案4

我认为您无法使用 netcat 或 socat 来解决这个问题。我刚刚对两者都进行了广泛的修改,socat 看起来最有希望。

我设法设置 socat 来连接到远程 TCP 端口并在本地 unix 域套接字上监听(理论上这样链接可以一直保持),但是一旦本地进程与 unix 套接字分离(另一个 socat 将 unix 套接字链接到 stdin/out),它就会关闭 TCP socat 会话。

这里的问题是,通过 netcat / socat 的每个连接都会与服务器建立新的 TCP 流连接,并且当本地端断开连接时,它会关闭该 TCP 流会话。

我认为您可能必须为此编写一些自定义代理软件,打开与远程端的 TCP 连接,然后在套接字/管道/ fifo 或其他任何东西上进行本地监听,然后将数据发送到现有的 TCP 管道并返回结果。

相关内容