Envoi de fichier via netcat

23

J'utilise quelque chose comme ça pour envoyer des fichiers d'un ordinateur à un autre:

Pour servir le fichier (sur l'ordinateur A):

cat something.zip | nc -l -p 1234

Pour recevoir le fichier (sur l'ordinateur B):

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

Ma question est ... puis-je faire le contraire? Disons que j'ai un fichier sur l'ordinateur B et que je veux l'envoyer à A mais pas de la façon dont j'ai écrit ci-dessus, mais en faisant en sorte que l'ordinateur qui est censé recevoir le fichier (A) soit «à l'écoute» du serveur et connecte l'ordinateur qui «envoie» le fichier ( B) au serveur et envoyer le fichier? C'est possible? Je pense que c'est possible, mais je ne sais pas comment procéder.

Dans le cas où mon explication ci-dessus est foirée: comment envoyer un fichier au «serveur» au lieu de servir le fichier sur le serveur et de le prendre ensuite (comme je l'ai fait ci-dessus)?

Phil
la source
Remarque: si vous utilisez, nccar il scpest trop lent et que vous n'avez pas besoin de chiffrement, vous pouvez passer à udpcast: superuser.com/questions/692294/…
unhammer

Réponses:

38

Sur votre serveur (A):

nc -l -p 1234 -q 1> quelque chose.zip </ dev / null
Sur votre "client expéditeur" (B):
chat quelque chose.zip | netcat server.ip.here 1234

martinwguy
la source
Oui, je pensais que je devrais changer de camp d'une manière ou d'une autre, mais je ne savais pas trop comment :). Merci, ça marche!
Phil
C'est un joli truc netcat.
DaveParillo
2
pourquoi la < /dev/nullpartie?
törzsmókus
7
Parce que netcat lit à la fois stdin et écrit stdout simultanément, envoie tout ce qui est lu depuis stdin vers le réseau et imprime tout ce qui est reçu du réseau sur stdout. Le </ dev / null garantit que, lorsque le fichier reçu est terminé, netcat ne reste pas indéfiniment en attente d'une entrée de la console (qu'il ne devrait pas lire de toute façon!) Et garantit également qu'il ne gobe pas toute entrée pouvant être disponible à partir du terminal, telle que vous tapez la prochaine commande que vous souhaitez exécuter.
martinwguy
4
si vous l'avez pv, je suggérerais d'utiliser le "client serveur" car pv soemthing.zip | ...cela affichera la progression du fichier lu dans le pipe.
ThorSummoner
6

Remarque: si vous souhaitez également conserver les autorisations, la propriété et les horodatages des fichiers, nous utilisons tar avec netcat pour effectuer des transferts de répertoires et de fichiers.

Sur le système de réception:

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

Du système d'envoi:

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

J'espère que cela pourra aider.

B.Kaatz
la source
1
Bon ajout à la réponse, mais veuillez le laisser comme un commentaire et non comme une réponse séparée.
agtoever
2
Impossible d'ajouter un commentaire ci-dessus en raison du manque de points de représentation sur ce sous-tableau, j'ai donc dû le proposer comme réponse, mais apparemment, vous êtes autorisé à commenter vos propres réponses.
B.Kaatz
3

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

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

Devrait fonctionner aussi;)

marque
la source
0

Démarrez une autre instance de netcat sur l'ordinateur B. Faites simplement ce que vous avez fait sur l'ordinateur A, mais servez-le à partir de B. Donnez au nouveau serveur un nouveau port.

DaveParillo
la source
Je ne veux pas faire la même chose, je veux changer les commandes en quelque chose d'autre (je ne sais pas si c'est possible) ... regardez le texte en gras dans ma question. Ce que je veux dire, c'est que je ne veux pas servir à partir de B. Je veux que A soit le serveur à l'écoute de l'entrée ... et ensuite je veux envoyer le contenu du fichier de B non écouté à l'écoute A.
Phil
Ce n'est pas ainsi que fonctionne Netcat.
DaveParillo
1
Comme vous pouvez le voir dans la réponse acceptée - oui, c'est aussi ainsi que netcat peut fonctionner.
Phil
Tu as raison. J'apprends quelque chose de nouveau tous les jours!
DaveParillo