Domanda

Ho bisogno di automatizzare la registrazione in una sessione Telnet utilizzando aspetto , ma ho bisogno di prendersi cura di più password per lo stesso nome utente.

Ecco il flusso ho bisogno di creare:

  1. Apri sessione Telnet a un IP
  2. Invia nome utente
  3. Invia password
  4. Password errata? Invia di nuovo lo stesso nome utente, quindi una password diversa
  5. Dovrebbe essere loggati con successo a questo punto ...

Per quello che vale, ecco quello che ho finora:

#!/usr/bin/expect
spawn telnet 192.168.40.100
expect "login:"
send "spongebob\r"
expect "password:"
send "squarepants\r"
expect "login incorrect" {
  expect "login:"
  send "spongebob\r"
  expect "password:"
  send "rhombuspants\r"
}
expect "prompt\>" {
  send_user "success!\r"
}
send "blah...blah...blah\r"

Inutile dire che questo non funziona, e né sembra molto carina. Dalle mie avventure con Google aspettarsi sembra essere una sorta di dark-art. Grazie in anticipo a tutti coloro che per l'assistenza in materia!

Altri suggerimenti

Con un po 'di colpire ho trovato una soluzione. Risulta che si aspettano utilizza una sintassi TCL che io non sono affatto a conoscenza:

#!/usr/bin/expect
set pass(0) "squarepants"
set pass(1) "rhombuspants"
set pass(2) "trapezoidpants"
set count 0
set prompt "> "
spawn telnet 192.168.40.100
expect {
  "$prompt" {
    send_user "successfully logged in!\r"
  }
  "password:" {
    send "$pass($count)\r"
    exp_continue
  }
  "login incorrect" {
    incr count
    exp_continue
  }
  "username:" {
    send "spongebob\r"
    exp_continue
  }
}
send "command1\r"
expect "$prompt"
send "command2\r"
expect "$prompt"
send "exit\r"
expect eof
exit

Speriamo che questo sarà utile per gli altri.

Se conoscete gli ID utente e le password, allora si dovrebbe anche sapere che userid / password coppie sono allineati con cui i sistemi. Penso che sarebbe meglio mantenere una mappa delle quali userid / password di coppia va con quale sistema poi estrarre tali informazioni e utilizzare semplicemente quella corretta.

- visto che ovviamente non ti piace il mio consiglio, allora vi suggerisco di guardare al wikipedia pagina e attuare una procedura che restituisce 0 in caso di successo e 1 se i tempi di aspettativa fuori. Che vi permetterà di rilevare quando la password fornita fallito - i tempi di aspettativa tempestive fuori - e riprovare. Se questo è utile, è possibile rimuovere il tuo downvote ora che ho modificato il messaggio.

In retrospettiva, si sarebbe probabilmente vuole fare questo in collaborazione con la mappa in ogni caso dal momento che ci si vuole rilevare un login fallito se la password è stata modificata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top