一、目的和测试结果:
(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*dd.*)' 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()
四、测试过程:
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !