EXPECT - cisco show fex mac-address table.expect

From IT-Arts.net
Revision as of 06:44, 29 June 2026 by Admin (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)


Return to Wiki Index

#!/usr/bin/expect -f
#
# USAGE:
# ./cisco_show_interfaces_fex_mac-address_table.expect <IP> <USER> <PASSWORD> '<FEX_ID1 FEX_ID2 FEX_ID3...>'
#
# Example:
# ./cisco_show_interfaces_fex_mac-address_table.expect 1.2.3.4 ADMIN PASSWORD "101 102 103"
#

# DISABLE OUTPUT BUFFERING
fconfigure stdout -buffering none

set timeout 10

set IP [lindex $argv 0]
set USER [lindex $argv 1]
set PASSWORD [lindex $argv 2]
set FEX_ID_LIST [lindex $argv 3]

# puts "FEX_ID_LIST : $FEX_ID_LIST"

# SSH CONNECTION
spawn ssh $USER@$IP
expect "*assword: "
send "$PASSWORD\r"

# WAIT FOR SWITCH PROMPT
expect "#"

# PROCESS EACH FEX
foreach FEX $FEX_ID_LIST {

    puts ""
    puts "===== FEX : $FEX ====="

    # GET CONNECTED INTERFACES
    send "show interface status fex $FEX | include connected\r"
    expect "#"

    set RAW_UP_INTERFACE_LIST $expect_out(buffer)

    # BUILD THE INTERFACE LIST
    set UP_INTERFACE_LIST {}

    # PROCESS INTERFACE LIST
    foreach line [split $RAW_UP_INTERFACE_LIST "\n"] {

        # REMOVE CARRIAGE RETURNS
        regsub -all {\r} $line "" line

        # MATCH INTERFACE NAME AT BEGINNING OF LINE
        if {[regexp {^(Eth[0-9/]+)} $line -> iface]} {

            lappend UP_INTERFACE_LIST $iface

        }

    }

    puts "Interfaces found:"
    puts $UP_INTERFACE_LIST

    # QUERY MAC ADDRESSES ON EACH INTERFACE
    foreach INTERFACE $UP_INTERFACE_LIST {

                        puts ""
                        puts "===== show mac address-table interface $INTERFACE ====="

        send "show mac address-table interface $INTERFACE\r"
        expect "#"

        # DON'T SPAM THE SWITCH
        sleep 1

        # PRINT COMMAND OUTPUT
        # puts $expect_out(buffer)

    }

}

# EXIT
send "exit\r"
expect eof

 

exit 0

Return to Wiki Index