Datei wird über netcat gesendet

57644
Phil

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

So stellen Sie eine Datei bereit (auf Computer A):

cat something.zip | nc -l -p 1234 

So erhalten Sie eine Datei (auf Computer B):

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

Meine Frage ist ... kann ich das Gegenteil tun? Nehmen wir an, ich habe eine Datei auf Computer B und möchte sie an A senden, aber nicht so, wie ich oben geschrieben habe, sondern indem ich den Computer, der die Datei erhalten soll, (A) als "hörenden" Server und Verbindungscomputer, 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 mir nicht sicher, wie ich das machen soll.

Falls meine obige Erklärung falsch ist: Wie sende ich die Datei an den 'Server', anstatt die Datei auf dem Server zu liefern und sie dann daraus zu entfernen (wie oben beschrieben)?

16
Hinweis: Wenn Sie "nc" verwenden, weil "scp" zu langsam ist und keine Verschlüsselung erforderlich ist, möchten Sie möglicherweise zu "udpcast" wechseln: https://superuser.com/questions/692294/why-is -udcast-ist-viele-mal-schneller-als-netcat unhammer vor 6 Jahren 0

4 Antworten auf die Frage

26
martinwguy

Auf deinem Server (A):

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

Ja, ich dachte, dass ich irgendwie die Seiten wechseln muss, aber ich war mir nicht sicher, wie. Danke, es geht! Phil vor 14 Jahren 0
Das ist ein süßer Netcat-Trick. DaveParillo vor 14 Jahren 0
warum der `</ dev / null` teil? törzsmókus vor 11 Jahren 2
Because netcat both reads stdin and writes stdout simultaneously, sending anything read from stdin out to the network and printing anything received from the network on stdout. The martinwguy vor 11 Jahren 5
Mit '-q 1' erhielt ich nur 20-50% einer 1,2-GB-Datei. Es funktionierte gut mit einem höheren "-q" -Wert. Ivan Kozik vor 7 Jahren 0
`-q Sekunden :: Warten Sie nach dem EOF auf stdin die angegebene Anzahl von Sekunden und beenden Sie den Vorgang. Wenn Sekunden negativ sind, warten Sie für immer `. Für mich funktionierte ein `-q`-Wert von -1 für eine Multi-Gig-Datei. ThorSummoner vor 7 Jahren 0
Wenn Sie "pv" haben, würde ich vorschlagen, den "Server-Client" als "pv soemthing.zip |" zu betreiben ..., zeigt den Fortschritt der eingelesenen Datei in der Pipe an. ThorSummoner vor 7 Jahren 2
Bei mir und -q 0 funktioniert es für große Dateien OK. Vielleicht ist es ein Fehler, der behoben wurde? rogerdpack vor 6 Jahren 0
4
B.Kaatz

Wenn Sie auch Dateiberechtigungen, Besitzrechte und Zeitstempel beibehalten möchten, verwenden wir tar mit netcat, um Verzeichnisse und Dateien zu übertragen.

Auf Empfangssystem:

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 

Hoffentlich hilft das.

Gute Ergänzung zur Antwort, aber bitte als Kommentar und nicht als separate Antwort. agtoever vor 9 Jahren 1
Der obige Kommentar konnte nicht hinzugefügt werden, da zu diesem Zeitpunkt keine Repräsentationspunkte vorhanden waren. Daher musste ich ihn als Antwort anbieten, obwohl Sie anscheinend Ihre eigenen Antworten kommentieren dürfen. B.Kaatz vor 9 Jahren 2
0
DaveParillo

Starten Sie eine weitere Instanz von netcat auf Computer B. Führen Sie einfach das aus, was Sie auf Computer A getan haben, aber stellen Sie es von B bereit. Geben Sie dem neuen Server einen neuen Port.

Ich möchte nicht dasselbe tun, ich möchte die Befehle in etwas anderes ändern (ich bin mir nicht sicher, ob das 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 auf Eingaben wartet ... und dann möchte ich Dateiinhalte von Nicht-Hören B an Hören A senden. Phil vor 14 Jahren 0
So funktioniert netcat nicht. DaveParillo vor 14 Jahren 0
Wie Sie der akzeptierten Antwort entnehmen können - ja, so kann netcat auch funktionieren. Phil vor 14 Jahren 1
Du hast recht. Ich lerne jeden Tag etwas Neues! DaveParillo vor 14 Jahren 0
0
mark

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

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

Sollte auch funktionieren;)