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