50 votes

Transmettre un fichier via netcat

Je suis en train d'utiliser quelque chose comme ça pour envoyer un fichier d'un ordinateur à un autre :

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

cat quelquechose.zip | nc -l -p 1234

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

netcat server.ip.ici 1234 > quelquechose.zip

Ma question est... est-ce que je peux faire l'inverse ? Disons que j'ai un fichier sur l'ordinateur B et que je veux l'envoyer à A mais pas de la manière dont j'ai écrit ci-dessus, mais en faisant en sorte que l'ordinateur censé recevoir le fichier (A) soit un serveur 'écoutant' et connecter l'ordinateur qui envoie le fichier (B) au serveur et envoyer le fichier ? Est-ce possible ? Je pense que oui mais je ne suis pas sûr comment faire cela.

Dans le cas où mon explication ci-dessus est confuse : Comment envoyer un fichier VERS le 'serveur' au lieu de servir le fichier sur le serveur et ensuite le récupérer (comme je l'ai fait ci-dessus) ?

1 votes

Note : si vous utilisez nc parce que scp est trop lent et que vous n'avez pas besoin de chiffrement, vous voudrez peut-être passer à udpcast : superuser.com/questions/692294/…

78voto

Dan McGrath Points 380

Sur votre serveur (A):

 nc -l -p 1234 -q 1 > something.zip < /dev/null 
Sur votre "client émetteur" (B):     cat something.zip | netcat server.ip.here 1234

0 votes

Oui, je pensais que je devrais changer de camp d'une manière ou d'une autre, mais je n'étais pas sûr de comment :). Merci, ça marche !

0 votes

C'est une astuce de netcat mignonne.

10 votes

Pourquoi la partie ?

9voto

Guru Points 1786

Comme note, si vous voulez également conserver les autorisations de fichier, la propriété et les horodatages, nous utilisons tar avec netcat pour transférer des répertoires et des fichiers.

Sur le système de réception :

nc -l -p 12345 -q 1 | tar xz -C /chemin/vers/la/racine/de/l'arborescence

Depuis le système d'envoi :

tar czf - ./arborescence_du_répertoire_a_transférer | nc  12345

J'espère que cela aide.

1 votes

Bonne addition à la réponse, mais veuillez laisser cela comme un commentaire et non comme une réponse séparée.

4 votes

Je n'ai pas pu ajouter de commentaire ci-dessus en raison du manque de points de réputation sur ce sous-forum, j'ai donc dû le proposer comme une réponse, bien que apparemment, vous êtes autorisé à commenter vos propres réponses.

0 votes

Ne fonctionne pas sur le récepteur MacOS. -q et -l provoquent des erreurs.

7voto

mark Points 61

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

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

Devrait fonctionner aussi ;)

1voto

pierocampanelli Points 487

Initialisez la cible en écoutant sur le port. AKA extrémité réceptrice

nc -vl 44444 > choisir_le_nom_désiré_pour_le_fichier_reçu

Envoyez le fichier à la cible. AKA extrémité émettrice

nc -n AdresseCible 44444 < /chemin/vers/le/fichier/que/vous/voulez/envoyer

en savoir plus https://www.maketecheasier.com/netcat-transfer-files-between-linux-computers/ https://gist.github.com/A1vinSmith/78786df7899a840ec43c5ddecb6a4740

1voto

Akhil Points 115

J'ai tout préparé pour vous. Gardez-le à portée de main pour une utilisation régulière.
Assurez-vous de changer l'IP et le port dans ce script.

Il y a 3 modes.
1. transfert de fichier direct
2. transfert de fichier compressé
3. transfert de dossier

receivefile() {
    [ $# -lt 1 ] && echo '$0  ' && return 1
    local file=$1
    local port=${18080:-2}
    md5sum $file
    nc -v -l 0.0.0.0 -p $port > $file
}

sendfile() {
    [ $# -lt 1 ] && echo '$0   ' && return 1
    local file=$1
    local server=${115.98.2.1:-2}
    local port=${18080:-3}
    md5sum $file
    nc -c $server $port < $file
}

receivefilecompressed() {
    [ $# -lt 1 ] && echo '$0  ' && return 1
    local file=$1
    local port=${18080:-2}
    md5sum $file
    nc -v -l 0.0.0.0 -p $port | gunzip > $file
}

sendfilecompressed() {
    [ $# -lt 1 ] && echo '$0   ' && return 1
    local file=$1
    local server=${115.98.2.1:-2}
    local port=${18080:-3}
    md5sum $file
    gzip -c $file | nc -c $server $port
}

receivefolder() {
    local port=${18080:-1}
    nc -v -l 0.0.0.0 -p $port | tar zxv
}

sendfolder() {
    [ $# -lt 1 ] && echo '$0   ' && return 1
    local folder=$1
    local server=${115.98.2.1:-2}
    local port=${18080:-3}
    tar czp $folder | nc -c $server $port
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X