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