Estoy tratando de enviar comandos a un puerto tcp usando una netcatrespuesta de tubería
cuando ejecuto netcaty escribo mi comando, imprime la respuesta correctamente, pero cuando paso el comando desde una tubería, envía el comando correctamente pero no imprime la respuesta
Entonces, esto funciona correctamente:
netcat localhost 9009
mientras que esto solo envía un comando pero no imprime la respuesta:
echo 'my_command' | netcat localhost 9009
¿por qué?
¿Cómo puedo hacer netcatpara imprimir el texto de respuesta?

OpenBSD netcat (Debian patchlevel 1.105-7ubuntu1)versión; y en el extremo remoto estátelegram-clien la misma máquina.netcatrecibe el EOF en STDIN, que inmediatamente apaga ambos lados del zócalo en lugar de cerrar a medias y esperar a que el lado remoto cierre su extremo. Sisocates una opción, lo recomendaría en su lugar. Solo hay unosocat, por lo que no tiene los problemas de portabilidad, ya que hay una docena de sabores diferentes, se comporta de manera mucho más sensata y es altamente configurable.Respuestas:
Como dijo @Patrick, este problema generalmente se debe a
netcatsalir antes de que se haya dado la respuesta. Puede remediar eso agregando-q 2a la línea de comando, es decir, decirnetcatque espere 2 segundos después de detectar EOF en la entrada estándar. Obviamente, también puede hacer que espere otros segundos.fuente
-q 2funcionó pero ¿es confiable? está haciendo una solicitud web ¡No puedo estar seguro de que 2s sea siempre suficiente! puedo ?-wopción de jugar. Todo esto está en laman ncpágina, por supuesto.invalid option -- 'q'ncsalir inmediatamente en lugar de esperar una respuesta? Si la conexión sigue abierta, no debe haber una opción para hacerncesperar a que se cierre, no sólo para la entrada estándar a extremoUtilizar este:
El problema es que
nccerrará la conexión inmediatamente después de cerrar stdin, lo cual es muy rápido para unamy_commandcadena simple y, por lo tanto, nunca tiene la oportunidad de recibir una respuesta. (Si canaliza un archivo muy grande, verá que podría obtener una respuesta antes de que termine de enviar el archivo).Ingrese
catcon-como segundo argumento: hace quecatescuchar en stdin para obtener más contenido a través del cual se ha enviado el contenido del primer argumento. El primer argumento es solo obtener elechocomandocat, también podría ser un archivo con sus comandos a lacat < file - | ....Alternativamente, haga esto:
Esto envía
#caracteres ilimitados en la segunda línea de la entrada. Usar#trabajos para un bash como control remoto que ignoraría esto como un comentario. Elegí un pequeño tiempo de espera de 10 milisegundos aquí, por lo que reacciona más rápido al final de la conexión. YMMV.La desventaja de eso puede ser eso
cato elwhilebucle yncseguir corriendo hasta que golpees^Co^Dsobre el shell. Realmente depende del extremo remoto.Agregar un tiempo de espera usando
-w 1(OSX netcat) o-i 1(nmap's ncat) hace que cierre la conexión yncdespués de 1 segundo, perocatseguirá funcionando hasta que ingrese algún carácter y la tubería se rompa (creo).Sin embargo, funciona si el lado remoto cerrará automáticamente la conexión después de recibir y manejar el comando; esto también terminará con el
nccliente y el proceso.Esta respuesta se basa en esta respuesta a una pregunta de superusuario idéntica .
fuente
{ echo my_command; cat;}haría lo mismo y podría considerarse más fácil de entender.Diferentes versiones de OpenBSD-netcat son raras, que necesitan diferentes combinaciones de
-w <seconds>,-q <seconds>,-Ny diferentes argumentos, incluso necesitar dependiendo de lo que se está ejecutando en el otro extremo de la conexión. El uso de opciones de tiempo de espera con ciertas versiones o servidores causa retrasos, y no usarlos puede resultar en un retraso extremadamente largo (¿infinito?). Y esperaría diferentes peculiaridades con gnu netcat, pero no sé si son diferentes entre las versiones de la misma.Por ejemplo, la versión 1.130_3 de archlinux tarda mucho (¿para siempre?) Cuando hago esto:
Pero funciona con -N agregado al servidor o al cliente.
fuente
Sé que esto es un poco viejo, pero ninguna otra respuesta funcionó para mí y esto lo hizo:
Observe el
-N:Me funcionó tanto en Windows como en Linux.
Nota: Esta es una copia y pega de la respuesta que publiqué para una pregunta duplicada .
Estoy pensando que esto podría ser útil. Los mods se sienten libres de editar / eliminar si esto va en contra de la política o algo así.
fuente