netcat jako serwer wielowątkowy

12

Używam netcata do uruchomienia prostego serwera takiego jak ten:

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

W ten sposób każdy może połączyć się z moim hostem na porcie 2468 i porozmawiać z „my_exe”.
Niestety, jeśli ktoś chce się połączyć podczas sesji otwartej, otrzyma błąd „Odmowa połączenia”, ponieważ netcat nie będzie nasłuchiwał aż do następnej pętli „while”.

Czy istnieje sposób, aby netcat zachowywał się jak serwer wielowątkowy, tzn. Zawsze nasłuchuje połączeń przychodzących? Jeśli nie, czy istnieją jakieś obejścia tego problemu?

etuardu
źródło
Możesz użyć socat
sivann

Odpowiedzi:

18

używasz niewłaściwego narzędzia do zadania: użyj czegoś takiego jak ucspi-tcp , zwłaszcza tcpserver :

tcpserver waits for incoming connections and, for each connection, 
runs a program of your choice.
akira
źródło
2
Gdzie to było przez całe moje życie ?!
Sridhar Sarnobat
Dzięki @akira, czy możesz podać przykład?
Sabrina
3

Chociaż nie wspomniałeś o używanym systemie operacyjnym, założę, że jest to Linux lub Unix na podstawie składni twojego przykładu polecenia powłoki.

Jeśli w systemie działa xinetd (lub jego poprzednik inetd ), możesz użyć tego oprogramowania do nasłuchiwania połączenia na wybranym porcie i uruchomić plik wykonywalny, aby odpowiedzieć. W przypadku xinetd / inetd masz możliwość zezwalania na wiele równoczesnych połączeń, z których każde obsługiwane jest przez osobną instancję pliku wykonywalnego.

Mox
źródło
-2

prawdopodobnie możesz po prostu ustawić proces w tle (wtedy nie czeka on na powrót przed przejściem do następnej pętli) za pomocą „&”, takiego jak:

while true; do nc -l -p 2468 -e ./my_exe &; done
nairb
źródło
7
To spowoduje odrodzenie się wielu podprocesów i awarię systemu ....
jackweirdy
5
I zadziała tylko pierwsze wywołanie; każdy kolejny zawiedzie, ponieważ na porcie 2468 jest już gniazdo serwera.
Daniel Griscom