2012-07-04 2 views
1

Je suis très proche de terminer une application TCL/TK qui se connecte à un point d'accès Cisco via une connexion série (RS232} et lui donne une adresse IP (très basique)TCL/Expect Scripting - Utilisation d'une instruction conditionnelle pour tenter un mot de passe de connexion secondaire

Cependant, je voudrais que mon script pour tenter un mot de passe secondaire si le premier ne

Voici comment Cisco CLI se comporte avec une connexion série lorsque le mot de passe incorrect est entré 3 fois (Aucun utilisateur Le nom est requis, seul le mot de passe vous est demandé)

Password: 
Password: 
Password: 
% Bad secrets 

Encore une fois, si le mot de passe par défaut de "Cisco" ne fonctionne pas, j'ai besoin du script pour essayer le mot de passe secondaire de "Cisco2"

Ce qui suit est ma tentative infructueuse la plus récente à ce problème.

expect "*>" {send "en\r"} 

    expect { 
    "Password:" {send "Cisco\r"; exp_continue} 
    "Password:" {send "Cisco2\r"; exp_continue} 
    } 

    expect "*#" {send "config t\r"} 

Merci d'avance pour l'aide.

Répondre

1

La façon la plus simple est d'avoir une liste de mots de passe pour essayer que vous franchissez:

set passwords {"Cisco" "Cisco2"} 
set idx 0 
expect "*>" 
send "en\r" 
expect { 
    "Password:" { 
     send "[lindex $passwords $idx]\r" 
     incr idx 
     exp_continue; # Continue to wait for the "after" prompt 
    } 
    "*#" {send "config t\r"} 
} 

L'astuce est que vous devez aussiexpect la chose qui vient après, de sorte que vous n » t se rabattre sur les délais d'attente ou des choses comme ça. (Eh bien, en supposant que vous ne voulez pas de délais d'attente.Si vous le faites, allez-y droit!) C'est parce expect attend tous ses clauses de match simultanément. Dans votre code buggy, vous aviez deux clauses avec le même texte de correspondance, donc c'était toujours en choisissant le premier (IIRC, si plusieurs clauses correspondent au point courant, la première branche possible est celle choisie).

Questions connexes