Saya ingin mengirim hanya satu nilai pendek dalam paket UDP, tetapi menjalankan perintah
echo -n "hello" | nc -4u localhost 8000
Saya dapat melihat bahwa server mendapatkan hal-hal halo tetapi saya harus menekan Ctrl+ cuntuk keluar dari perintah netcat.
Bagaimana saya bisa membuatnya berhenti setelah mengirim halo ?
Maaf, untuk kebisingannya, saya membaca ulang halaman manual dan menemukan -q
opsinya.
echo -n "hello" | nc -4u -q1 localhost 8000
bekerja (berhenti setelah 1 detik).
Untuk beberapa alasan itu tidak berhasil -q0
.
-q seconds: after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.
Jawaban:
Jika Anda menggunakan bash, Anda sebaiknya menulis
dan hindari semua keanehan dan ketidaksesuaian netcat.
Ini juga berfungsi mengirim ke host lain, mis:
Ini bukan perangkat "nyata" pada sistem file, tetapi bash alias "khusus" . Ada informasi tambahan di Bash Manual .
sumber
127.0.0.1
bukan padalocalhost
pada Ubuntu 14.04. (Ya, saya haruslocalhost
di/etc/hosts
.)/dev/udp/
bukan file asli. Ini hanya nama file yang diinterpretasikan secara khusus oleh bash.Saya tidak menemukan
-q1
opsi di netcat saya. Sebagai gantinya saya menggunakan-w1
opsi. Di bawah ini adalah skrip bash yang saya lakukan untuk mengirim paket udp ke semua host dan port:sumber
Pada netcat saat ini (v0.7.1) Anda memiliki tombol -c:
Karenanya,
harus melakukan triknya.
sumber
Netcat mengirim satu paket per baris baru. Jadi kamu baik-baik saja. Jika Anda melakukan sesuatu yang lebih kompleks maka Anda mungkin membutuhkan sesuatu yang lain.
Saya sedang bermain-main dengan Wireshark ketika saya menyadari ini. Tidak tahu apakah itu membantu.
sumber
echo -n "hello\nworld" >/dev/udp/localhost/514
dan Anda akan mendapatkan 2 barisSaya memiliki masalah yang sama tetapi saya menggunakan
-w 0
opsi untuk mengirim hanya satu paket dan keluar. Anda harus menggunakan perintah ini:sumber
-w0
. Kesalahan: waktu tunggu tidak valid 0