netcat sebagai server multithread

12

Saya menggunakan netcat untuk menjalankan server sederhana seperti ini:

while true; do nc -l -p 2468 -e ./my_exe; done

Dengan cara ini, siapa pun dapat terhubung ke host saya di port 2468 dan berbicara dengan "my_exe".
Sayangnya, jika orang lain ingin terhubung selama sesi terbuka, itu akan mendapatkan kesalahan "Sambungan ditolak", karena netcat tidak lagi mendengarkan sampai loop "sementara" berikutnya.

Apakah ada cara untuk membuat netcat berperilaku seperti server multi-threaded, yaitu selalu mendengarkan koneksi yang masuk? Jika tidak, apakah ada beberapa solusi untuk ini?

etuardu
sumber
Anda dapat menggunakan socat
sivann

Jawaban:

18

Anda menggunakan alat yang salah untuk tugas: gunakan sesuatu seperti ucspi-tcp , terutama tcpserver :

tcpserver waits for incoming connections and, for each connection, 
runs a program of your choice.
akira
sumber
2
Di mana ini sepanjang hidupku ?!
Sridhar Sarnobat
Terima kasih @akira, dapatkah Anda memberikan contohnya?
Sabrina
3

Meskipun Anda tidak menyebutkan sistem operasi yang Anda gunakan, saya akan menganggap itu Linux atau Unix berdasarkan sintaks contoh perintah shell Anda.

Jika sistem Anda menjalankan xinetd (atau pendahulunya inetd ), Anda dapat menggunakan perangkat lunak itu untuk mendengarkan koneksi pada port pilihan Anda, dan menjalankan executable untuk merespons. Dengan xinetd / inetd, Anda memiliki opsi untuk mengizinkan beberapa koneksi konkuren, masing-masing dilayani oleh instance terpisah dari executable Anda.

Mox
sumber
-2

Anda mungkin bisa hanya latar belakang proses (maka tidak menunggu pengembalian sebelum melangkah ke loop berikutnya) dengan '&' seperti:

while true; do nc -l -p 2468 -e ./my_exe &; done
nairb
sumber
7
Itu akan menelurkan banyak subproses dan merusak sistem ....
jackweirdy
5
Dan, hanya doa pertama yang akan berhasil; setiap orang yang berhasil akan gagal karena sudah ada soket server pada port 2468.
Daniel Griscom