Mengirim konten file teks ke server menggunakan netcat?

13

Ada proses daemon yang mendengarkan pada port 5144, yang tidak bisa saya modifikasi.

Saya ingin menggunakan netcat untuk mengirim konten file teks ke server, tetapi ini menyebabkan netcatmenggantung terminal sampai saya menekan Ctrl+ C:

cat file.txt | nc -u 127.0.0.1 5144

Satu-satunya cara saya bisa membuatnya bekerja adalah dengan menjalankan nc -u 127.0.0.1 5144dan menyalin / menempelkan isi file secara manual.

Ada ide?


Juga mencatat:

  1. cat file.txt | ...mengarah ke bash: ...: command not founddan saya dapat terus menggunakan terminal
  2. menggunakan nc -u 127.0.0.1 5144 < file.txtmengarah ke perilaku yang sama seperti menggunakan | atas
Amil
sumber
Apa yang terjadi ketika Anda mengatakannya cat file.txt | …? Bagaimana dengan nc -u 127.0.0.1 5144 < file.txt?
Scott
apakah Anda perlu menggunakan -u? Juga, apakah Anda mencoba untuk sisi lain, nc-l -p? dan apakah Anda mencoba nc -p? (ada satu nc yang menggunakan -l -p, dan yang saya pikir menggunakan -p tanpa -l). Anda hanya menunjukkan satu sisi, sisi klien / inisiasi. Apa yang kamu lakukan untuk sisi server? Cobalah sebagai ujian, buat nc dengarkan di port 1234 dan lihat apakah kucing ... | nc ... bekerja untuk itu. Saya belum pernah melihatnya sebelumnya, jadi ini mungkin yang lemah, tapi mungkin itu sesuatu yang aneh pada daemon khusus ini yang tidak menerima hal-hal yang di-catted.
barlop
Saya tidak dapat memodifikasi daemon. @Scott: bash: ...: command not founddan menggunakan "<file.txt" melakukan hal yang sama dengan | operator (netcat just hang)
Amil
Bisakah Anda lebih tepatnya? Apakah itu mengatakan " bash: ...: command not found"? Atau apakah dikatakan " bash: cat: command not found" atau " bash: nc: command not found"? Dan kemudian apakah itu kemudian keluar ke prompt shell, atau apakah itu menggantung? (Saya mendorong Anda untuk mengedit pertanyaan untuk menambahkan rincian ini, sehingga orang-orang di Australia yang baru saja bangun tidak harus membaca semua komentar ini untuk mengetahui apa gejalanya.)
Scott
@Scott: Terima kasih, saya mengintegrasikan jawaban saya ke pertanyaan Anda ke pertanyaan awal. Ada ide?
Amil

Jawaban:

7

Jika Anda menggunakan netcat versi GNU maka Anda dapat menggunakan flag -c untuk menutup koneksi di EOF.

-c, - tutup koneksi dekat pada EOF dari stdin

Jika Anda menggunakan versi asli alat ini maka Anda dapat menggunakan flag -q.

-q detik berhenti setelah EOF pada stdin dan penundaan detik

Contoh untuk versi aslinya adalah:

cat file.txt | nc -u -q 0 127.0.0.1 5144

Saya telah menambahkan "-q 0" ke perintah asli Anda. Ini menutup koneksi setelah file dikirim.

Kaplaa
sumber
Untuk membedakan: versi asli adalah versi yang harus ditentukan -l -p <port>untuk didengarkan. Versi GNU hanya membutuhkan waktu -l <port>.
tueftl
1

Dengan asumsi bahwa setelah mengirim koneksi EOF akan diam, Anda dapat menggunakan -w timeoutopsi, yang berfungsi timeoutsama dengan nol (tidak seperti -qopsi bodoh ...)

cat file.text | nc -u localhost 4300 -w0
Bora M. Alper
sumber
0

Jika Anda mentransfer dari FreeBSD ke Windows:

FreeBSD: cat file.txt | nc -N 10.0.0.5 5144

-N akan mematikan soket jaringan setelah EOF

Windows: nc -l -p 5144 > output.txt

-lakan berhenti mendengarkan saat koneksi ditutup (tidak seperti -L)

Eugene Petrov
sumber