Forum Programmation.shell code de retour FTP

Posté par  .
Étiquettes : aucune
0
13
avr.
2006
comment savoir quelle code de retour une connection ftp nous r'envoye car je vourdrais,afficher un message du style "erreur de connection.Ip,login ou mot de passe invalide ...."
avant bien sur de faire la connection .... (s'est tout simplement pour tester 1-si il y a un serveur 2-si le login est bon et 3-si le pass est correct ..
Merci
  • # RFC

    Posté par  . Évalué à 2.

    voici l'adresse de la RFC qui decris le protocole FTP
    http://www.faqs.org/rfcs/rfc959.html
    tu va y trouver tout les codes retours possibles et les explication qui vont avec
    Mais il me semble que la recommendation (je l'ai lue il y a longtemps) precise de ne pas renvoyer d'erreur sur login ou mots de passe incorrecte mais de renvoyer une erreur commune login/password incorrecte afin d'eviter que par un programme on puisse deviner un login puis ensuite d'attaquer le password.
    bonne lecture
  • # Utiliser les variables d'environnement

    Posté par  . Évalué à 2.

    En shell, tu peux utiliser la variable $? qui contient le code retour de la commande précedemment exécutée.

    Il faut faire attention car certaines commandes ne retournent pas forcément un code retour, il faut alors dans ce cas scruter les logs.

    Typiquement pour du ftp, je redirige les logs dans un fichier ou je pipe ça avec un grep, pour rechercher une ligne "Transfert OK", si je la trouve c'est bon, si je la trouve pas, pas bon.

    Pour savoir s'il y a un serveur tu peux vérifier beaucoup de choses, récupérer son IP depuis un DNS, faire un ping.. sinon, plus simple tu fais juste une connexion FTP et tu sors tout de suite, le mieux est d'analyser les logs et de faire des "if" en gérant les différents cas d'erreurs.

    Sinon pour info, généralement sous Unix quand une commande retourne quelque chose différent de 0, c'est qu'il y a eu un problème quelque part...

    Voilà mes 2 cents...
  • # Quel interpréteur ?

    Posté par  . Évalué à 1.

    Bonjour,

    Il serait intéressant de savoir quel interpréteur shell et quel client FTP tu utilises. As-tu la possibilité d'en changer ?

    Si tu utilises la commande ftp "standard" avec les commandes à exécuter données sur l'entrée standard et les mots de passe dans le fichier ~/.netrc, la gestion des erreurs est particulièrement fastidieuse...
    En effet, le code retour du ftp rique d'être systématiquement 0, même si une erreur de login ou de transfert s'est produite. En fonction des versions du client et des options, l'exécution des commandes données en entrée va continuer jusqu'au bout (quit, bye ou CTRL-D) ou s'arrêter à la première erreur. Le contrôle de la bonne exécution des transferts peut alors se faire en analysant les logs sur la sortie standard et/ou la sortie d'erreur et en comptant éventuellement le nombre de "Transfer complete" si plusieurs fichiers sont transférés. Si en plus, tu veux savoir ce qui a planté, ça devient vraiment galère...

    Mais bon, il y a quand même des solutions. Il doit bien exister des clients FTP permettant d'exécuter les commandes FTP une à une et de tester un code retour significatif, mais j'avoue ne pas en connaître.

    En revanche, si tu as la possibilité de choisir l'interpéteur shell utilisé, penche-toi sur ZSH qui inclut (en module chargeable ou via une option de compilation) un client FTP. Tu exécutes alors tes commandes FTP une par une ("zftp open host user password", "zftp get fichier", ...) et tu peux à chaque commande tester le code retour.
    [bash est installé en standard sur les distributions Linux, mais zsh mérite vraiment d'être (re)connu !]

    Autre possibilité, si tu n'est pas hostile à d'autres langages : programme tes connexions et transferts FTP avec des langages qui offrent un client FTP (nativement ou via un module). En fonction de tes connaissances et de tes gouts tu devrais pouvoir choisir ce qui te convient le plus (Perl, disponible partout en standard, python ou la plupart des autres langages interprétés conviendront).

    Bon courage,
    JJD
    • [^] # Re: Quel interpréteur ?

      Posté par  . Évalué à 1.

      pour l'interpréteur c'est du bash et je reste sur des commandes standard ...
      ce que je veut c'est affiché "erreur d'adresse IP ou de login ou de mot de passe"aprés avoir fait le test ...
      je suis en train de testé avec la condition si (IF) "normal ;-)"
      et des commandes "ping -c 1"ou"netstat"avec leurs code de retour mais j'ai pas ce que je veut ....
      • [^] # Re: Quel interpréteur ?

        Posté par  . Évalué à 1.

        Il faut faire attention avec les résultats des commandes comme le ping : il est possible qu'un firewall bloque ces requêtes alors même que le serveur est joignable en FTP. Par ailleurs, le netstat ne te donneras un résultat pertinent qu'à partir du moment où la connexion est établie (puisque tu l'exécutes sur le client).
        Il faudrait que tu détailles un peu la façon dont tu exécutes ton FTP. Quand tu écris que tu utilises des commandes "standard" qu'est ce que cela signifie ? Pour ma part, j'ai compris que tu utilises la commande ftp comme cela :
        ftp serveur <fichier_de_commande
        ou bien comme ça :
        ftp serveur <<FIN
        commande1
        ...
        commanden
        FIN


        Ceci implique que le user et le mot de passe sont dans le fichier .netrc et que tu n'as pas de contrôle sur le déroulement de la connexion FTP pendant son exécution.
        Le seul moyen que je connaisse alors pour savoir si tout s'est bien passé est de rediriger la sortie de la commande FTP vers un fichier et d'analyser cette log a posteriori (c'est faisable mais bon courage).

        Si tu trouves des moyens plus simples et plus fiables de faire ce que tu veux, explique nous comment tu fais : à une époque j'ai longtemps chercher sans trouver.

        Il faut aussi noter que le terme de "standard" pour ce type de commande peut être ambigu : la commande ftp peut varier d'un Unix à l'autre, d'une distribution Linux à une autre (y compris entre version d'une même distribution) et même en fonction du client ftp "standard" installé...
        Les options d'exécution et le comportement en cas d'erreur peut être différents suivant la machine cliente (sortie di FTP à la première erreur rencontrée ou exécution des commandes jusqu'à la fin, envoi des log d'erreurs sur STDOUT ou STDERR, ...).
        De la même façon, en fonction du serveur FTP sur lequel on se connecte, le texte des messages renvoyés peut varier légèrement (les codes eux sont à peu près standardiser : voir les RFC) : pour un tranfert réussi on peut par exemple avoir "226 Transfer complete." ou "250 Transfer completed successfully.".

        Je pense donc encore que cela vaut la peine de se pencher sur des solutions alternatives comme des langages de scripting incluant un client FTP (zsh, Perl, ...) ou l'utilisation de commandes comme curl (upload et download) ou wget (download seulement mais installé partout).

        A+
        JJD

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.