python 巡檢華為交換機


一、目的和測試結果:

  (1). SSH登錄到各個交換機收集軟件版本、CPU、內存利用率和硬件狀態信息。

  (2). 生成如下的excel表格文件展示。

 

二、環境准備:

  (1). 使用華為的eNSP模擬器來模擬真實設備,本機IP169.254.94.30,兩台交換機的IP分別是169.254.94.31和169.254.94.32。

 

  (2). 由於使用了第三方模塊netmiko和xlwt模塊,需要提前使用以下命令安裝。

pip install netmiko
pip install xlwt

  (3). 創建一個名稱為:ip_list.txt 的文件用來存放巡檢的設備IP。

169.254.94.31
169.254.94.32

 

三、python 巡檢華為交換機腳本:

# -*- coding: utf-8 -*-
from netmiko.huawei.huawei import HuaweiSSH
from netmiko import NetMikoTimeoutException
from netmiko import NetMikoAuthenticationException
from getpass import getpass
import re
import io
import xlwt


def main():
    """
        主函數
    """
    # 讓用戶輸入ssh用戶名密碼
    username = input('請輸入ssh用戶名:')
    password = getpass('請輸入ssh密碼:')

    # 打開ip_list.txt文件獲取IP列表
    ip_list = open('ip_list.txt', 'r')
    ip_addr = ip_list.readlines()
    ip_list.close()

    cmd_line = ['display version', 'display cpu-usage', 'display memory-usage', 'display device']
 
    # 創建一個workbook 設置編碼
    workbook = xlwt.Workbook(encoding='utf-8')
    # 創建一個worksheet
    worksheet = workbook.add_sheet('My Worksheet')
    # 初始化表格
    worksheet.write(0, 0, label = "交換機IP")
    worksheet.write(0, 1, label = "交換機名稱")
    worksheet.write(0, 2, label = "軟件版本")
    worksheet.write(0, 3, label = "CPU利用率")
    worksheet.write(0, 4, label = "內存利用率")
    worksheet.write(0, 5, label = "硬件狀態")
    hang = 0
    lie = 0

    # 遍歷ip列表用來生成迭代器
    for ip in iter(ip_addr):
        print(' ')
        print('本次巡檢的設備IP:' + ip)
        try:
            S5720 = {
                'device_type': 'huawei',
                'ip': ip,
                'username': username,
                'password': password,
            }
            # 實例化HuaweiSSH
            net_connect = HuaweiSSH(**S5720)
            #print ("恭喜,成功登錄")
            #print ("設備名:" + str(net_connect.find_prompt().strip('<>')))
            ip_str = (ip)
            hang = hang + 1
            # 初始化表格列
            lie = 0
            worksheet.write(hang, lie, label=ip_str)
            lie = lie + 1
            worksheet.write(hang,
                            lie,
                            label=net_connect.find_prompt().strip('<>'))
            for cmd in iter(cmd_line):
                cmd_result = net_connect.send_command(cmd)
                regex_str = []
                if 'VRP (R) software' in cmd_result:
                    regex_str = '\(\w*\d\d.*\)'
                    version = (re.search(regex_str, cmd_result))
                    lie = lie + 1
                    worksheet.write(hang,
                                    lie,
                                    label=version.group().strip('()'))
                    cmd_result = ''
                if 'CPU ' in cmd_result:
                    regex_str = '\d*.\d*.\%'
                    cpu_usage = (re.search(regex_str, cmd_result))
                    lie = lie + 1
                    worksheet.write(hang,
                                    lie,
                                    label=cpu_usage.group().strip(' '))
                    cmd_result = ''
                if 'Memory ' in cmd_result:
                    regex_str = '\d*.\%'
                    memory = (re.search(regex_str, cmd_result))
                    lie = lie + 1
                    worksheet.write(hang, lie, label=memory.group())
                    cmd_result = ''
                if 'Device ' in cmd_result:
                    if 'Abnormal' in cmd_result:
                        lie = lie + 1
                        worksheet.write(hang, lie, label=u"Abnormal")
                    elif 'WrongType' in cmd_result:
                        lie = lie + 1
                        worksheet.write(hang, lie, label=u"WrongType")
                    elif 'Unregistered' in cmd_result:
                        lie = lie + 1
                        worksheet.write(hang, lie, label=u"Unregistered")
                    elif 'Off' in cmd_result:
                        lie = lie + 1
                        worksheet.write(hang, lie, label=u"Off")
                    elif 'Offline' in cmd_result:
                        lie = lie + 1
                        worksheet.write(hang, lie, label=u"Offline")
                    else:
                        lie = lie + 1
                        worksheet.write(hang, lie, label=u"Normal")
                    cmd_result = ''

            net_connect.disconnect()
        except (EOFError, NetMikoTimeoutException):
            print('無法連接設備')
            netmikotimeout = (u'無法連接設備' + ip)
            hang = hang + 1
            lie = 0
            worksheet.write(hang, lie, label=netmikotimeout)
        except (EOFError, NetMikoAuthenticationException):
            print('用戶名密碼錯誤!')
            netmikotuehenticattion = (u'用戶名密碼錯誤' + ip)
            hang = hang + 1
            lie = 0
            worksheet.write(hang, lie, label=netmikotimeout)
        workbook.save('xunjian.xls')


if __name__ == '__main__':
    main()

 

四、測試過程:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM