Date created: Thursday, May 22, 2014 10:23:49 PM. Last modified: Thursday, May 22, 2014 10:23:49 PM
Cisco Watch
A simple expect script to log into a Cisco device and repeatedly run a command and print the date and time each time it is executed, like the unix watch command.
#!/usr/bin/expect
# Expect script to repeatedly run the same command
# by jwbensley@gmail.com
# If you don't like it, fuck off.
# Long delay for those tricky hostnames
set timeout 60
# Prompt user for device name/IP address, username, password,
# and command to run (example: show cdp neigh)
send_user "Device name: "
expect_user -re "(.*)\n"
set host $expect_out(1,string)
send_user "Username: "
expect_user -re "(.*)\n"
set user $expect_out(1,string)
# Don't show the password it is typed
stty -echo
send_user "Password: "
expect_user -re "(.*)\n"
set pass $expect_out(1,string)
send_user "\n"
stty echo
send_user "Enable mode by default \[yes\/no\]: "
expect_user -re "(.*)\n"
set enable $expect_out(1,string)
# Expect enable mode by default
if { $enable == "" } {
set enable "yes"
}
send_user "SSH or telnet \[ssh\/telnet\]: "
expect_user -re "(.*)\n"
set protocol $expect_out(1,string)
# Use SSH as default
if { $protocol == "" } {
set protocol "ssh"
}
send_user "command: "
expect_user -re "(.*)\n"
set command $expect_out(1,string)
if { $command == "" } {
send_user "Need interface name\!\n"
exit
}
send_user "Interval in seconds \[3\]: "
expect_user -re "(.*)\n"
set delay $expect_out(1,string)
# Use 3 seconds as the default execution delay if none is given
if { $delay == "" } {
set delay 3
}
send_user "\n"
# Connect to the host and login
if { $protocol == "ssh" } {
spawn ssh $host -l $user
# Expect "assword:" as the 'p' in 'password' could be upper or lower case
expect "assword:"
send "$pass\r"
if { $enable == "yes" } {
expect "#"
} else {
expect ">"
}
puts ""
} else {
spawn telnet $host
expect "Username:"
send "$user\r"
# Expect "assword:" as the 'p' in 'password' could be upper or lower case
expect "assword:"
send "$pass\r"
if { $enable == "yes" } {
expect "#"
} else {
expect ">"
}
puts ""
}
# From this point on we shall disable user output or they will see the command being run repeatedly
log_user 1
# Enter a continuous loop to repeatedly run the command
while { true } {
set datet [exec date +%d-%m-%y--%H:%M:%S]
send_user "$datet\n"
#exec date +%d-%m-%y--%H:%M:%S
send "$command\r"
if { $enable == "yes" } {
expect "#"
} else {
expect ">"
}
send_user "\n\n"
sleep $delay
}
Previous page: Host Interface Throughput
Next page: Git