Discover network configuration on a Cisco 837 (in TCL)

From Internetworkpro

Jump to: navigation, search
This page or section provides device configuration instructions
Please note that the information on this page has not been checked for accuracy and is not intended as a replacement to documentation. Please ensure you understand your desired objectives before attempting to apply any examples listed.
See more examples at Category:Configuration
proc get_shversion {} {
 
puts "|---------------------|"
puts "| Router information  |"
puts "|---------------------|"
puts ""
 
set sh_version_out [ exec "show version\n"]
 
# Get device name
set devicename [regexp -all -nocase -line -inline {^[[:graph:]]{1,}[[:space:]]uptime+} $sh_version_out]
regsub -all {.uptime} $devicename {} devicename
set devicename [trim_embraces $devicename]
 
puts "Device Name: $devicename"
 
# Get Model name
set modelname [regexp -all -nocase -line -inline {^[[:graph:]]{1,}[[:space:]][[:graph:]]{1,}[[:space:]]\(+} $sh_version_out]
regsub -all {[[:space:]]\(} $modelname {} modelname
set modelname [trim_embraces $modelname]
puts "Model Name: $modelname"
 
# Get IOS version
 
set iosversion [regexp -nocase -line -inline {Version[[:space:]][[:graph:]]{1,}} $sh_version_out]
regsub -all {.Version} $iosversion {} iosversion
regsub -all {\,} $iosversion {} iosversion
set iosversion [trim_embraces $iosversion]
 
puts "IOS Version: $iosversion"
}
 
proc get_ifs {} {
 
puts "|---------------------|"
puts "|    IP interfaces    |"
puts "|--------------------------------------|"
puts "| Interface | IP Address | MAC Address |"
puts "|--------------------------------------|"
 
set sh_int_brief_out [ exec "show ip interface brief\n"]
 
# Get IP interfaces
set ifnames [regexp -all -nocase -line -inline {^[[:graph:]]{1,}[[:space:]]{1,}[[:graph:]]{1,}[[:space:]]+} $sh_int_brief_out]
regsub {Interface} $ifnames {} ifnames
regsub {IP-Address} $ifnames {} ifnames
set ifnames [trim_embraces $ifnames]
regsub -all {unassigned} $ifnames {no-IP-address} ifnames
 
for {set i 0} { $i < [llength $ifnames]} { incr i 2} {
 
  if { [lindex $ifnames $i] != "NVI0" } {
    set sh_mac_addresses [ exec "show interface [lindex $ifnames $i] | include bia"]
    set mac_adresses [regexp -all -nocase -line -inline {bia[[:space:]].............} $sh_mac_addresses]
    regsub {bia } $mac_adresses {} mac_adresses
    set mac_adresses [trim_embraces $mac_adresses]
    puts "[lindex $ifnames $i] [lindex $ifnames [expr 1+$i]] $mac_adresses"
  }
 
}
}
 
proc get_cdp {} {
 
puts "|----------------------------|"
puts "|  Cisco Discovery Protocol  |"
puts "|----------------------------|"
puts ""
 
# Get devices list
set sh_cdp_devices_list [ exec "show cdp neighbor\n"]
puts "$sh_cdp_devices_list"
 
}
 
proc get_routingprotocols {} {
puts "|---------------------|"
puts "|  Routing Protocols  |"
puts "|---------------------|"
puts ""
 
set sh_ip_protocols_list [ exec "show ip protocols summary\n"]
 
# Get Protocols list
set protocols [regexp -all -nocase -line -inline {^[[:digit:]][[:space:]]{1,}[[:alpha:]]{1,}} $sh_ip_protocols_list]
regsub {connected} $protocols {} protocols
regsub {static} $protocols {} protocols
regsub -all {[[:digit:]][[:space:]]{1,}} $protocols {} protocols
set protocols [trim_embraces $protocols]
 
puts "$protocols"
 
}
 
proc get_routing_table {} {
puts "|---------------------|"
puts "|  IP Routing Table   |"
puts "|---------------------|"
puts ""
 
set sh_ip_route [ exec "show ip route\n"]
 
# Get IP routing table
set routetable [regexp -all -nocase -line -inline {^[CSRMBDEOINisLUoP](A|a|X|u|1|2|\*|[[:space:]]{1,}).{1,}} $sh_ip_route]
set routetable [trim_embraces $routetable]
puts "$routetable"
 
}
 
 
proc trim_embraces {panther} {
regsub -all {\{} $panther {} panther
regsub -all {\}} $panther {} panther
return $panther
}
 
puts "Script version 0.1 by pello"
puts "This script can be used to discover network configuration"
puts ""
eval get_shversion
puts ""
eval get_ifs
puts ""
eval get_cdp
puts ""
eval get_routingprotocols
puts ""
eval get_routing_table
Personal tools