Netcat als Multithread-Server

12

Ich benutze Netcat, um einen einfachen Server wie diesen auszuführen:

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

Auf diese Weise kann jeder über Port 2468 eine Verbindung zu meinem Host herstellen und mit "my_exe" sprechen.
Wenn jemand anderes während einer offenen Sitzung eine Verbindung herstellen möchte, wird leider der Fehler "Verbindung abgelehnt" angezeigt, da netcat bis zur nächsten "while" -Schleife nicht mehr lauscht.

Gibt es eine Möglichkeit, Netcat dazu zu bringen, sich wie ein Multithread-Server zu verhalten, dh immer auf eingehende Verbindungen zu warten? Wenn nicht, gibt es dafür einige Problemumgehungen?

etuardu
quelle
Sie können socat
sivann

Antworten:

18

Sie verwenden das falsche Tool für die Aufgabe: Verwenden Sie so etwas wie ucspi-tcp , insbesondere tcpserver :

tcpserver waits for incoming connections and, for each connection, 
runs a program of your choice.
Akira
quelle
2
Wo war das mein ganzes Leben lang?!
Sridhar Sarnobat
Danke @akira, kannst du das Beispiel liefern?
Sabrina
3

Obwohl Sie das verwendete Betriebssystem nicht erwähnt haben, gehe ich davon aus, dass es sich um Linux oder Unix handelt, basierend auf der Syntax Ihres Shell-Befehlsbeispiels.

Wenn auf Ihrem System xinetd (oder sein Vorgänger inetd ) ausgeführt wird, können Sie mit dieser Software auf eine Verbindung am Port Ihrer Wahl warten und eine ausführbare Datei ausführen, um zu antworten. Mit xinetd / inetd haben Sie die Möglichkeit, mehrere gleichzeitige Verbindungen zuzulassen, die jeweils von einer separaten Instanz Ihrer ausführbaren Datei bedient werden.

Mox
quelle
-2

Sie könnten den Prozess wahrscheinlich nur als Hintergrund (dann wartet er nicht auf eine Rückkehr, bevor Sie zur nächsten Schleife übergehen) mit einem '&' wie:

while true; do nc -l -p 2468 -e ./my_exe &; done
Nairb
quelle
7
Das wird eine Menge
Unterprozesse hervorrufen
5
Und nur der erste Aufruf funktioniert. Jeder nachfolgende wird fehlschlagen, da bereits ein Server-Socket an Port 2468 vorhanden ist.
Daniel Griscom