我不确定是否解释/dev/tcp/localhost/9999
为整数(文件描述符)或文件名。
因此,我不确定“重定向标准输出和标准错误” (1) 或 “复制文件描述符Bash 手册的 (2) 部分适用于上述重定向。
无论是否指定,重定向都有效n
,但是 (1) 不带参数n
,这意味着不使用 (1) 吗?
此外,如果/dev/tcp/localhost/9999
被认为是文件名(不是整数),为什么<&1
下面的命令有效?:
/bin/bash >&/dev/tcp/localhost/9999 <&1
在这种情况下,1
(stdout) 不是一个打开用于输入的文件描述符,导致 (2) 失败?
答案1
/dev/tcp/host/port
<
无论您是否使用, >
or <>
(和>&
or &>
in bash
),都将始终以读写方式打开。
>& /dev/tcp/host/port
将连接到host:port
标准输出和标准错误并将其重定向到它。
黑客在幕后/dev/tcp
使用socket(2)
和connect(2)
,并且没有明显且一致的方法来使用 tcp 套接字,就好像它是仅打开用于读取或写入的文件描述符一样。
文件描述符只是数字 1 并称自己为 stdout 并不意味着它不开放输入:cat <&1
也可以在终端中使用。
无论是否指定 n,重定向都有效,但 (1) 不采用 n 参数,这意味着不使用 (1)?
不在这里。
true 3>&/dev/tcp/127.0.0.1/9999
bash: /dev/tcp/127.0.0.1/9999: ambiguous redirect