一、目的和測試結果:
(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()