|
|
#!/usr/bin/expect
# natcheck
# for CBOS 2.2 on Cisco 675, bind 8 on *nix
#
# uses ssh to DNS server, telnet to DSL modem. Compares DNS IP with DSL modem current IP,
# updates DNS server if needed.
#
# intended to be run via cron with output emailed to sysadmin
log_user 0
set env(BASH) /bin/bash
set env(BASH_VERSION) 1.14.7(1)
set env(COLUMNS) 80
set env(ENV) /root/.bashrc
set env(EUID) 0
set env(HISTFILE) /root/.bash_history
set env(HISTFILESIZE) 1000
set env(HISTSIZE) 1000
set env(HOME) /root
set env(HOSTNAME) hal.srkconsulting.com
set env(HOSTTYPE) i386
set env(LINES) 25
set env(LOGNAME) root
set env(OLDPWD) /var/log
set env(OPTERR) 1
set env(OPTIND) 1
set env(OSTYPE) Linux
set env(PATH) /sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/root/bin
set env(PPID) 1
set env(PS1) \$
set env(PS2) >
set env(PS4) +
set env(SHELL) /bin/bash
set env(SHLVL) 1
set env(UID) 0
set env(USER) root
set env(USERNAME) root
set env(TERM) vt100
send_user "starting ssh to dns1 to check IP address\n"
spawn /usr/local/bin/ssh -l keszler dns1.my-dns-server.com
expect "word:"
send_user "got dns1 passwd prompt\n"
sleep 2
send "mypassword\r"
send_user "send passwd\n"
expect "$"
send_user "got prompt\n"
send "nslookup hal.srkconsulting.com\r"
expect -re ".*Address: *(\[0-9.]*).*$"
set oldip $expect_out(1,string)
send_user "got old IP: $oldip\n"
send "exit\r"
send_user "sent exit\n"
close
send_user "starting telnet to cisco to check and maybe update NAT\n"
spawn /usr/bin/telnet 10.0.0.1
send_user "spawned...\n"
expect "word:"
send_user "got exec passwd prompt\n"
sleep 2
send "myexecpassword\r"
send_user "sent passwd\n"
expect "cbos>
send_user "got cbos prompt\n"
send "enable\r"
send_user "sent enable\n"
expect "word:"
send_user "got enable passwd prompt\n"
sleep 2
send "myenablepassword\r"
send_user "sent enable passwd\n"
expect "cbos#"
send_user "got enable cbos prompt\n"
send "show nat\r"
send_user "showing nat\n"
set newip 0.0.0.0
while 1 {
expect {
-re "(NAT\[^\r]*\r\n)" {
send_user "got NAT line: $expect_out(1,string)\n"
exp_continue
}
-re "(Inside\[^\r]*\r\n)" {
send_user "got Inside line: $expect_out(1,string)\n"
exp_continue
}
-re "(10.0.0.2:\[ \t]*(\[0-9]*)\[ \t]*(\[0-9.]*):\[^\r]*\r\n)" {
send_user "got data line: $expect_out(1,string)\n"
set port10 $expect_out(2,string)
send_user "set port10 $port10\n"
set ip $expect_out(3,string)
send_user "set ip $ip\n"
if {$port10 != "22" && $port10 != "25" && $port10 != "110" && $port10 != "80"} {
set newip $ip
send_user "set newip $newip with port $port10\n"
exp_continue
}
}
-re "cbos" {
send_user "got cbos prompt\n"
break
}
}
}
if {$oldip != $newip} {
send_user "starting ssh to dns1 to update dns\n"
spawn /usr/local/bin/ssh -l keszler dns1.my-dns-server.com
expect "word:"
send_user "got dns1 passwd prompt\n"
sleep 2
send "mypassword\r"
send_user "send passwd\n"
expect "$"
send_user "got prompt\n"
send "cd /etc/namedb\r"
send_user "cd to namedb\n"
expect "$"
send_user "got prompt\n"
send "sudo grep Serial srkc.zone\r"
send_user "grepped for Serial\n"
expect -re "\[ \t]*(\[0-9]*)\[ \t]*; Serial"
set oldser $expect_out(1,string)
set newser [expr $oldser + 1]
send_user "set oldser $oldser and newser $newser\n"
expect "$"
send_user "got prompt\n"
send "sudo bash\r"
send_user "sudod to bash\n"
expect "#"
send_user "got prompt\n"
send "sed 's/$oldser/$newser/' < srkc.zone > srkc.2\r"
send_user "sent sed to change serial\n"
expect "#"
send_user "got prompt\n"
send "sed 's/$oldip/$newip/' < srkc.2 > srkc.zone\r"
send_user "sent sed to change ip\n"
expect "#"
send_user "got prompt\n"
log_user 1
send "cat srkc.zone\r"
expect "#"
log_user 0
send_user "got prompt\n"
send "ndc restart\r"
send_user "restarting dns\n"
set timeout 60
expect "#"
send_user "got prompt\n"
send "exit\r"
send_user "exited sudo bash\n"
expect "$"
send_user "got prompt\n"
} else {
send_user "\n\n**** no ip address change ****\n"
}
send_user "signing off\n"
send "exit\r"
send_user "sent exit\n"
close
|