IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Probleme TN.read / TN.write avec la bibliotheque telnetlib


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut Probleme TN.read / TN.write avec la bibliotheque telnetlib
    Bonjour

    Je suis débutant en developpement Python (et autre langage d'ailleurs) et je bloque sur un simple script en Python qui effectuerait un telnet sur un matériel genre routeur
    ou switch Cisco pour simplement y déposer un fichier en TFTP. Tout commence bien jusqu'au moment de "discuter" avec mon matériel "copy
    tftp flash". Le read until intercepte bien la premiere ligne du telnet qui me demande l'adresse de mon serveur TFTP mais ensuite, quand il
    demande le nom du fichier, il valide sans même prendre en compte le contenu de la variable que je lui envoie (MOH dans mon script ci dessous):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    import telnetlib
    import time
     
    compteur_ligne = 0
    SRST = []
    compteur_SRST = 0
     
    with open("fichier_config.txt","r") as fichier_config:
        for ligne_fichier in fichier_config:
            if compteur_ligne == 8:
                MOH = ligne_fichier
            if compteur_ligne == 11:
                IPTFTP = ligne_fichier
            if compteur_ligne >= 14:
                SRST.append(ligne_fichier)
            compteur_ligne += 1
     
    for val in SRST:
        Host,ID,Pass,EnPass = val.split(";")
        print ("Telnet en cours sur " + Host)
        TN = telnetlib.Telnet(Host)
        TN.read_until(b"Username: ")
        TN.write(ID.encode('utf8') + b"\n")
        TN.read_until(b"Password:")
        TN.write(Pass.encode('utf8') + b"\n")
        TN.read_until(b">")
        TN.write(b"EN\n")
        TN.read_until(b"Password: ")
        TN.write(EnPass.encode('utf8') + b"\n")
        TN.read_until(b"#")
        print ("Loggué correctement en tant que " + ID)
        print ("Execution du TFTP en cours...")
        TN.write(b"copy tftp: flash:\n")
        TN.read_until(b"[]? ")
        TN.write(IPTFTP.encode('utf8') + b"\n")
        time.sleep(1)
        TN.read_until(b"Source filename []? ")
        TN.write(MOH.encode('utf8') + b"\n")
        time.sleep(1)
        #TN.read_until(b"]? ")
     
        TN.write(MOH.encode('utf8') + b"\n")
        time.sleep(1)
        retour = TN.read_very_eager()
        print(retour)


    Voici ce que j'ai quand je lance la commande manuellement:
    Switch_Bricol_Ced#copy tftp flash
    Address or name of remote host []? 10.206.54.65
    Source filename []? TEXT.txt
    Destination filename [TEXT.txt]?


    Voici ce que me retourne le TN.read_very_eager en fin de script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b'\r\n?File name not specified\r\n%Error parsing filename (Unknown error 0)\r\nSwitch_Bricol_Ced#TEST.txt\r\nTranslating "TEST.txt"...domain server (255.255.255.255)'


    on voit bien qu'il envoie l'erreur File name not specified donc il doit envoyer une valeur à blanc ou autre chose, la valeur MOH contient bien la bonne valeur, je l'ai affiché
    avec un simple print....
    Je pense que j'ai un probleme d'encoding mais c'est ultra galère à gérer le coding/decoding

    Help me please!

    Thanks in advance!

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Salut,

    Intuitivement, vous voyez bien que c'est à la ligne 34 que çà dérape: TN.read_until(b"[]? ")D'ailleurs, si vous regardez votre exemple, çà devrait recevoir "Address or name of remote host []?"...
    Quoi qu'il en soit, si vous ne savez pas trop, lancer la console Python pour passer les commandes "à la main" avec un timeout (pour voir ce que çà à récupéré au bout d'un certain temps) est une bonne méthode pour mettre au point ce genre de code.

    Mais, je ne comprends pas pourquoi vous posez la question dans un forum Python: un forum CISCO serait bien plus adapté car il faut pouvoir avoir un équipement CISCO pour jouer à faire cela (quelque soit le langage) et bien connaître les commandes CISCO. Par exemple pourquoi se lancer dans un dialogue à N lignes (bien commode lorsque un utilisateur tape les commandes derrière le clavier) alors que "programmatiquement", vous pourriez envoyer le tout en une seule ligne copy tftp://10.206.54.65/TEST.txt flash:TEST.txt.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut
    Bonjour et merci de votre reponse

    En fait je suis admin réseau, j'ai donc un paquet de matériel de ce genre dont une que je me suis mis en machine de bricol
    Pas bete la méthode, j'ai modifié mon script de la sorte ce qui donne ça:

    commande = "copy tftp://" + IPTFTP + " flash:" + MOH
    print(commande)
    TN.write(commande)

    ça fonctionne pas MAIS le print m'affiche ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    copy tftp://10.206.54.65
     flash:TEST.txt
    clairement, y'a un caractère qui envoie un retour chariot au bout de chaque variable?!? mais pourquoi?
    comment le supprimer?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Citation Envoyé par cedrik76 Voir le message
    clairement, y'a un caractère qui envoie un retour chariot au bout de chaque variable?!? mais pourquoi?
    comment le supprimer?
    C'est ainsi que fonctionne l'instruction for ligne_fichier in fichier_config: de la ligne 9.
    Pour le supprimer, il faut apprendre les méthodes sur les chaînes de caractères comme .rstrip (où avoir ouvert un bon tuto. qui vous apprend tout çà) ou écrire son code autrement.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut
    superbe! merci pour l'aide! je vais creuser ça!

    mais pour le moment, il est l'heure de préparer les fêtes!

    alors bonnes fêtes à tous!

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut
    Bonjour wiztricks

    Merci pour l'astuce! ça fonctionne comme ça!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    commande = "copy tftp://" + IPTFTP + "/" + MOH + " flash:" + MOH
    TN.write(commande.encode('utf8') + b"\n")
    il manquait juste l'envoi du retour chariot! (b"\n")

    Merci encore!

Discussions similaires

  1. Quoi d'autre que paradox
    Par tarmo57 dans le forum Bases de données
    Réponses: 13
    Dernier message: 09/01/2013, 15h28
  2. Que me conseilleriez-vous pour faire un RPG ?
    Par carthageg dans le forum Gestion de projet
    Réponses: 1
    Dernier message: 12/01/2012, 21h39
  3. Réponses: 1
    Dernier message: 20/04/2010, 13h58
  4. Que dois-je installer pour faire tourner mon application
    Par Emcy dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 26/06/2009, 13h04
  5. Que faut il utiliser pour faire des recherches dans LDAP?
    Par kabouns dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 04/08/2006, 15h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo