Wie kann man mit nc einen TCP-Port unbegrenzt abhören?

720
user422171

Ich möchte die Daten, die an einem bestimmten TCP-Port ankommen, unbegrenzt lesen und die Daten in eine Datei sichern. Ich habe viele verschiedene Varianten ausprobiert, ncaber es funktioniert nicht für mich. Meistens bekomme ich keine Fehlermeldung auf der Konsole. Folgendes habe ich ausprobiert:

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

Schätze deine Hilfe..

0
Was war deine Absicht mit "-v" und "-p"? Attie vor 5 Jahren 0
@Attie -v, um zu sehen, was er empfängt, und -p für die Portnummer. user422171 vor 5 Jahren 0
Ja, aber warum sollte es nützlich sein, es weiterzuhören? Attie vor 5 Jahren 0
@Attie Nur zum Testen des Befehls, ob er funktioniert, und um zu wissen, wie er funktioniert. Wollte es irgendwann entfernen .. user422171 vor 5 Jahren 0

2 Antworten auf die Frage

0
Attie

Ich möchte die an einem bestimmten TCP-Port ankommenden Daten unbegrenzt lesen

Das macht eigentlich keinen Sinn ... wenn Sie nach allen Daten, die an einem UDP-Port ankommen, waren, dann ist es gut - TCP ist jedoch ein verbindungsbasiertes Protokoll. Sobald sich ein Client verbindet, erhalten Sie accept()zwei Sockets - einen, der mit dem Client verbunden ist, und einen, der ncmit dem Client verbunden ist. Der ursprüngliche Abhörsockel wird geschlossen, und der Client wird in Einzelgespräche geführt.


Wenn Sie auf mehrere Clients zugreifen möchten, die eine Verbindung herstellen, versuchen Sie es mit socat:

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

Dadurch wird ein Abhörsockel eingerichtet und beim Verbindungsaufbau ein neuer Prozess eingeleitet - der Abhörsockel bleibt hörbar. Alle empfangenen Daten werden in stdout (Dateideskriptor 1) geschrieben, zu dem ../myfilezum Anhängen weitergeleitet wird.

ANMERKUNG : Daten werden von einer beliebigen Anzahl von Clients empfangen, und zwar in keiner garantierten Reihenfolge ohne Framing ... dh: Es ist ein Durcheinander von verworrenen Daten, wenn Sie mehr als einen Client gleichzeitig haben.


Wenn Sie socatdie Datei für Sie bearbeiten möchten, können Sie eines von CREATEoder verwenden OPEN(siehe Manpage ):

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

Wenn Sie mit einem Ansatz für jeweils einen Client zufrieden sind, fügen Sie nceine Schleife ein:

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

Testen Sie dies mit nc:

nc localhost 12345 
Ich hätte es in der Frage klarstellen sollen. Ich habe nur einen Client, der an diesem Port sendet. Ich muss nur alles, was an diesem Port kommt, packen und in die Datei schreiben user422171 vor 5 Jahren 0
... was ist dann los mit `nc -l 12345 >> ../ myfile`? Attie vor 5 Jahren 0
Es erstellt die Datei, wird jedoch nie geschrieben. Ich habe überprüft, ob der Client alle 2 Sekunden eine Zeichenfolge sendet. user422171 vor 5 Jahren 0
Ich denke, was Sie in der Antwort erwähnt haben, ist die Ursache. Ich schaffe nicht die Steckdose. Ich versuche, den Port zu abonnieren und ohne Socketverbindung zu hören user422171 vor 5 Jahren 0
0
barlop

der Bildschirm auf der linken Seite

nc -l 1234 startet den Server

Der Bildschirm rechts nc 127.0.0.1 1234verbindet sich.

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

Gut zu wissen, ob Sie die gnu oder die bsd verwenden, meine ist die bsd. Man nc zeigt "NC (1) BSD General Commands Manual". Um den Server auf dem gnu Server zu starten, benötigt er möglicherweise -l mit -p. Um den Client an einem beliebigen Port mit dem Server zu verbinden, wird niemals -p verwendet.

Sie können auch -v verwenden

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

Ihre Frage fragt, ob es unbestimmt ist, und ich würde beachten, dass, wenn Sie auf der Clientseite Strg-C ausführen, die Verbindung unterbrochen und der Server angehalten wird. Sie können diesen Server in einer Schleife abhören. Das funktioniert. Der Server hört also weiter zu und ist immer noch da, wenn Sie versuchen, nach einer Strg-C-Verbindung vom Client erneut eine Verbindung herzustellen.

Wenn ich den Server starte, erhalte ich Folgendes: "Warnung: Inverse Namenssuche für" 0.0.48.56 "fehlgeschlagen." user422171 vor 5 Jahren 0
Auch der Client-Befehl macht nichts user422171 vor 5 Jahren 0
@ user422171 Haben Sie versucht, -n hinzuzufügen, z. B. "nc -lvn 12345" und "$ nc -vn 127.0.0.1 12345" https://stackoverflow.com/questions/48779583/nc-command-inverse-host-lookup-failed- Unbekannter Host Wenn Sie sich auf der Clientseite befinden, versuchen Sie, die Dinge einzugeben und die EINGABETASTE zu drücken. Es sollte das sein, was ich als Echo-Server bezeichnen kann, dh was immer Sie eingeben (und drücken Sie die Eingabetaste), wird am Client auf dem Server angezeigt. barlop vor 5 Jahren 0
Versuchte `nc -lvn 12345` und bekam` Fehler: Host "12345" konnte nicht aufgelöst werden ` user422171 vor 5 Jahren 0
@ user422171 eine idee welche version von nc debian standardmäßig verwendet oder welche version hast du? Was ist, wenn Sie `nc -n -l -p 12345` versuchen? oder "nc -n -p 12345"? barlop vor 5 Jahren 0
Version ist `netcat (The GNU Netcat) 0.7.1` user422171 vor 5 Jahren 0
@ user422171 okay .. mein ist BSD .. also kann ich nicht wirklich viel kommentieren .. Ich habe vorher das GNU eins verwendet und ich denke es war "nc -l -p 12345" oder "nc -lp 12345" oder wenn Sie Versuchen Sie, -n hinzuzufügen, um die Warnung zu entfernen, die Sie über ein Problem bei der Namenssuche erhalten, und dann "nc -n -l -p 12345" oder -nlp 12345. Wenn dies funktioniert, müssen Sie nur herausfinden, wie Sie den Client verbinden . zB sehen Sie hier, es sieht aus wie gnu nc und sie machen sowohl Server als auch Client https://i.imgur.com/uVow4SB.png barlop vor 5 Jahren 0
Vielen Dank! "nc -nlp 12344" ausprobiert Fehler "Fehler: Konnte Abhörsockel nicht einrichten (err = -3)" Ich denke, dies ist ein Fortschritt, da zum ersten Mal in den letzten Tagen versucht wurde, einen Abhörsockel zu erstellen .. user422171 vor 5 Jahren 0