Script Monitor Spanning-Tree và bảng ARP

Hỗ trợ monitor lỗi Layer2 Spanning tree và alarm arp flooding

1. Để lưu log thay đổi root của spanning tree trên switch:

conf t

spanning-tree logging

Khi có thay đổi root spanning tree sẽ có log ghi lại, gõ “show logging” để xem

2. Dùng script để check định kỳ

=====CHECK SPANNING TREE THAY ĐỔI========

- show spanning-tree root khi mạng bình thường lưu vào 1 file làm chuẩn

- định kỳ , ví dụ 1 phút 1 lần login vào switch và show spanning-tree root, lưu vào file

- Nếu thấy root-bridge mác có thay đổi so với file chuẩn ban đầu thì mail báo

=====CHECK arp table nếu tăng đột ngột thì mail=====

Script :

#########SCRIPT CẢNH BÁO KHI SPANNING TREE BỊ THAY ĐỔI ROOT#########

#####CẢNH BÁO KHI BẢNG ARP TĂNG CAO ĐỘT BIẾN#########

from netmiko import ConnectHandler

import re

import smtplib

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

################SCRIPT MONITOR XEM CÓ SWITCH NÀO LẠ CẮM VÀO VÀ CHIẾM ROOT KHÔNG##################

#####################THỰC HIỆN TRÊN CORE SWITCH CISCO ############################

###############TRƯỚC KHI THỰC HIỆN CẦN show spanning-tree root và lưu vào file vlan_root_standard.txt ĐỂ SO SÁNH#######

core_sw1={

                                'device_type': 'cisco_ios',

                                'ip': '192.168.177.131',

                                'username': 'admin',

                                'password': 'cisco',

                                'secret': 'cisco',

                                'verbose': False,

}

#===============Login vào switch rồi show spanning-tree root ở thời điểm check

#và lưu vào file temp-vlan.txt==============#

net_connect=ConnectHandler(**core_sw1)

net_connect.enable()

get_root_stp = net_connect.send_command_timing("show spanning-tree root")

f=open('temp-vlan.txt','w')

f.write(get_root_stp)

f.close()

#================Đọc file chuẩn ban đầu====================#

f=open('vlan_root_standard.txt','r')

lines=f.readlines()

for line in lines:

 vlan = re.findall(r'VLAN\w*',line)[0].replace(' ','')

 

 mac_root = re.findall(r'\w{4}\.\w{4}\.\w{4}',line)[0].replace(' ','')

 #================Mở file vừa show ở thời điểm check Rồi so sánh với file chuẩn====================#

 f1=open('temp-vlan.txt','r')

 templines=f1.readlines()

 for templine in templines:

  vlan_temp = re.findall(r'VLAN\w*',templine)[0]

  if vlan_temp==vlan:

   mac_root_temp = re.findall(r'\w{4}\.\w{4}\.\w{4}',templine)[0].replace(' ','')

   if  mac_root_temp!=mac_root:

    print("Root of VLAN "+str(vlan)+" is changed from "+mac_root+" \nto "+mac_root_temp )

###thực hiện hàm gửi mail outlook báo như thủ tục ở dưới####

https://hainguyenit.edubit.vn/blog/gui-mail-outlook-bang-python-script

 #================check arp====================#

mac_arp_current = net_connect.send_command_timing("show ip arp | inc Total number")

normal_arp=20 ##giả sử bình thường bảng arp chỉ có khoảng 20 MAC

if so_luong_mac_arp >= normal_arp*1.5:

 print ("Warning: arp increase on core switch "+ str(mac_arp_current))

###thực hiện hàm gửi mail báo như thủ tục ở dưới####

https://hainguyenit.edubit.vn/blog/gui-mail-outlook-bang-python-script

Bài viết cùng danh mục