Invio di file tramite netcat


23

Sto usando qualcosa del genere per inviare file da un computer a un altro:

Per servire il file (sul computer A):

cat something.zip | nc -l -p 1234

Per ricevere il file (sul computer B):

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

La mia domanda è ... posso fare il contrario? Diciamo che ho un file sul computer B e voglio inviarlo ad A ma non come ho scritto sopra, ma facendo in modo che il computer che dovrebbe ricevere il file (A) sia un server "in ascolto" e colleghi il computer che sta inviando il file ( B) al server e inviare il file? È possibile? Penso che potrebbe essere, ma non sono sicuro di come farlo.

Nel caso in cui la mia spiegazione di cui sopra è incasinata: Come faccio a inviare il file A 'server' invece di servire il file sul server e quindi prenderlo DA esso (come ho fatto sopra)?


Nota: se si utilizza ncperché scpè troppo lento e non è necessaria la crittografia, è possibile passare a udpcast: superuser.com/questions/692294/…
unhammer

Risposte:


38

Sul tuo server (A):

nc -l -p 1234 -q 1> something.zip </ dev / null
Sul tuo "client mittente" (B):
cat qualcosa.zip | netcat server.ip.here 1234


Sì, ho pensato che dovrei cambiare lato in qualche modo, ma non ero sicuro di come :). Grazie, funziona!
Phil

È un bel trucco per netcat.
DaveParillo,

2
perché la < /dev/nullparte?
törzsmókus,

7
Poiché netcat legge sia stdin che scrive simultaneamente stdout, inviando qualsiasi cosa dallo stdin alla rete e stampando qualunque cosa ricevuta dalla rete su stdout. </ Dev / null garantisce che, quando il file ricevuto è stato completato, netcat non si trova lì in attesa indefinitamente in attesa di input dalla console (che non dovrebbe comunque leggere!) E garantisce anche che non si inghiottisca qualsiasi input che potrebbe essere disponibile dal terminale, ad esempio digitando il comando successivo che si desidera eseguire.
martinwguy,

4
in caso affermativo pv, suggerirei di utilizzare il "client server" come pv soemthing.zip | ..., che visualizzerà l'avanzamento del file letto andando nella pipe.
ThorSummoner,

6

Come nota, se si desidera preservare anche i permessi dei file, la proprietà e i timestamp, usiamo tar con netcat per fare trasferimenti di directory e file.

Sul sistema ricevente:

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

Dal sistema di invio:

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

Spero possa aiutare.


1
Buona aggiunta alla risposta, ma per favore lasciala come commento e non come risposta separata.
agtoever,

2
Non è stato possibile aggiungere un commento sopra a causa della mancanza di punti Rep in questa sotto-scheda, quindi ho dovuto offrirlo come risposta, anche se a quanto pare, ti è permesso commentare le tue risposte.
B.Kaatz

3

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

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

Dovrebbe funzionare anche;)


0

Avviare un'altra istanza di netcat sul computer B. Basta fare ciò che è stato fatto sul computer A, ma servirlo da B. Fornire una nuova porta al nuovo server.


Non voglio fare lo stesso, voglio cambiare i comandi in qualcos'altro (non sono sicuro che sia possibile) ... guarda il testo in grassetto nella mia domanda. Quello che voglio dire è che non voglio servire da B. Voglio che A sia un server in ascolto per l'input ... e poi voglio inviare il contenuto del file da B non in ascolto ad ascoltare A.
Phil

Non è così che funziona netcat.
DaveParillo,

1
Come puoi vedere dalla risposta accettata, sì, è così che può funzionare anche netcat.
Phil

Hai ragione. Imparo qualcosa di nuovo ogni giorno!
DaveParillo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.