2011-06-27 16 views
5

Tengo el puerto netcat escuchando en el puerto 1501 y quiero canalizar la entrada recibida en ese puerto a una nueva ventana de terminal. Sé que esta es una mala idea porque, básicamente, cualquier persona en ese puerto puede controlar la máquina, pero quiero averiguar si es posible hacerlo. Alguien sabe como. Lo he intentado hasta ahora.Bash Terminal Redirigir a otra terminal

nc -l 1500 | xterm o nc -l 1500 | xterm -e "NAMEOFWINDOW"

también intenté redirigir a gnome-terminal de forma simplificada. Puedo hacer

nc -l 1500 | grep "SOMEKEYWORD" con éxito.

¿Alguna idea? -TJ

Respuesta

1

esto no es posible de esta manera, como xterm no acepta la entrada de la entrada estándar , atrapa la entrada de teclado directamente.

hay dos alternativas:

  • bash uso en lugar de la ventana: nc -l 1500 | bash en una xterm
  • uso xterm s opción -S, pero hay que unir el netcat a una pseudo tty antes, a continuación, una conecte el xterm al pseudo terminal
2

Tiene dos problemas. La primera es que xterm y gnome-terminal no son el programa que proporciona los comandos de solicitud y aceptación; son solo una forma de conectar su teclado y pantalla a ese programa, que es su caparazón (normalmente /bin/bash). Entonces, en realidad es bash que desea conectar a netcat.

En segundo lugar, necesita algo más que un tubo unidireccional, que es lo que obtiene con |. Si usar:

nc -l -p 1500 | /bin/bash 

, después, sólo tendrá un tubo de al usuario a bash - van a ser capaces de dar su opinión, pero no verán ninguna salida. Alternativamente, si lo hace:

/bin/bash | nc -l -p 1500 

continuación, se aplicará lo contrario - que sólo tendrá un tubo a el usuario debash. El usuario verá la salida desde bash, pero no podrá dar ninguna entrada.

Por suerte, netcat soporta una opción para crear un tubo bidireccional (en realidad, dos tubos) a otro comando:

nc -l -p 1500 -e /bin/bash 

Esto va a hacer lo que quiere - pero tenga en cuenta que bash no mostrará un aviso, ya se ejecutará en el modo "no interactivo".

Ah, y una cosa más - sí, esto es realmente mala idea.

+0

Lol Sé que es una idea estúpida más por el interés de se puede hacer. Gracias gran respuesta por cierto. Detalles impresionantes de explicación en general :) buen trabajo. –

+0

En realidad intenté esto ahora. -e no es un interruptor reconocido Estoy usando ubuntu si es mi versión de netcat o me falta algo? –

+0

@TJ Pavlu: Ah, sí, por defecto Ubuntu instala un netcat con gimp, necesitas el paquete 'netcat-traditional', que suministra' nc.traditional'. – caf

0

Puede usar tee para redirigir la salida al archivo temporal y luego tail --follow=name --retry en otro terminal.

nc -l 1500 | tee /tmp/file.txt 

y por supuesto:

tail --follow=name --retry /tmp/file.txt 

De esta manera se puede hacer a través de rm -f /tmp/file.txt trabajo cron sin el comando tail ser interrumpido.

+0

Creo que ha malentendido la pregunta. –