본문 바로가기

Script/Search Info 관련

Cisco Switch MAC 정보 자동화

*세팅값 작성을 생활화 하자

Version : 모든 운영체제에서 문제 없이 동작

*단 bash, expect를 지원 해야합니.

 

주석이 처리된 부분은 제외하고 사용하셔도 됩니다.

*추가적으로 업데이트 및 수정 사항이 생길때마다 수정할 예정

*추가 여러분들의 댓글 의견도 바로 반영하겠습니다.

 

#!bin/bash

#!/usr/bin/expect

 

#description : Switch Auto Conneciton\

 

ip_list="192.168.6.15"

 

function dev_ping_ck(){ #해당 IP정보를 가지고 Ping 테스트 진행

for ip_info in ${1}; do

        ip_total_cnt=`echo "${1}"| grep -Ev "^$" |wc -l | tr -d " "`

        ping -c 2 ${ip_info} > /dev/null

 

        if [ $? -eq 0 ]; then

                ping_ok_num=`expr ${ping_ok_num} + 1`

 

                echo "${ip_info} : OK" >> ping_test.tmp

        else

                echo "${ip_info} : FAILE" >> ping_test.tmp

        fi

done

 

cat ping_test.tmp

 

echo ""

echo "======================================"

echo "       Switch Ping Check Result       "

cat ping_test.tmp

echo "Total Ping OK/FALE = (${ping_ok_num}/`expr ${ip_total_cnt} - ${ping_ok_num}`)"

echo "======================================"

echo ""

 

#        rm -rf ping_test.tmp

}

 

function dev_port_err_ck(){ #해당 IP정보를 가지고 각 스위치 err-disabled 포트 체크

echo ""

echo "======================================"

echo "        To  Choese Check Option       "

echo "1. Ping Test "OK" Status to Checking. "

echo "2. All Cechking. (NOT SUPPORT)        "

 

echo -n "Menu Select : "

read sel_num

echo "======================================"

echo ""

 

case "${sel_num}" in

1 )

if [ -f ping_test.tmp ]; then

ok_list=`cat ping_test.tmp | grep "OK" | awk '{print $1}'`

else

 

echo ""

echo "======================================"

echo "  You Have not [ping_test.tmp] File,  "

echo "  You First Device Ping Check Please. "

echo "======================================"

echo ""

dev_ping_ck

fi

 

for ip_info in ${ok_list}; do

for ip1_info in ${ip_info}; do

echo "telnet ${ip1_info}"

expect << EOF

spawn telnet ${ip1_info}

send "\r"

 

expect "*assword: " { send "uangelcisco\r" }

expect "*>" { send "en\r" }

expect "*assword: " { send "ciscouangel\r" }

expect "*#" { send "terminal length 0\r" }

expect "*#" { send "sh int status | include err-disabled \r" }

expect "*#" { send "exit\r" }

expect "*#" { send "exit\r" }

expect eof

EOF

done > dev_port_err_ck.tmp

 

echo ""

echo "======================================"

echo -n "${ip_info}"

grep connected  dev_port_err_ck.tmp | awk '{print $1}'

echo "======================================"

echo ""

done

 

rm -rf dev_port_err_ck.tmp

;;

2 )

echo "NOT Support."

;;

 

* )

echo "NOT Support."

;;

esac

}

 

#MAC Address Drop Add Action Scripts.

function dev_drop_add(){ #해당 IP정보를 가지고 각 스위치 DROP 추가

echo ""

echo "================================================================================"

echo -n "Drop Add Mac-Address (xx-xx-xx-xx-xx-xx) or xxxx.xxxx.xxxx : "

read mac_input

echo "================================================================================"

echo ""

 

echo ""

echo "======================================"

 

for ip_info in ${1}; do

for ip1_info in ${ip_info}; do

#                echo "telnet ${1}"

expect << EOF

spawn telnet ${ip1_info}

send "\r"

 

expect "*assword: " { send "uangelcisco\r" }

expect "*>" { send "en\r" }

expect "*assword: " { send "ciscouangel\r" }

expect "*#" { send "terminal length 0\r" }

expect "*#" { send "conf t\r" }

expect "*#" { send "mac address static ${mac_input} vlan 1 drop\r" }

expect "*#" { send "exit \r" }

expect "*#" { send "exit\r" }

expect eof

EOF

done > /dev/null

 

echo "${ip_info} Add Success."

done

 

echo "======================================"

echo ""

}

 

#MAC Address Drop Delete Action Scripts.

function dev_drop_delete(){ #해당 IP정보를 가지고 각 스위치 DROP 삭제

echo ""

echo "=============================================================================="

echo -n "Drop Delete Mac-Address (xx-xx-xx-xx-xx-xx) or xxxx.xxxx.xxxx : "

read mac_input

echo "=============================================================================="

echo ""

 

echo ""

echo "======================================"

 

for ip_info in ${1}; do

for ip1_info in ${ip_info}; do

expect << EOF

spawn telnet "${ip1_info}"

send "\r"

 

expect "*assword: " { send "uangelcisco\r" }

expect "*>" { send "en\r" }

expect "*assword: " { send "ciscouangel\r" }

expect "*#" { send "terminal length 0\r" }

expect "*#" { send "conf t\r" }

expect "*#" { send "no mac address static ${mac_input} vlan 1 drop\r" }

expect "*#" { send "exit\r" }

expect "*#" { send "exit\r" }

expect eof

EOF

done > /dev/null

 

echo "${ip_info} Delete Success."

done

 

echo "======================================"

echo ""

}

 

function dev_find(){ #해당 IP정보를 가지고 각 스위치 MAC 찾기

echo ""

echo "=============================================================================="

echo -n "Find Mac-Address (xx-xx-xx-xx-xx-xx) or xxxx.xxxx.xxxx : "

read mac_input

echo "=============================================================================="

echo ""

 

echo ""

echo "==================================================================="

 

for ip_info in ${1}; do

expect <<        EOF

spawn telnet "${1}"

send "\r"

 

expect "*assword: " { send "uangelcisco\r" }

expect "*>" { send "en\r" }

expect "*assword: " { send "ciscouangel\r" }

expect "*#" { send "terminal length 0\r" }

expect "*#" { send "sh mac add add ${mac_input}\r" }

expect "*#" { send "exit\r" }

expect "*#" { send "exit\r" }

EOF

done > find_mac.tmp

 

echo -n "${1} -> "

grep "${mac_input}" find_mac.tmp | grep -i "static\|dynamic"

echo "==================================================================="

echo ""

}

 

main(){

echo ""

echo "======================================"

echo "Network Switch Device Checking Version"

echo "    Let's Check Switch Ping Status    "

echo "======================================"

echo ""

 

for ip_info in ${ip_list}; do

        ip_total_cnt=`echo "${ip_list}"| grep -Ev "^$" |wc -l | tr -d " "`

        ping -c 2 ${ip_info} > /dev/null

 

        if [ $? -eq 0 ]; then

                ping_ok_num=`expr ${ping_ok_num} + 1`

                echo "${ip_info} : OK" >> ping_test.tmp

        else

                echo "${ip_info} : FAILE" >> ping_test.tmp

        fi

done

 

#ping_test.tmp file is using dev_port_ck.

 

echo ""

echo "======================================"

echo "       Switch Ping Check Result       "

cat ping_test.tmp

echo "Total Ping OK/FALE = (${ping_ok_num}/`expr ${ip_total_cnt} - ${ping_ok_num}`)"

echo "======================================"

echo ""

 

#        rm -rf ping_test.tmp

 

while true

do

echo ""

echo "======================================"

echo "Status Check Menu"

echo "a. Device Ping Check"

echo "b. Device Port Desirable Check"

echo ""

 

echo "Drop Action"

echo "1. MAC Address Drop Add"

echo "2. MAC Address Drop Delete"

 

echo "Find Action"

echo "3. MAC Address Find"

 

echo -n "Menu Select : "

read sel_n

echo "======================================"

echo ""

case "${sel_n}" in

a )

dev_ping_ck ${ip_list}

;;

b )

dev_port_err_ck ${ip_list}

;;

1 )

dev_drop_add ${ip_list}

;;

2 )

dev_drop_delete ${ip_list}

;;

3 )

dev_find ${ip_list}

;;

* )

echo "Script STOP!!"

exit 0

;;

esac

done

}

main $*