Newsgroup: it.comp.reti.cisco
Titolo: expect per configurare un router

Saluti a tutti, e' la prima volta che scrivo qui.
Avrei una domanda relativa al tool expect, di cui ho sentito parlare in
giro. E' possibile utilizzando tale tool (all'interno di un modulo
applicativo scritto in perl o C) mandare ad un router una serie di comandi
IOS di configurazione ed effettuare il parsing del messaggio di risposta
del router (per catturare eventuali errori)? Oppure per tale scopo sarebbe
meglio fare tutto via SNMP?
Grazie in anticipo a chi rispondera',
  Luca
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Grazie in anticipo a chi rispondera',
Luca, 
e' possibile. Io facevo il netadmin per un piccolo ISP che usava due
2511 come access servers. Volevamo monitorare l'uso delle porte in
modo da evidenziare problemi. Per fare cio' scrissi un routine expect
che si connetteva al router faceva uno "show user" e passava l'output
a uno script per che evidenziava i tempi di connessione per porta.
Lo script girava una volta per minuto.
Ciao


L'Expect è un tool basato sul TCL (Tool Command Language) ed è molto diffuso
in ambiente UNIX, ma esistono implementazioni anche per gli ambienti Linux e
Windows. L'Expect consente l'automazione di programmi interattivi come
Telnet, FTP ed rlogin.
Il funzionamento dell'Expect si può schematizzare nel modo seguente:
·        legge i comandi da un file script
·        manda il testo dallo script al processo interattivo
·        salva ogni carattere restituito dal processo interattivo
·        rimane in attesa di una stringa di caratteri impostata dall'utente,
che di solito corrisponde al prompt del programma interattivo.
Lo script Expect è in grado di discriminare tra stringhe differenti e può
eseguire dei salti condizionati in base a quanto ricevuto dal processo
interattivo. In questo modo è possibile implementare negli script anche
funzioni di discreta complessità.
Di seguito riporto come esempio il listato di alcuni script in linguaggio
Expect che ho testato su un PacketShaper della Packeteer (mi perdonerete, ma
non si tratta di un apparato Cisco..... però penso che in questo caso sia
poco importante.... ) per variare dinamicamente la configurazione dei
profili di traffico tramite un programmino che monitorava il carico di un
link di rete. Questi riportati di seguito sono degli script di esempio che
usavo per fare delle prove, implementando alcune semplici funzioni di
controllo remoto tramite Telnet.
Funzione ADD_Policy: aggiunge una nuova policy ad una classe di traffico
# ADD_Policy
#
#  Script per il controllo remoto del Packeteer PacketShaper
#
#
#  Aggiunge una policy
#  alla classe di traffico MyClass
#
set PacketShaperIP "10.10.100.70"
set PacketShaper_pwd "touchpwd="
set Policy_guar_lo_Bps "200K"
set Policy_guar_hi_Bps "300K"
set Policy_prio "5"
spawn telnet $PacketShaperIP
  expect {
    "Password: " {}
      exit;
  }
  send "$PacketShaper_pwd\r"
  expect {"PacketShaper# "}
  send " policy apply rate MyClass $Policy_guar_lo_Bps $Policy_guar_hi_Bps
$Policy_prio automatic\r"
  expect {"PacketShaper# "}
  send "policy show MyClass\r"
  expect {"PacketShaper# "}
  send "exit\r"
exit
Funzione DEL_Policy: rimuove una policy da una classe di traffico
# DEL_Policy
#
#  Script per il controllo remoto del Packeteer PacketShaper
#
#  Effettua la rimozione di una policy
#  dalla classe di traffico MyClass
#
set PacketShaperIP "10.10.100.70"
set PacketShaper_pwd  "touchpwd="
spawn telnet $PacketShaperIP
      expect {
          "Password: " {}
               exit;
      }
      send "$PacketShaper_pwd\r"
      expect {"PacketShaper# "}
      send "policy remove MyClass\r"
      expect {"PacketShaper# "}
send "exit\r"
exit
Funzione SH_Traffic: Mostra informazioni relative alla banda utilizzata
dalle partizioni attive
# SH_Traffic
#
#  Script per il controllo remoto del Packeteer PacketShaper
#
#  Mostra informazioni relative alla banda
#  utilizzata dalle partizioni attive
#
set PacketShaperIP "10.10.100.70"
set PacketShaper_pwd  "touchpwd="
spawn telnet $PacketShaperIP
      expect {
          "Password: " {}
               exit;
      }
      send "$PacketShaper_pwd\r"
      expect {"PacketShaper# "}
      send "traffic bandwidth\r"
      expect {"PacketShaper# "}
send "exit\r"
exit
Gli script di esempio sono molto semplici e si commentano da soli.
Da essi puoi desumere che il tool expect, pur essendo abbastanza semplice,
permette di implementare applicazione anche di una certa complessità. Con
l'expect puoi controllare qualsiasi apparato che ammetta il controllo
tramite telnet.
Spero che queste informazioni ti risultino utili.
Ciao
Mike

 Spero che queste informazioni ti risultino utili.
Altroche'! Ringrazio sia te che Fabio, ora mi guardo bene il tuo esempio
ma penso di avere capito il principio. Grazie ancora,
