¿Cómo cerrar automáticamente la conexión netcat después de enviar los datos?

22

Estoy ejecutando el siguiente comando desde un script:

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001

Sin embargo, el cliente netcat permanece abierto indefinidamente. ¿Cómo puedo cerrar la conexión una vez que se han enviado estos datos?

Justin Meltzer
fuente

Respuestas:

17

Las otras respuestas -cy las -qdadas son correctas en el contexto correcto, pero puede ser útil resumir por qué hay múltiples respuestas y dar una solución más general.

Estas diferentes opciones hacen lo mismo pero son diferentes implementaciones de netcat:

  • -c Implementación GNU de netcat
  • -q Implementación de OpenBSD de netcat.
  • -w (¿otro?) Implementación OpenBSD de netcat.

Algunas versiones requieren un int para especificar el número de segundos a esperar antes de salir para las opciones -qy -w. Este int debe ser > 0o >= 0, dependiendo de la versión.

Si está implementando algo en varias máquinas y no está seguro de que usen la misma implementación de netcat, puede considerar ajustar su llamada de netcat con el timeoutprograma para matar a netcat después de unos segundos.

timeout 5 echo '{"hostUp": true}' | netcat localhost 8001

Este enfoque es un poco torpe porque pone un límite superior en la ejecución de netcat independientemente de si está enviando datos con éxito o no, pero si está enviando una pequeña cantidad de datos y tiene unos segundos de sobra, esto debería funcionar con cualquier implementación de netcat.

7yl4r
fuente
5

Puede usar el -qparámetro, pero también hará que el netcatservidor se cierre.

$ echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -q 5 localhost 8001    
Cuonglm
fuente
3

En mi caso, la copia de netcat que estaba usando en mi Mac instalada a través de Homebrew (v 0.7.1) no tenía una opción -q, pero pude usar la opción -c para cerrar en STDIN EOF y poner el comando completo en un bucle:

while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done
jmaxyz
fuente
1

En el servidor Ubuntu 18.04 tuve que usar lo siguiente: (que se encuentra en las páginas de manual)

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001

Obviamente, el -Nes similar -qo -cen otras distribuciones

Daniel Schoonwinkel
fuente