Experimentos con netcat y grep
¿qué sentido tiene esto?
Pruebas realizadas con netcat, 3 consolas, grep y tee
PRIMERA PRUEBA:
en la primera consola
nc -lk 7878
en la segunda consola
nc -lk 7879|nc localhost 7878
en una tercera consola
nc localhost 7879
Se manda el texto: "¿hola, que tal?" por la tercera consola.
Se muestra dicho mensaje en la primera consola y no en la segunda-> OK
SEGUNDA PRUEBA:
en la segunda consola
echo -e "hola\n adios" > fich;cat fich|grep hola|nc localhost 7878
Se muestra "hola" en la primera consola, pero no "adios". Luego el grep está filtrando correctamente antes de pasar la llamada al nc vía pipe.
TERCERA PRUEBA:
en la segunda consola
nc -lk 7879|grep hola|nc localhost 7878
en la tercera consola
cat fichi|nc localhost 7879
No aparece nada en la primera ni en la segunda consola al mandar el texto.
CUARTA PRUEBA; trazas con tee
en la segunda consola
nc -lk 7879|tee traza1|grep hola|tee traza2|nc localhost 7878
en la tercera consola
cat fichi|nc localhost 7879
No aparece nada en la primera ni en la segunda consola.
en una cuarta consola
cat traza1
"hola
adios"
cat traza2
no se muestra nadaQUINTA PRUEBA
en la segunda consola
cat fichi|tee traza1|grep hola|tee traza2|nc localhost 7878en la primera consola aparece "hola"
con cat traza1 aparece "hola adios"
con cat traza2 aparece "hola"¿Por qué no funciona el caso 3 al introducir el grep si los demás casos funcionan correctamente? ¿qué estoy pasando por alto?
- Inicie sesión o regístrese para enviar comentarios
- 516 lecturas


Hola jsa_
Según lo tienes puesto no funciona porque creas el fichero como "fich" y luego intentas acceder a el como "fichi", aunque supongo que no será ese el problema xD
Debería funcionar, te pongo un ejemplo:
Consola 1:
nc -l -p 7878Consola 2:
nc -l -p 7879 | grep hola | nc -vv 127.0.0.1 7878Consola 3:
echo -e "hola\n adios" > fich ; cat fich | nc -vv 127.0.0.1 7879Ejecuta los comandos en orden y luego detenlos (control+C) en orden inverso, es decir, de la consola 3 a la 1, Verás que en la primera consola se muestra hola.
Espero haberte ayudado
Saludos
Sí, me ha ayudado lo que me has comentado del CTRL C. Lo del fichero es una errata.
De todas formas no termino de entender porque cuando se mete un grep por medio hay que hacer CTRL C para que se visualicen los cambios en la consola 1 y sin el grep esto no es necesario. De hecho, no es necesario cuando hay un grep y sólo dos consolas.
Gracias por tu comentario
Hola de nuevo jsa_
A ver, si te fijas en la consola 1 lo que hacemos es poner el NetCat a la escucha por el puerto 7878 y en la 2 por el 7879, una vez hecho esto por la consola 3 nos conectamos a la 2 mandándole el contenido del archivo de texto.
Para que vale el "|"?? pues lo que hace es que la salida de un comando (en este caso el nc de la consola 2) en vez de ir a para a la consola valla a para a la entrada de otro comando (el grep), como detrás del grep hay otro "|" el nc de detrás de este "|" tendrá como entrada la salida de grep, en vez de mostrarse esta salida en la consola.
Así pues el nc de la consola 2 mandará al de la consola 1 "hola".
Por que hay que pulsar control+c? es decir, por que hay que para el nc? por que grep recibe como entrada la salida del comando, por ello tiene que esperar a que el comando (nc) deje de ejecutarse.
Por ejemplo, ejecuta el comando:
# iwlist wlan0 scanVerás que tarda un poco en escanear todas las redes wifi, ahora prueba con esto:
# iwlist wlan0 scan | grep ESSIDVerás que también tarda un poco, es decir, el "|" espera a que el comando se ejecute totalmente para recoger su salida y redirigirla al grep, si esto no pasase no se mostrarían todas las redes, como puedes ver a continuación:
# "iwlist wlan0 scan &" | grep ESSIDEl "&" obliga a que el terminal no se bloque hasta que se termine de ejecutar el comando, por lo que gre no recibe nada.
Espero que ahora si lo hallas entendido.
Saludos