J'ai un appareil d'assistance en cours d'exécution Linux OS
. Je peux connecter cet appareil via une session telnet. Il y a des fichiers dans l'appareil que je voudrais télécharger et télécharger avec de nouveaux fichiers. Comment puis je faire ça? J'ai très peu de connaissances sur Linux OS. Pourriez-vous s'il vous plaît aider!
Cela dépend des outils installés sur le périphérique client/pris en charge par le noyau.
Méthodes possibles pour le transfert de fichiers (non ordonné):
netcat
ou socat
ou avec bash
et/dev/tcpwget
ou curl
depuis un serveur webLisez Transfert de fichier simple et Comment obtenir un fichier sur un hôte alors que vous n'avez qu'une console série? pour plus de possibilités.
desktop.jpg
de l'appareil à votre PC avec la méthode netcat/nc:Sur votre PC, désactivez temporairement (ou reconfigurez si possible) tout pare-feu et exécutez
netcat -l -p 10000 > desktop.jpg
et sur l'appareil
busybox nc A.B.C.D -p 10000 < desktop.jpg
où vous devez remplacer A.B.C.D par l'adresse IP de votre PC. Dès que le transfert a réussi, le processus netcat sur votre PC devrait s'arrêter automatiquement. Sinon, quelque chose ne va pas et vous pouvez l'arrêter avec Ctrl+C
Pour l'autre sens, échangez simplement <
et >
sur les deux côtés. Faites d'abord une sauvegarde de l'original desktop.jpg
(cp desktop.jpg desktop_orig.jpg
).
Je n'ai aucun ssh ou ftp (ou etc.) sur l'appareil.
Donc, je fais ensuite:
telnet a.b.c.d | tee telnet.log
cat file.txt
telnet.log
de la corbeilleIl devrait être facile d'écrire un utilitaire pour télécharger/télécharger un fichier sur telnet
Je viens de télécharger un fichier de firmware ~ 7 Kb) sur un système embarqué Linux basé sur BusyBox via le port série.
Pas de réseau, pas d'utilitaires de transfert de fichiers; pas d'utilitaires Base64 ou quoi que ce soit d'utile à distance sur l'appareil.
Sur l'hôte, j'ai encodé trivialement un firmware au format suivant; une sorte de vidage hexadécimal composé de littéraux Shell combinés avec des commandes printf
:
printf "\xDE\xAD\xBE\xEF\x...\xF0"
printf "\xCA\xFE\x33\xE1\x...\xD3"
essentiellement des commandes Shell printf
avec des séquences d'échappement \x
que printf
interprète. Sur l'appareil, j'ai fait:
device $ cat > firmware.sh
puis utilisé le fichier ASCII send (minicom
)Ctrl-AS) pour envoyer ce fichier à l'hôte. J'aurais pu simplement utiliser le copier-coller, car la quantité de données est petite.
Ensuite, marqué exécutable et exécuté le script printf
:
device $ chmod a+x firmware.sh
device $ ./firmware.sh > firmware.bin
Vérifiez à l'aide de md5sum
De BusyBox que la somme de contrôle firmware.bin
Sur le périphérique correspond à l'image du micrologiciel d'origine sur l'hôte.
P.S. La syntaxe de guillemet double Shell passe par \x
Textuellement car ce n'est pas une séquence d'échappement reconnue; nous n'avons donc pas à doubler les barres obliques inverses.
Essayez avec la commande rcp
.
Utilisation man rcp
pour plus d'informations si vous souhaitez automatiser les transferts.
Au fait, vous savez que c'est très peu sûr, non?
@jofel et tous les autres, Merci beaucoup pour votre aimable assistance. Je pense que l'appareil a un système d'exploitation personnalisé installé car il ne reconnaît que certaines commandes Linux spécifiques. netcat n'est pas reconnu par l'appareil. Cependant, aujourd'hui, j'ai réussi à transférer le fichier à l'aide de la commande tftp. J'ai réussi à remplacer le fichier desktop.jpg par cette commande. Ce que j'ai fait, c'est créer un serveur tftp sur un système de fenêtres. connectez-vous via telnet sur l'appareil et exécutez ces commandes:
télécharger le fichier tftp -l -p tftp -l desktop.jpg - 192.168.0.249 69
télécharger le fichier tftp -l desktop.jpg -g 192.168.0.249 69
Je l'ai fait maintenant par ces méthodes:
Créez un serveur ftp (en installant solerwinds) sur le système de fenêtres. connectez-vous via telnet sur l'appareil et exécutez ces commandes:
Pour télécharger un fichier:
tftp -l <FileName> -p <TFTP Server IP> <Port No of TFTP>
Exemple:
tftp -l desktop.jpg -p 192.168.0.249 69
ou pour télécharger un fichier:
tftp -l <FileName> -g <TFTP Server IP> <Port No of TFTP>
Exemple:
tftp -l desktop.jpg -g 192.168.0.249 69
l'emplacement par défaut du fichier tftp est C:\TFTP-Root