From: Darby Weaver (ccie.weaver@gmail.com)
Date: Thu Jan 22 2009 - 21:56:03 ARST
Don't "expect" much if you don't ask the right people.... :)
Not a bad purchase at only $399
Lots of freebies:
Jim Marinelli wrote:
> Does anyone know where I can get an SSH application that is a Win32
> console application? I am trying to port an Expect script that I wrote
> on a Linux box to my Win XP laptop using ActiveTcl/Expect. The script
> attempts a Telnet connection to a Cisco devices; if that fails it
> attempts to connect with SSH. I have the script working with the XP
> Telnet program but I donb??t have an SSH console program to use.
I use Msys ssh, and there is also one in Putty.
> Incidentally b?? I had to disable DEP for the telnet program to make it
> work. I used the Windows Application Compatibility Database Tool from
> Microsoft to turn off DEP just for a copy of Telnet that I keep in the
> Tcl directory. I had to do the same thing with ping.
Did you notice this:
http://aspn.activestate.com/ASPN/Mail/Message/expect/3635465
Jeff
And guys... R-A-N-C-I-D... CiscoWorks, and others... get in and under the
covers - never know what you might find there...
Exploring Expect by O'Reilly:
http://my.safaribooksonline.com/9781565920903?portal=ciscopress
#!/usr/local/bin/expect
#
# rtrcfg.exp -- a script to perform mass configuration changes to
# a list of routers using Telnet and Expect
#
#
# Set Behavior
set tftp "172.25.1.1"
set workingdir /home/cisco/rtr
#
puts stdout "Enter user name:"
gets stdin userid
system stty -echo
puts stdout "Enter login password:"
gets stdin vtypasswd
puts stdout "\nEnter enable password:"
gets stdin enablepwd
system stty echo
system "cp $workingdir/NEWCONFIG /tftpboot/NEWCONFIG"
set RTR [open "$workingdir/RTR_LIST" r]
set LOG [open "$workingdir/RESULT" w]
while {[gets $RTR router] != -1} {
if {[ string range $router 0 0 ] != "#"} {
set timeout 10
spawn telnet; expect "telnet>"; send "open $router\n"
expect {
{Username} { send "$userid\r"
expect {
{*Password*} { send "$vtypasswd\r" }
}
}
{Password} { send "$vtypasswd\r" }
timeout { puts $LOG "$router - telnet failed"
close; wait; continue
}
}
expect {
{Password} { puts $LOG "$router - vty login failed"
close; wait; continue
}
{Username} { puts $LOG "$router - vty login failed"
close; wait; continue
}
{>} { puts $LOG "$router - vty login ok" }
timeout { puts $LOG "$router - vty login failed"
close; wait; continue
}
}
send "enable\r"
expect "Password"
send "$enablepwd\r"
#
expect {
{*#} { puts $LOG "$router - enable login ok" }
{*>} { puts $LOG "$router - enable login failed"
close; wait; continue
}
timeout { puts $LOG "$router - enable login failed"
close; wait; continue
}
}
# CMDs
set timeout 30
send "copy tftp://$tftp/NEWCONFIG running-config\r"
expect "running-config"
send "\r"
expect {
{OK} { puts $LOG "$router - TFTP successful"}
timeout { puts $LOG "$router - TFTP failed"
close; wait; continue }
}
send "copy running-config startup-config\r\r\r"
expect {
{OK} { puts $LOG "$router - config saved"}
timeout { puts $LOG "$router - config failed"
close; wait; continue }
}
#CMDs
send "exit\r"; close; wait
}
}
close $RTR; close $LOG
system "rm /tftpboot/NEWCONFIG"
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# ciscocheckpoint
# ciscoconfigure
# ciscoget
# ciscoget.exp
# ciscologin.expect
# cleanconfig
# This archive created: Fri May 3 10:56:52 1991
export PATH; PATH=/bin:$PATH
if test -f 'ciscocheckpoint'
then
echo shar: will not over-write existing file "'ciscocheckpoint'"
else
cat << \SHAR_EOF > 'ciscocheckpoint'
#!/usr/local/bin/expect -f
#
# restart IP accounting statistics
#
# args: ciscoget router passwd enablepasswd
#
set router [index $argv 1]
set password [index $argv 2]
set enablepass [index $argv 3]
proc timedout {args} {
send_user "Expect timed out" $args \n
exit
}
source ciscologin.expect
if {[length $argv] < 4} {
print "Invalid number of arguments\n"
exit
}
send_user \n\n\n
spawn telnet $router
login $enablepass
send clear ip accounting\r
expect *#*
send QUIT\r
expect *Closed*
exit 0
SHAR_EOF
chmod +x 'ciscocheckpoint'
fi # end of overwriting check
if test -f 'ciscoconfigure'
then
echo shar: will not over-write existing file "'ciscoconfigure'"
else
cat << \SHAR_EOF > 'ciscoconfigure'
#!/usr/local/bin/expect -f
#
# Fetch configuration information from the specified cisco router
#
# args: ciscoget router passwd enablepasswd filename
#
set localhost [exec hostname]
set tftpdir /private/tftpboot
set router [index $argv 1]
set password [index $argv 2]
set enablepass [index $argv 3]
set filename [index $argv 4]
proc timedout {args} {
send_user "Expect timed out" $args \n
exit
}
source ciscologin.expect
if {[length $argv] < 5} {
print "Invalid number of arguments\n"
exit
}
send_user \n\n\n
spawn telnet $router
login $enablepass
send configure network\r
expect {*configuration\ file*\?\ } {} \
timeout {timedout waiting for config file prompt}
send network\r
expect {*IP\ address\ of\ remote\ host*\?\ } {} \
timeout {timedout waiting for remote host prompt}
send $localhost
expect {*configuration\ file*?\ } {} \
timeout {timedout waiting for filename prompt}
send ${filename}\r
expect {*Configure\ using*\[confirm\]*} {} \
timeout {timedout waiting for confirm}
send "Y"
expect {*Failed*#} {send_user TFTP get failed\n; exit 1} \
{*OK*#} {send_user TFTP get succeeded\n}
send "write\r"
expect {*\[OK\]*} {} \
timeout {send_user Write failed\n; exit 1}
send QUIT\r
expect *Closed*
exit 0
SHAR_EOF
chmod +x 'ciscoconfigure'
fi # end of overwriting check
if test -f 'ciscoget'
then
echo shar: will not over-write existing file "'ciscoget'"
else
cat << \SHAR_EOF > 'ciscoget'
#!/bin/sh
tftpdir=/private/tftpboot
export tftpdir
ciscoget.exp cschub-gw Password EnablePassword cschub-gw
ciscoget.exp dcs1hub-gw Password EnablePassword dcs1hub-gw
ciscoget.exp dcs2hub-gw Password EnablePassword dcs2hub-gw
ciscoget.exp sdnhub-gw Password EnablePassword sdnhub-gw
ciscoget.exp madhub-gw Password EnablePassword madhub-gw
ciscoget.exp avwhub-gw Password EnablePassword avwhub-gw
ciscoget.exp rchhub-gw Password EnablePassword rchhub-gw
SHAR_EOF
chmod +x 'ciscoget'
fi # end of overwriting check
if test -f 'ciscoget.exp'
then
echo shar: will not over-write existing file "'ciscoget.exp'"
else
cat << \SHAR_EOF > 'ciscoget.exp'
#!/usr/local/bin/expect -f
#
# Fetch configuration information from the specified cisco router
#
# args: ciscoget router passwd enablepasswd filename
#
set localhost [exec hostname]
set tftpdir /private/tftpboot
set archivedir /n/netmap/HUBS/config
set router [index $argv 1]
set password [index $argv 2]
set enablepass [index $argv 3]
set filename [index $argv 4]
proc timedout {args} {
send_user "Expect timed out" $args \n
exit
}
source ciscologin.expect
if {[length $argv] < 5} {
print "Invalid number of arguments\n"
exit
}
spawn telnet $router
login $enablepass
send write network\r
expect {*Remote\ host*\?\ } {} \
timeout {timedout waiting for Remote host prompt}
send ${localhost}
expect {*write*?*} {} \
timeout {timedout waiting for filename prompt}
if {[file ${tftpdir}/${filename} exists]} {
if {[file ${tftpdir}/${filename}.old exists]} {
if {[file ${tftpdir}/${filename}.old isfile] == 0} {
send_user "${tftpdir}/${filename}.old: Not a plain file\n"
exit 1
}
system rm -f ${tftpdir}/${filename}.old
}
system mv -f ${tftpdir}/${filename} ${tftpdir}/${filename}.old
}
system touch ${tftpdir}/${filename}
system chmod 666 ${tftpdir}/${filename}
send ${filename}\r
expect {*Write\ file*\[confirm\]*} {} \
timeout {timed out waiting for confirm}
send "Y"
expect {*Failed*#} {set failed 1; send_user \nTFTP Write failed\n} \
{*OK*#} {set failed 0; send_user \nTFTP Write succeeded\n}
send QUIT\r
if {$failed == 0} {
system cp ${tftpdir}/${filename} ${archivedir}/${filename}
send_user "Saved configuration.. "
}
system cleanconfig ${tftpdir}/${filename}
send_user " cleaned configuration\n"
exit
SHAR_EOF
chmod +x 'ciscoget.exp'
fi # end of overwriting check
if test -f 'ciscologin.expect'
then
echo shar: will not over-write existing file "'ciscologin.expect'"
else
cat << \SHAR_EOF > 'ciscologin.expect'
proc login {args} {
global password
global enablepass
expect {*Password:*} {} \
timeout {timedout waiting for password prompt}
# ugly!
system sleep 1
send ${password}\r
expect {*Password:*} {send_user Bad password\n; exit} \
{*>} {} \
timeout {timedout waiting for login prompt}
if {[length $args]} {
send enable\r
expect {*Password:*} {} \
timeout {timedout waiting for enable password prompt; exit}
# ugly!
system sleep 1
send [index $args 0]\r
expect {*#} {} \
{*Password:*} {send_user Wrong enable password\n; exit} \
timeout {timedout waiting for enabled prompt; exit}
}
}
SHAR_EOF
fi # end of overwriting check
if test -f 'cleanconfig'
then
echo shar: will not over-write existing file "'cleanconfig'"
else
cat << \SHAR_EOF > 'cleanconfig'
#!/usr/bin/perl
$file = $ARGV[0];
$newfile = $file . ".new";
die "No file specified\n" unless $file;
open(CFG, "<$file") || die "Can't open $file\n";
open(NEWCFG, ">$newfile") || die "Can't open $newfile\n";
print NEWCFG <<"EOM";
!
! Note: this file ($file) has had the passwords removed for
! security reasons.
!
EOM
while (<CFG>) {
if (/^(enable-password|password)\s+/) {
print NEWCFG "! $1 CENSORED\n";
next;
}
print NEWCFG;
}
close(CFG);
close(NEWCFG);
rename($newfile, $file) || die "Can't rename $newfile to $file: $!\n";
SHAR_EOF
chmod +x 'cleanconfig'
fi # end of overwriting check
# End of shell archive
exit 0
Look for Matt Crawford of FERMILAB, available from Cisco's ftp.cisco.com.
They're in pub/cisco-expect.shar.
On Thu, Jan 22, 2009 at 4:16 PM, shiran guez <shiranp3@gmail.com> wrote:
> As I say don't "expect" too much :-)
>
>
>
>
> On Thu, Jan 22, 2009 at 7:36 PM, Tyson Scott <tscott@ipexpert.com> wrote:
>
> > testing,
> >
> > I am going to have to do a little defending here ;-) There is nothing
> more
> > simple and powerful than expect in network administration. There is a
> > reason Cisco put TCL on the routers. And expect is an
> extension/improvement
> > upon TCL. The downfall of expect, (I will admit), is there are not a lot
> of
> > good examples out there on it and there is only one reference book,
> written
> > by Don Libes (The person that developed expect). Over half the people
> that
> > use expect aren't even familiar with how powerful of a tool it is.
> >
> >
> >
> > #!/usr/bin/expect
> >
> >
> >
> > spawn telnet <hostname>
> >
> > expect {
> >
> > "Username:" {
> >
> > send "<username>\r"
> >
> > exp_continue
> >
> > }
> >
> > "Password:" {
> >
> > send "<password>\r"
> >
> > exp_continue
> >
> > }
> >
> > ">" {
> >
> > send "enable\r<enablepass>\r"
> >
> > exp_continue
> >
> > }
> >
> > "#" {
> >
> > send "show ip interface brief | exclude
> > unav\r"
> >
> > expect "show ip interface brief | exclude
> > unav"
> >
> > expect "#" { send "exit\r" }
> >
> > expect "Connection closed by foreign host"
> >
> > }
> >
> > expect eof
> >
> >
> >
> > I have shown a very brief and simple expect script. You can build in a
> lot
> > more error checking functionality into this that would greatly improve
> the
> > functionality of the script. As is seen it will continue to loop thru
> > username/password until it gets to the enable prompt and then it will
> issue
> > the commands needed.
> >
> >
> >
> > Regards,
> >
> >
> >
> > Tyson Scott - CCIE #13513 R&S and Security
> >
> > Technical Instructor - IPexpert, Inc.
> >
> >
> > Telephone: +1.810.326.1444
> > Cell: +1.248.504.7309
> > Fax: +1.810.454.0130
> > Mailto: tscott@ipexpert.com
> >
> >
> >
> >
> >
> > *From:* shiran guez [mailto:shiranp3@gmail.com]
> > *Sent:* Thursday, January 22, 2009 11:02 AM
> > *To:* Tyson Scott
> > *Cc:* testing testing123; ccielab@groupstudy.com
> > *Subject:* Re: script to log into cisco csm load balancer
> >
> >
> >
> > I use python as it is more flexible then expect and much easy syntax then
> > perl here is an real small exmple but you can actually do what you
> described
> > you need in not much more code lines:
> >
> > ============================================================
> >
> > #!/usr/bin/python
> >
> >
> >
> > import getpass
> > import sys
> > import telnetlib
> >
> >
> >
> > HOST = raw_input("Enter your remote address: ")
> > user = "user"
> > password = "pass"
> > enable = "enapass"
> >
> > tn = telnetlib.Telnet(HOST)
> >
> > tn.read_until("Username: ")
> > tn.write(user + "\n")
> > if password:
> > tn.read_until("Password: ")
> > tn.write(password + "\n")
> >
> > tn.write("enable\n")
> > if password:
> > tn.read_until("Password: ")
> > tn.write(enable + "\n")
> > tn.write("show ip int b | ex una\n")
> > tn.write("exit\n")
> >
> > print tn.read_all()
> >
> > ========================================================
> >
> >
> >
> >
> >
> > Good luck
> >
> > On Wed, Jan 21, 2009 at 1:02 AM, Tyson Scott <tscott@ipexpert.com>
> wrote:
> >
> > Perl or Expect will provide you the greatest functionality and
> > customization
> > in my opinion. Perl has a lot more examples that you can easily obtain
> off
> > of the internet. Expect is a great tool for network admins.
> >
> > Regards,
> >
> > Tyson Scott - CCIE #13513 R&S and Security
> > Technical Instructor - IPexpert, Inc.
> >
> > Telephone: +1.810.326.1444
> > Cell: +1.248.504.7309
> > Fax: +1.810.454.0130
> > Mailto: tscott@ipexpert.com
> >
> >
> >
> > -----Original Message-----
> > From: nobody@groupstudy.com [mailto:nobody@groupstudy.com] On Behalf Of
> > testing testing123
> > Sent: Tuesday, January 20, 2009 5:27 PM
> > To: ccielab@groupstudy.com
> > Subject: script to log into cisco csm load balancer
> >
> > What language should I use to write a script to log into my cisco csm
> > load balancer and check the usage ? The place I work for doesn't have
> > any industry tools like HP Openview, CIscoworks, solarwinds, or
> > anything like that. I want it to log into the csm once every half
> > hour and check the connections of the serverfarms and export it to a
> > spreadsheet that will automatically graph that data.
> >
> > thanks
> >
> >
> > Blogs and organic groups at http://www.ccie.net
> >
> > _______________________________________________________________________
> > Subscription information may be found at:
> > http://www.groupstudy.com/list/CCIELab.html
> >
> >
> > Blogs and organic groups at http://www.ccie.net
> >
> > _______________________________________________________________________
> > Subscription information may be found at:
> > http://www.groupstudy.com/list/CCIELab.html
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > --
> > Shiran Guez
> > MCSE CCNP NCE1 JNCIA-ER CCIE #20572
> > http://cciep3.blogspot.com
> > http://www.linkedin.com/in/cciep3
> >
>
>
>
> --
> Shiran Guez
> MCSE CCNP NCE1 JNCIA-ER CCIE #20572
> http://cciep3.blogspot.com
> http://www.linkedin.com/in/cciep3
>
>
> Blogs and organic groups at http://www.ccie.net
>
> _______________________________________________________________________
> Subscription information may be found at:
> http://www.groupstudy.com/list/CCIELab.html
Blogs and organic groups at http://www.ccie.net
This archive was generated by hypermail 2.1.4 : Sun Mar 01 2009 - 09:43:39 ARST