2011-06-07 14 views
12

¿Cómo puedo emular netcat -e con una versión de netcat que no tiene la opción -e?Emulación netcat -e

Necesito activar un comando de forma remota. Puedo hacerlo con netcat - sin -e:

#/bin/bash

netcat -l 8080; myCommand.sh

Eso haría el truco, pero me gustaría responder al cliente en función del éxito o el fracaso de la orden (para tener un tipo de descanso - Interfaz similares).

¿Cómo podría hacer eso?

Gracias!

+2

Podría utilizar una tubería con nombre para esto? – Lynch

Respuesta

4

La mejor manera es cambiar a la versión de netcat que sí lo admite. En Debian/Ubuntu IIRC correctamente se debe utilizar netcat tradicional, no NETCAT OpenBSD:

sudo apt-get install netcat-traditional # netcat-openbsd 

Usted tendrá la opción de especificar explícitamente la versión que necesita:

nc.traditional server 6767 -e myscript.sh 

nc.openbsd -l 6767 

(nota las sutiles diferencias en el uso de opciones). Como puede ver (a continuación) nc.traditional se puede ejecutar como un binario independiente, dependiendo de solo libc y linux, por lo que si no tiene permisos de instalación, debería poder simplemente colocar el binario independiente en algún lugar (un sistema de archivos con exec permiso, por supuesto) y ejecutarlo como

/home/user/bin/mynetcat server 6767 -e myscript.sh 

HTH


$ ldd `which nc.{traditional,openbsd}` 

/bin/nc.traditional: 
    linux-gate.so.1 => (0xb7888000) 
    libc.so.6 => /lib/libc.so.6 (0xb7709000) 
    /lib/ld-linux.so.2 (0xb7889000) 
/bin/nc.openbsd: 
    linux-gate.so.1 => (0xb77d0000) 
    libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0xb76df000) 
    libc.so.6 => /lib/libc.so.6 (0xb7582000) 
    libpcre.so.3 => /lib/libpcre.so.3 (0xb754c000) 
    /lib/ld-linux.so.2 (0xb77d1000) 
+0

para el registro, eso no es lo que significa 'vinculado estáticamente'. – Random832

+0

Sí, lo sé, por lo que deletreé las dependencias :) ¿Cómo llamarías esto? 'Parcialmente vinculado estáticamente', 'Mayormente estáticamente vinculado', 'Binario independiente'? Hmm ..., ¡quizás este último no sería tan malo! ** Editado **, thx – sehe

+0

Gracias, pero no me gusta la idea de distribuir mi pequeño script con un 'binario aleatorio'. Además, debo probarlo en una máquina de desarrollo (32 bits) y desplegarlo en un servidor de almacenamiento intermedio (64 bits). – user787935

12
mkfifo foo 
nc -lk 2600 0<foo | /bin/bash 1>foo 

a continuación, sólo se nc rvername 2600 y ./script.sh

matan al cliente con Ctrl + C

Cuestiones relacionadas