netcat als Multithread-Server

17782
etuardu

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 sich jeder an Port 2468 mit meinem Host verbinden und mit "my_exe" sprechen.
Wenn ein anderer Benutzer 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, dass sich netcat wie ein Multithread-Server verhält, dh immer auf eingehende Verbindungen wartet? Wenn nicht, gibt es einige Problemumgehungen?

10
Sie können socat verwenden sivann vor 7 Jahren 0

3 Antworten auf die Frage

16
akira

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

tcpserver waits for incoming connections and, for each connection,  runs a program of your choice. 
Wo war das mein ganzes Leben ?! Sridhar-Sarnobat vor 7 Jahren 1
3
Mox

Obwohl Sie das von Ihnen verwendete Betriebssystem nicht erwähnt haben, gehe ich davon aus, dass es sich um Linux oder Unix handelt, die auf der Syntax Ihres Shellbefehlsbeispiels basieren.

Wenn auf Ihrem System xinetd (oder sein Vorgänger inetd ) ausgeführt wird, können Sie diese Software verwenden, um eine Verbindung an einem Port Ihrer Wahl zu überwachen und eine ausführbare Datei auszufü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.

-2
nairb

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

while true; do nc -l -p 2468 -e ./my_exe &; done 
Das bringt eine Menge Subprozesse hervor und stürzt das System ab .... jackweirdy vor 11 Jahren 7
Und nur der erste Aufruf wird funktionieren; Jeder nachfolgende wird fehlschlagen, da an Port 2468 bereits ein Serversockel vorhanden ist. Daniel Griscom vor 8 Jahren 3