zoujunjie

一、目的和测试结果:

  (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()

 

四、测试过程:

分类:

技术点:

相关文章: