Bagaimana cara menutup koneksi netcat secara otomatis setelah data dikirim?

22

Saya menjalankan perintah berikut dari skrip:

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

Namun, klien netcat tetap terbuka tanpa batas. Bagaimana saya bisa menutup koneksi setelah data ini dikirim?

Justin Meltzer
sumber

Jawaban:

17

Kedua jawaban lain -cdan yang -qdiberikan adalah benar dalam konteks yang benar, tetapi mungkin membantu untuk merangkum mengapa ada beberapa jawaban dan memberikan solusi yang lebih umum.

Opsi-opsi berbeda ini melakukan hal yang sama tetapi implementasi netcat berbeda:

  • -c Implementasi GNU dari netcat
  • -q Implementasi OpenBSD dari netcat.
  • -w (lainnya?) Implementasi OpenBSD dari netcat.

Beberapa versi memerlukan int untuk menentukan jumlah detik untuk menunggu sebelum berhenti untuk opsi -qdan -w. Int ini harus > 0atau >= 0, tergantung pada versinya.

Jika Anda menerapkan sesuatu di beberapa mesin dan tidak yakin mereka menggunakan implementasi netcat yang sama, Anda dapat mempertimbangkan untuk membungkus panggilan netcat Anda dengan timeoutprogram untuk mematikan netcat setelah beberapa detik.

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

Pendekatan ini agak canggung karena menempatkan batas atas pada eksekusi netcat terlepas dari apakah atau tidak berhasil mengirim data, tetapi jika Anda mengirim sejumlah kecil data dan memiliki beberapa detik untuk cadangan maka ini harus bekerja dengan implementasi netcat.

7yl4r
sumber
5

Anda dapat menggunakan -qparameter, tetapi itu akan menyebabkan netcatserver ditutup juga.

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

Dalam kasus saya, salinan netcat yang saya gunakan pada Mac saya diinstal melalui Homebrew (v 0.7.1) tidak memiliki opsi -q, tapi saya bisa menggunakan opsi -c untuk menutup STDIN EOF dan meletakkan seluruh perintah dalam satu lingkaran:

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

Di server Ubuntu 18.04 saya harus menggunakan yang berikut: (ditemukan di halaman manual)

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

Jelas -Nini mirip dengan -qatau -cpada distro lain

Daniel Schoonwinkel
sumber