çok iş parçacıklı sunucu olarak netcat


12

Ben böyle basit bir sunucu çalıştırmak için netcat kullanın:

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

Bu şekilde, herkes 2468 numaralı bağlantı noktasındaki sunucuma bağlanabilir ve "my_exe" ile konuşabilir.
Ne yazık ki, başka bir kişi açık oturum sırasında bağlanmak istiyorsa, "Bağlantı reddedildi" hatası alır, çünkü netcat artık bir sonraki "while" döngüsüne kadar dinlemiyor.

Netcat'in çok iş parçacıklı bir sunucu gibi davranmasının bir yolu var mı, yani her zaman gelen bağlantıları dinlerken? Değilse, bunun için bazı geçici çözümler var mı?


Sen socat
sivann

Yanıtlar:


18

görev için yanlış aracı kullanıyorsunuz: ucspi-tcp , özellikle tcpserver gibi bir şey kullanın :

tcpserver waits for incoming connections and, for each connection, 
runs a program of your choice.

2
Tüm hayatım boyunca bunlar neredeydi ?!
Sridhar Sarnobat

Teşekkürler @akira, örnek verebilir misiniz?
Sabrina

3

Kullandığınız işletim sisteminden bahsetmemenize rağmen, shell komut örneğinizin sözdizimine dayalı olarak Linux veya Unix olduğunu varsayacağım.

Sisteminizde xinetd (veya selefi inetd ) çalışıyorsa, seçtiğiniz bağlantı noktasında bir bağlantı dinlemek için bu yazılımı kullanabilir ve yanıt vermek için bir yürütülebilir dosya çalıştırabilirsiniz. Xinetd / inetd ile, her biri yürütülebilir dosyalarınızın ayrı bir örneği tarafından sunulan birden fazla eşzamanlı bağlantıya izin verme seçeneğiniz vardır.


-2

Muhtemelen işlemi arka plana geçirebilirsiniz (daha sonra bir sonraki döngüye geçmeden önce geri dönüşü beklemez) gibi bir '&' ile:

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

7
Bu, bir sürü alt işlem
üretecek

5
Ve sadece ilk çağrı işe yarayacak; başarılı olan her biri başarısız olacaktır çünkü 2468 bağlantı noktasında zaten bir sunucu soketi vardır.
Daniel Griscom
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.