Wie verwende ich nc, um einen TCP-Port unbegrenzt abzuhören?

Wie verwende ich nc, um einen TCP-Port unbegrenzt abzuhören?

Ich möchte die Daten, die auf einem bestimmten TCP-Port eingehen, unbegrenzt lesen und in eine Datei schreiben. Ich habe viele verschiedene Varianten ausprobiert, ncaber es funktioniert bei mir nicht. Meistens erhalte ich keine Fehlermeldung auf der Konsole. Folgendes habe ich versucht:

nc -lv 12345 >> ../myfile
nc -v 12345 >> ../myfile
nc -v -p 12345 >> ../myfile
nc -v localhost -p 12345 >> ../myfile

Schätze deine Hilfe..

Antwort1

Ich möchte die Daten, die auf einem bestimmten TCP-Port ankommen, auf unbestimmte Zeit lesen

Das ergibt nicht wirklich Sinn... wenn Sie alle Daten über einen UDP-Port empfangen wollten, ist das in Ordnung - TCP ist jedoch ein verbindungsbasiertes Protokoll. Sobald ein Client eine Verbindung herstellt und Sie accept(), haben Sie zwei Sockets - einen, der zuhört, und einen, der mit dem Client verbunden ist... ncschließt den ursprünglichen, zuhörenden Socket und kümmert sich eins zu eins um den Client.


Wenn Sie auf die Verbindung mehrerer Clients warten möchten, versuchen Sie es mit folgendem socat:

socat TCP-LISTEN:12345,fork FD:1 >> ../myfile

Dadurch wird ein Listening-Socket eingerichtet und bei der Verbindung ein neuer Prozess gestartet, wobei der Listening-Socket weiterhin lauscht. Alle empfangenen Daten werden in stdout (Dateideskriptor 1) geschrieben, wohin sie ../myfilezum Anhängen umgeleitet werden.

NOTIZ: Daten werden von einer beliebigen Anzahl von Clients empfangen, in keiner garantierten Reihenfolge und ohne Rahmen ... d. h.: Es entsteht ein Durcheinander von Daten, wenn Sie mehr als einen Client gleichzeitig haben.


Wenn Sie socatdie Datei für sich selbst verwalten möchten, können Sie einen von CREATEoder verwenden OPEN(siehemanpage):

socat TCP-LISTEN:12345,fork OPEN:../myfile,append

Wenn Sie zufrieden sind mit einem "ein Kunde nach dem anderen" Ansatz, dann ncin eine Schleife einfügen:

while :; do nc -l 12345; done >> ../myfile

Testen Sie dies mit nc:

nc localhost 12345

Antwort2

der Bildschirm links

nc -l 1234 startet den Server.

der Bildschirm rechts nc 127.0.0.1 1234stellt die Verbindung her.

es sieht so aus, als hätten Sie Ihre Befehle falsch verstanden.

Es ist auch wichtig zu wissen, ob Sie die GNU- oder BSD-Version verwenden. Meine ist die BSD-Version. man nc zeigt „NC(1) BSD General Commands Manual“. Um den Server auf der GNU-Version zu starten, ist möglicherweise -l mit -p erforderlich. Um den Client über einen beliebigen Port mit dem Server zu verbinden, wird niemals -p verwendet.

Bildbeschreibung hier eingeben

Sie können auch -v verwenden

Bildbeschreibung hier eingeben

Ihr unmittelbares Problem war, dass Sie es überhaupt nicht zum Laufen bekamen.

Ihre Frage bezieht sich auf die Unbefristung, und ich möchte jedoch anmerken, dass, wenn Sie auf der Clientseite Strg+C drücken, nicht nur die Verbindung unterbrochen wird, sondern auch der Server gestoppt wird. Sie können den Server in eine Schleife versetzen, in der er lauscht. Das funktioniert. Der Server hört dann weiter zu und ist immer noch da, wenn Sie nach Strg+C vom Client aus erneut versuchen, eine Verbindung herzustellen.

Bildbeschreibung hier eingeben

verwandte Informationen