Come chiudere automaticamente la connessione netcat dopo l'invio dei dati?


22

Sto eseguendo il seguente comando da uno script:

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

Tuttavia, il client netcat rimane aperto indefinitamente. Come posso chiudere la connessione una volta che questi dati sono stati inviati?

Risposte:


17

Entrambe le altre risposte -c e quelle -qfornite sono corrette nel giusto contesto, ma può aiutare a riassumere perché ci sono più risposte e dare una soluzione più generale.

Queste diverse opzioni fanno la stessa cosa ma sono implementazioni diverse di netcat:

  • -c Implementazione GNU di netcat
  • -q Implementazione OpenBSD di netcat.
  • -w (altro?) Implementazione OpenBSD di netcat.

Alcune versioni richiedono un int per specificare il numero di secondi di attesa prima di uscire dalle opzioni -qe -w. Questo int deve essere> 0 o >= 0, a seconda della versione.

Se stai implementando qualcosa su più macchine e non sei sicuro che utilizzino la stessa implementazione di netcat, potresti considerare di racchiudere la tua chiamata netcat con il timeoutprogramma per uccidere netcat dopo alcuni secondi.

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

Questo approccio è un po 'goffo perché pone un limite superiore all'esecuzione di netcat indipendentemente dal fatto che stia inviando o meno dati con successo, ma se stai inviando una piccola quantità di dati e hai qualche secondo da perdere, allora dovrebbe funzionare con qualsiasi implementazione di netcat.


5

È possibile utilizzare il -qparametro, ma causerà anche la netcatchiusura del server.

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

3

Nel mio caso, la copia di netcat che stavo usando sul mio Mac installato tramite Homebrew (v 0.7.1) non aveva un'opzione -q, ma sono stato in grado di usare l'opzione -c per chiudere su STDIN EOF e mettere il intero comando in un ciclo:

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

1

Sul server Ubuntu 18.04 ho dovuto usare quanto segue: (trovato nelle pagine man)

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

Ovviamente -Nè simile -qo -csu altre distro

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.