nc (netcat) hang, menunggu lebih banyak data, dalam mode UDP.


16

Saya mencoba mengirim string kecil ke statsd via nc di dalam blok baca:

while read line; do
    printf "folder.counter:value|1c" | nc -q 0 -u $host $port
done

Sayangnya, ketika dalam mode UDP, nc tampaknya ingin menunggu tanpa batas, meskipun saya telah menentukan -q 0, yang dikatakan halaman manual akan membuat program keluar segera setelah EOF.

Saya sudah mencoba melewatinya -w 1, tetapi jika data yang saya kirim masuk lebih dari satu baris per detik, data akan naik, dan saya kehilangan statistik waktu nyata saya (belum lagi mempertaruhkan semacam buffer overflow semacam).

Apakah mungkin untuk melakukan apa yang saya coba lakukan dengan netcat, atau apakah saya perlu menulis sesuatu dalam bahasa yang memiliki perpustakaan statsd?


meskipun itu tidak menyelesaikan masalah Anda, menambahkan -q 0 memecahkan masalah saya
Colin

Ini terjadi dalam mode TCP sekarang, yang membawa saya ke sini.
baitisj

Jawaban:


9

Saya akhirnya memperbaiki masalah dengan beralih ke socat:

while read line; do
    printf "folder.counter:value|1c" | socat -t 0 - UDP:$host:$port
done

Karena tidak ada input lain, dan ini menyelesaikan masalah saya, saya menandainya sebagai jawabannya.
bshacklett

Anda bisa menambahkan timeout 1 detik ke netcat (menambahkan argumen -w 1 mungkin berhasil).
parkamark

7

Anda dapat menetapkan 0 sebagai nilai batas waktu untuk -w, sehingga tidak akan menunggu sama sekali.


Ini harus menjadi jawaban yang diterima.
Petrus K.

3
invalid wait-time 0
Tanpa

2

menambahkan opsi -v memecahkan masalah saya. Alasan saya tidak yakin.


2

Saya memiliki masalah yang sama; dipecahkan dengan menggunakan -copsi:

-c, --close                close connection on EOF from stdin

jadi sesuatu seperti

while read line; do
    printf "folder.counter:value|1c" | nc -cu $host $port
done

Ya, tidak masuk akal untuk "menutup" koneksi udp - tapi itu akhirnya berhasil.


Menambahkan -cmenyelesaikan masalah saya dengannetcat (The GNU Netcat) 0.7.1
Noah Sussman

0

Bagi kami, kami mengirim muatan nc dari satu mesin ke komputer lain melalui skrip python. Dalam python, ketika kami secara eksplisit menyandikan payload di 'UTF-8', itu hanya berfungsi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.