是否可以创建 ncat 循环?

是否可以创建 ncat 循环?

如果您有两台计算机,想要仅使用 ncat 控制另一台计算机,而不使用 telnet、ssh 或其他网络工具,并且只有两个 shell,我该怎么做呢?

我已经用三个 shell 成功地做到了这一点:

  1. cat | ncat 192.168.0.11
  2. ncat -l | bash | ncat 192.168.0.16
  3. ncat -l

是否可以有一个 shell,其中一个 ncat 的输入将显示在屏幕上,而 shell 中的输入将通过管道传输到另一个 ncat 中?

到目前为止我遇到了以下问题:

  1. 在 ncat 开始发送数据之前,另一个 ncat 必须侦听它,因此我需要一种方法来强制 ncat 发送数据。
  2. 如果我做了类似的事情ncat -l | cat | ncat 192.168.0.11,数据就会直接循环回到发送ncat(我不想要的),并且不会显示在屏幕上(我想要的),并且来自键盘的输入只会得到被忽略(我也不想要)。也许前两个问题可以通过某种方式将接收到的数据重定向到 stderr 来解决,但是我如何捕获 KB 输入呢?

在哪个 shell 中可以进行这样的操作并不重要,只要它有效即可(fish、bash、zsh,任何都可以)。

这不是一个严重的情况,我只是好奇。

答案1

需要明确的是:在此答案中,“本地”表示您运行的计算机 (1),“远程”表示您运行的计算机 (2)。

在远程计算机上,不要运行 (2)ncat -e /bin/bash或者ncat -c 'exec /bin/bash -i 2>&1';那么你本地就不需要(3)了。这些选项专门设计用于运行某些内容并将其标准输入和标准输出连接到网络连接。

我认为无论如何你都不需要cat(1)。在本地机器上鞋底ncat 192.168.0.11应该可以工作。

请注意,该解决方案不会在远程端分配 tty。通过在本地键入,您可以使远程 shell 运行尝试与终端交互的命令。这样的命令不会失败,它会找到一个终端,但它将是ncat(2)中调用的终端。另一方面,期望其标准输出或标准输入是终端的命令可能会拒绝工作。

也不要指望 local Ctrl+c到达远程端并在那里引发 SIGINT。

为了比较:(ssh或者更确切地说sshd在远程端)可以分配一个 tty。如果您不指定远程命令,它默认会执行此操作(以及更多操作)。这样做是为了让您可以在远程 shell 中交互工作,就像在本地一样。我们的装置没有做任何类似的事情。

相关内容