¿Puedo canalizar / redirigir una aplicación de consola a través de netcat para que pueda usarse de forma remota?

10

¿Es posible 'tubería' una instancia de una aplicación de consola a través de netcat, por lo que está a la escucha netcat para una nueva conexión y redirige el stdiny stdoutsobre la conexión de red.

jammmie999
fuente
Sí, pero podría ser un revestimiento, lo cual está bien, las tuberías lo son. No sé si puede decirle a nc y pipe a una instancia que ya se está ejecutando pid. puede conectar a una ip y canalizarlo a una nc que está escuchando y canalizar eso a una nc que está escuchando, etc. y canalizar eso a nc a una ip.
barlop
Cambié el título porque lo que mencionas suena más como una redirección de E / S en lugar del uso de una tubería (que solo trata de mover la salida de un proceso a la entrada de otro).
Avance el
@Breakthrough ¿en qué se diferencia eso de las tuberías? como él está hablando de la redirección de E / S y no está hablando de archivos, entonces, ¿en qué se diferencia de las tuberías?
barlop
La redirección de E / S de @barlop ( <o >) es significativamente diferente de la tubería ( |), aunque a veces puede lograr una operación equivalente con una combinación de ambos. Sin embargo, de nuevo, con la redirección de E / S, puede cambiar la ubicación de ambas transmisiones; La tubería simplemente redirige la salida estándar de un proceso a la entrada estándar de otro.
Avance el
@Breakthrough, mira lo que te pregunté. > y <es, por supuesto, diferente de las tuberías porque <y> usan archivos. Pero no está hablando de archivos. Le pregunté que "¿cómo que [redirección de IO] difieren de las tuberías mientras que está hablando redirección de IO y no estamos hablando de archivos, a continuación, en qué se diferencia de la tubería??"
barlop

Respuestas:

16

Bueno, como se documenta en Wikipedia y en la netcatdocumentación, existe una -eopción que hace que genere ( e xecute) un programa al recibir una conexión, conectando el socket a stdin, stdout y stderr del proceso. Ejemplo de uso:

nc -l -pnúmero_puerto -enombre_programa

Los ejemplos comúnmente se muestran /bin/sho bashse usan como nombre_programa . Se desaconseja el uso de esta opción porque básicamente abre un portal de acceso anónimo y sin contraseña en su máquina. Por supuesto, esto se mitiga mediante el uso de un programa con menos poder que el shell (uno que no tiene la capacidad de escapar a un shell), minimizando su uso y manteniéndolo en secreto. Sin embargo, los desarrolladores originales netcatsintieron con la suficiente firmeza que esta opción era una mala idea de que la deshabilitaron por defecto y la condicionaron bajo la opción de compilación "GAPING_SECURITY_HOLE". Esto se menciona brevemente en este Tutorial de NetCat y otra netcatdocumentación.

Una búsqueda en Google me llevó a debatir este problema en otros sitios de Stack Exchange: desbordamiento de pila y falla del servidor . Múltiples contribuyentes ofrecieron la siguiente técnica para hacer lo mismo sin usar la -eopción (es decir, en una versión netcatque tiene la -eopción deshabilitada):

En el servidor:
mkfifopipe_name
nc -l -pnúmero_puerto <pipe_name   | nombre_programa >pipe_name

En el cliente:
nc server_machine_name  número_puerto

Un par de notas:

  • En algunas versiones de netcat, -limplica -p, por lo que debe decir justo -ly luego el número de puerto.
  • Es posible que desee envolver su solución en un while truebucle.
Scott
fuente