SRK Consulting

NATCheck

Home
Resume - Short
Resume - Long Word doc
Software & Misc
Firewatch (perl)
mssql_grep (perl)
pstree (c)
Vim syntax files for Netcool
NATCheck (expect)
Perl/Tk Screenshots
Temperature Monitor
Work & Demo sites
phpCollab
phpMyAdmin
phProjekt
Call Center Stats
Fitness
RemindMe
Cookie Test
Flatfile/form demo
Asthma/Allergy Clinic
Gary
Neil
Hobbies & Misc
Google Maps Links
Hard Drive Clocks
Theatre Props & Devices
Electronic Candles
Chase Light Controller
Magic Sword Prototype
Theatrical Lighting
South Pacific
(Fargo North High, 2004)
42nd Street
(West Fargo High, 2005)









#!/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
          
For more information on SRK Consulting products and services, please e-mail keszler@srkconsulting.com or phone +1-701-361-8406.
This page, and all contents, are Copyright © 1994 by SRK Consulting, Fargo, North Dakota, 58102.