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?


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.

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.


-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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.