Senden von Textdatei-Inhalten an Server mit Netcat?

13

Auf Port 5144 wartet ein Daemon-Prozess, den ich nicht ändern kann.

Ich möchte netcat verwenden, um den Inhalt einer Textdatei an den Server zu senden. Dies führt jedoch dazu, dass netcatdas Terminal hängt, bis ich Ctrl+ drücke C:

cat file.txt | nc -u 127.0.0.1 5144

Der einzige Weg, wie ich es zum Laufen bringen kann, besteht darin, nc -u 127.0.0.1 5144den Inhalt der Datei manuell auszuführen und zu kopieren / einzufügen.

Irgendwelche Ideen?


Beachten Sie auch:

  1. cat file.txt | ...führt zu bash: ...: command not foundund ich kann das terminal weiter nutzen
  2. using nc -u 127.0.0.1 5144 < file.txtführt zu demselben Verhalten wie using | über
Amil
quelle
Was passiert, wenn du sagst cat file.txt | …? Wie wäre es nc -u 127.0.0.1 5144 < file.txt?
Scott
Müssen Sie -u verwenden? Haben Sie es auch für die andere Seite versucht, nc -l -p? und hast du versucht nc -p? (Es gibt einen NC, der -l -p verwendet, und einen, von dem ich denke, dass er -p ohne -l verwendet). Sie haben nur eine Seite gezeigt, die Client- / Initiator-Seite. Was machst du für die Serverseite? Versuchen Sie es als Test, damit nc Port 1234 abhört und prüft, ob cat ... | nc ... arbeitet daran. Ich habe es noch nie zuvor gesehen, also ist es vielleicht ein schwacher, aber vielleicht ist es etwas Besonderes für diesen speziellen Daemon, der keine Catted-Dinge akzeptiert.
Barlop
Ich kann den Daemon nicht ändern. @Scott: bash: ...: command not foundund die Verwendung von "<file.txt" entspricht dem | operator (netcat hängt gerade)
Amil
Können Sie bitte präziser sein? Sagt es " bash: ...: command not found"? Oder heißt es " bash: cat: command not found" oder " bash: nc: command not found"? Und kommt es dann zu einer Shell-Eingabeaufforderung oder hängt es? (Ich empfehle Ihnen, die Frage zu bearbeiten, um diese Details hinzuzufügen, damit Menschen in Australien, die gerade aufwachen, nicht all diese Kommentare lesen müssen, um herauszufinden, was Ihre Symptome sind.)
Scott
@Scott: Danke, ich habe meine Antworten auf deine Fragen in die ursprüngliche Frage integriert. Irgendwelche Ideen?
Amil

Antworten:

7

Wenn Sie die GNU-Version von netcat verwenden, können Sie das Flag -c verwenden, um die Verbindung in EOF zu trennen.

-c, --close enge Verbindung auf EOF von stdin

Wenn Sie die Originalversion des Tools verwenden, können Sie das Flag -q verwenden.

-q secs wird nach EOF bei stdin und Verzögerung von secs beendet

Ein Beispiel für die Originalversion ist:

cat file.txt | nc -u -q 0 127.0.0.1 5144

Ich habe Ihrem ursprünglichen Befehl "-q 0" hinzugefügt. Dadurch wird die Verbindung getrennt, nachdem die Datei gesendet wurde.

Kaplaa
quelle
Zur Unterscheidung: Die Originalversion ist diejenige, die -l -p <port>zum Hören angegeben werden muss. Die GNU-Version dauert nur -l <port>.
Dienstag,
1

Vorausgesetzt, dass nach dem Senden der EOF-Verbindung keine Verbindung zustande kommt, können Sie die -w timeoutOption verwenden, die für timeoutden Wert Null gilt (im Gegensatz zur dummen -qOption ...).

cat file.text | nc -u localhost 4300 -w0
Bora M. Alper
quelle
0

Wenn Sie von FreeBSD nach Windows wechseln:

FreeBSD: cat file.txt | nc -N 10.0.0.5 5144

-N fährt den Netzwerk-Socket nach EOF herunter

Windows: nc -l -p 5144 > output.txt

-lhört auf zu lauschen, wenn die Verbindung geschlossen ist (im Gegensatz zu -L)

Eugene Petrov
quelle