Senden der Datei über Netcat

23

Ich verwende so etwas, um Dateien von einem Computer auf einen anderen zu senden:

So liefern Sie eine Datei (auf Computer A):

cat something.zip | nc -l -p 1234

So empfangen Sie eine Datei (auf Computer B):

netcat server.ip.here. 1234 > something.zip

Meine Frage ist ... kann ich das Gegenteil tun? Angenommen, ich habe eine Datei auf Computer B und möchte sie an A senden, aber nicht so, wie ich es oben geschrieben habe. Dazu muss der Computer, der die Datei (A) empfangen soll, ein "Listening" -Server sein und den Computer verbinden, der die Datei sendet ( B) zum Server und senden Sie die Datei? Ist es möglich? Ich denke, es könnte sein, aber ich bin nicht sicher, wie ich das machen soll.

Falls meine obige Erklärung durcheinander ist: Wie sende ich eine Datei an den Server, anstatt die Datei auf dem Server bereitzustellen und dann von dort zu nehmen (wie oben)?

Phil
quelle
Hinweis: Wenn Sie verwenden , ncweil scpzu langsam ist und Sie keine Verschlüsselung benötigen, können Sie wechseln wollen udpcast: superuser.com/questions/692294/...
unhammer

Antworten:

37

Auf deinem Server (A):

nc -l -p 1234 -q 1> something.zip </ dev / null
Auf Ihrem "Absender-Client" (B):
Katze something.zip | netcat server.ip.here 1234

Martinwguy
quelle
Ja, ich dachte, dass ich irgendwie die Seite wechseln muss, aber ich war mir nicht sicher, wie :). Danke, es funktioniert!
Phil
Das ist ein süßer Netcat-Trick.
DaveParillo
2
warum das < /dev/nullTeil?
Törzsmókus
7
Da netcat sowohl stdin liest als auch stdout schreibt, wird alles, was von stdin gelesen wurde, an das Netzwerk gesendet und alles, was vom Netzwerk empfangen wurde, über stdout gedruckt. Das </ dev / null stellt sicher, dass netcat nach Abschluss der empfangenen Datei nicht auf unbestimmte Zeit auf Eingaben von der Konsole wartet (die es sowieso nicht lesen sollte!) Und dass es nicht verschlingt Alle Eingaben, die möglicherweise über das Terminal verfügbar sind, z. B. die Eingabe des nächsten Befehls, den Sie ausführen möchten.
Martinwguy
4
Wenn ja pv, würde ich vorschlagen, den "Server-Client" so zu betreiben pv soemthing.zip | ..., dass der Fortschritt des Lesens der Datei in der Pipe angezeigt wird.
ThorSummoner
5

Wenn Sie außerdem Dateiberechtigungen, Eigentumsrechte und Zeitstempel beibehalten möchten, verwenden wir tar mit netcat , um Verzeichnisse und Dateien zu übertragen.

Auf dem empfangenden System:

nc -l -p 12345 -q 1 | tar xz -C /path/to/root/of/tree

Vom sendenden System:

tar czf - ./directory_tree_to_xfer | nc <host name or IP address of receiving system> 12345 

Ich hoffe, das hilft.

B.Kaatz
quelle
1
Gute Ergänzung zu der Antwort, aber bitte hinterlassen Sie es als Kommentar und nicht als separate Antwort.
Am
2
Konnte oben keinen Kommentar hinzufügen, da es an Rep-Punkten auf diesem Unter-Board mangelt. Daher musste ich ihn als Antwort anbieten, obwohl Sie anscheinend Ihre eigenen Antworten kommentieren dürfen.
B. Kaatz,
2

Computer A: nc -l -p 1234 > filename.txt

Computer B: nc server.com 1234 < filename.txt

Sollte auch funktionieren;)

Kennzeichen
quelle
0

Starten Sie eine weitere Instanz von netcat auf Computer B. Führen Sie die gleichen Schritte wie auf Computer A aus, bedienen Sie sie jedoch über B. Weisen Sie dem neuen Server einen neuen Port zu.

DaveParillo
quelle
Ich möchte nicht dasselbe tun, ich möchte Befehle in etwas anderes ändern (ich bin nicht sicher, ob es möglich ist) ... schau dir den fettgedruckten Text in meiner Frage an. Was ich damit meine ist, dass ich nicht von B aus dienen möchte. Ich möchte, dass A Server ist, der auf Eingaben wartet ... und dann möchte ich Dateiinhalte von nicht hörendem B an hörendes A senden.
Phil
So funktioniert netcat nicht.
DaveParillo 20.01.10
1
Wie Sie anhand der akzeptierten Antwort sehen können, funktioniert Netcat auch so.
Phil
Du hast recht. Ich lerne jeden Tag etwas Neues!
DaveParillo