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

Shell et commandes GNU Discussion :

Comment capturer le flux d'un telnet dans un fichier.txt?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 34
    Par défaut Comment capturer le flux d'un telnet dans un fichier.txt?
    Bonjour,
    Ce telnet me sert à me connecter à mes switch reseau et à en récupérer la conf.
    Jusqu'à maintenant j'utilisais une commande du switch copy startup-config tftp xxx.xxx.xxx.xxx tel.txt dans un script bash avec expect.
    Malheureusement, certaine lignes de commande sont incomplètes (notamment les clées radius que l'on peut voir en faisant un "sh run" mais qui ne sont pas transmise par la commande du switch copy tftp).

    Le but de la manip est donc de me connecter en telnet => lancer un "sh run" en capturant le flux dans un fichier afin d'avoir toutes les commandes complètes.

    Avec la commande telnet xxx.xxx.xxx.xxx | tee tel2.txt sans passer par un expect, j'obtiens presque ce que je veut sauf que j'ai en même temps tout un tas de caractère comme "^M^" en debut de ligne, "^M^[[2k" pour des saut de ligne, ou bien de longues lignes composées de chaines de caractère tel du type: "^M^[[2K^[[22;1H^[[^[[24..............." avec parfois du texte utile au milieu. Pourtant en faisant un cat ou more il ne m'affiche pas tous ces caractères...

    Donc je cherche su solution pour capturer le texte d'un telnet proprement ou bien pouvoir nettoyer les fichier que je récupère avec telnet xxx.xxx.xxx.xxx | tee tel2.txt.

    Le deuxième soucis c'est que quand je combine telnet xxx.xxx.xxx.xxx | tee tel2.txt avec expect je ressort un fichier texte en binaire et donc complètement illisible.

    Est-ce que c'est un format de texte à changer pour faire disparaitre ces chaine de caractère? J'ai essayé dos2unix mais j'ai un message d'erreur du style: dos2unix: Skipping binary file tel2.txt

    Y a til un autre moyen de capturer l'affichage d'un telnet?

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 362
    Par défaut
    Bonjour,

    Peut-on avoir un exemple de fichier expect ?
    Car j'ai l'impression, aux vues de tes explications, que tu n'utilises pas le expect de la manière la plus standart.
    En aucun cas, tu devrais faire un telnet ... | tee ...
    Toute la partie telnet doit ce faire depuis ton expect et ensuite tu peux faire:
    fichier.exp | tee ....
    Ensuite, comment comptes tu exploiter ton fichier expect ?
    Depuis une crontab ?
    Si oui, il faut prendre en considération que tu n'auras pas de tty d'alloué depuis la crontab et donc ton format de sortie (je parle principalement de la forme comme le nombre de caractère par ligne) risque d'être différent par rapport à une execution en console...

  3. #3
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Le problème semble être du à des séquences escape présentes dans l'affichage.

    Une méthode simple pour ne pas les avoir à l'écran est d'utiliser la commande:

    Puis éventuellement de faire du copier coller à la souris pour avoir une trace "propre".

    Sinon, un petit coup de sed ou équivalent devrait le faire.

  4. #4
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 34
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Le problème semble être du à des séquences escape présentes dans l'affichage.

    Une méthode simple pour ne pas les avoir à l'écran est d'utiliser la commande:

    Puis éventuellement de faire du copier coller à la souris pour avoir une trace "propre".

    Sinon, un petit coup de sed ou équivalent devrait le faire.
    Sauf que j'ai 60 conf à traiter comme ça regulièrement...

    Less -R semble afficher quand même du mieux mais il en reste encore...
    Au lieu de faire du copier coller ou pourrait pas récupérer le flux filtré par less -R dans un fichier? j'ai essayé less -R tel2.txt>tel3.txt mais dans tel3.txt on retrouve tous les caractères...

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    pourquoi pas un simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    telnet()
    {
     .....
    }
     
    screen -dmS telnetlog fonctiontelnet > log.log &

  6. #6
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 34
    Par défaut
    Citation Envoyé par frp31 Voir le message
    pourquoi pas un simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    telnet()
    {
     .....
    }
     
    screen -dmS telnetlog fonctiontelnet > log.log &
    Pourrais-tu m'expliquer ce que c'est sensé faire?

    que faut-il mette à la place des "....."? le contenu de mon premier script?

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 665
    Par défaut
    rien à voir avec le sujet : mettre des extensions à des scripts n'est déjà pas utile, mais mettre des extensions .sh à des scripts expect

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    declare -a switches
    switches=( 25 {101..103} {106..109} {111..113} {115..117} {119..125} 128 132 {137..141} {143..148} {152..165} {168..173} 175 199 201 202 228 )
    for host in "${switches[@]}"
       do  
       echo "$host"
       ./get_conf.expect "$host"
    done
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 34
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    rien à voir avec le sujet : mettre des extensions à des scripts n'est déjà pas utile, mais mettre des extensions .sh à des scripts expect

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
     
    declare -a switches
    switches=( 25 {101..103} {106..109} {111..113} {115..117} {119..125} 128 132 {137..141} {143..148} {152..165} {168..173} 175 199 201 202 228 )
    for host in "${switches[@]}"
       do  
       echo "$host"
       ./get_conf.expect "$host"
    done
    effectivement

  9. #9
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par lsda26 Voir le message
    Less -R semble afficher quand même du mieux mais il en reste encore...
    Au lieu de faire du copier coller ou pourrait pas récupérer le flux filtré par less -R dans un fichier? j'ai essayé less -R tel2.txt>tel3.txt mais dans tel3.txt on retrouve tous les caractères...
    Non, less -R ne filtre pas le flux, c'est le contraire, il le laisse tel quel et c'est ton émulateur de terminal qui interprète les séquences.

    Tu peux essayer deux choses:

    Lancer ton appli en indiquant que ton terminal ne reconnait pas les séquences ansi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TERM=dumb ./conf_switch_expect.expect "$host"
    Si l'appli en face est bien codée, tu n'auras plus de cochonneries en sortie (sauf les ^M mais un dos2unix devrait les enlever)

    Sinon, un script de ce style script devrait partiellement (ou totalement si tu as de la chance) nettoyer tes fichiers:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sed -r -e "s/\o033\][0-9];.*\o07//g" \
        -e "s/\o015//g" \
        -e "s/.\010//g" \
        -e "s/\o033[P=]//g" \
        -e "s/\o033\[>c//g" \
        -e "s/\o033\[\?[0-9]{1,2}(;[0-9]{1,2})?[hlJ]//g" \
        -e "s/\o033\[([0-9]{1,2}(;[0-9]{1,2})?)?[mrKHJC]//g"

  10. #10
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 34
    Par défaut
    voici le contenu actuel de mes scripts:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
    #Il faut installer le paquet "expect": apt-get install expect
     
    ListSwitch="25 $(seq 101 103) $(seq 106 109) $(seq 111 113) $(seq 115 117) $(seq 119 125) 128 132 $(seq 137 141) $(seq 143 148) $(seq 152 165) $(seq 168 173) 175 199 201 202 228"
    for host in $(echo "$ListSwitch")
    	do
    	echo "$host"
    	./conf_switch_expect.sh "$host"
    done
    voilà le script "conf_switch_expect.sh":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/expect -f
    set host [lindex $argv 0]
    spawn telnet "xxx.xxx.xxx.$host"
    	expect "Username:" {
    	send "admin\r"
    	expect "Password:"
    	send "MonPassw0rd\r"
    	expect "#"
    	send "copy startup-config tftp yyy.yyy.yyy.yyy 161.$host.txt\r"
    	expect "#"
    	send "exit\r"
    	send "exit\r"
    	send "y\r"}
    Si ça peut t-aider...

    Je me suis dit qu'en ajoutant | tee $host.txt j'arriverai à capturer le flux mais apparement pas dans un format compréhenssible avec vi. il me dit que c'est du binaire.

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/07/2013, 18h43
  2. Comment capturer plusieurs flux vidéo ?
    Par silesio dans le forum OpenCV
    Réponses: 4
    Dernier message: 17/03/2012, 12h29
  3. Réponses: 3
    Dernier message: 08/10/2010, 12h42
  4. comment remplacer un caractere par un autre dans un fichier txt
    Par uzumaki_naruto dans le forum Langage
    Réponses: 6
    Dernier message: 24/07/2006, 13h33
  5. Réponses: 4
    Dernier message: 12/07/2006, 20h54

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