首先,我们需要使用华为的eNSP模拟器模拟真实设备,配置好本机IP(例如:169.254.94.30)和两台交换机的IP(例如:169.254.94.31和169.254.94.32)。然后,由于使用了第三方模块netmiko和xlwt,需要提前通过以下命令安装:
```bash pip install netmiko pip install xlwt ```
接下来,创建一个名为`ip_list.txt`的文件,将巡检的设备IP写入该文件:
``` 169.254.94.31 169.254.94.32 ```
下面是巡检华为交换机的Python脚本:
```python # coding:utf-8 from netmiko import NetMikoTimeoutException, 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('MyWorksheet') # 初始化表格 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.strip()) try: S5720 = { 'device_type': 'huawei', 'ip': ip.strip(), 'username': username, 'password': password, } # 实例化HuaweiSSH net_connect = HuaweiSSH(**S5720) # ip_str=(ip) hang = hang + 1 # 初始化表格列 lie = 0 worksheet.write(hang, lie, label=ip.strip()) 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:
一、目的和测试结果:
(1). SSH登录到各个交换机收集软件版本、CPU、内存利用率和硬件状态信息。
(2). 生成如下的excel表格文件展示。
二、环境准备:
(1). 使用华为的eNSP模拟器来模拟真实设备,本机IP169.254.94.30,两台交换机的IP分别是169.254.94.31和169.254.94.32。
(2). 由于使用了第三方模块netmiko和xlwt模块,需要提前使用以下命令安装。
pipinstallnetmiko pipinstallxlwt
(3). 创建一个名称为:ip_list.txt 的文件用来存放巡检的设备IP。
169.254.94.31 169.254.94.32
三、python 巡检华为交换机脚本:
#-*-coding:utf-8-*- fromnetmiko.huawei.huaweiimportHuaweiSSH fromnetmikoimportNetMikoTimeoutException fromnetmikoimportNetMikoAuthenticationException fromgetpassimportgetpass importre importio importxlwt defmain(): """ 主函数 """ #让用户输入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=['displayversion','displaycpu-usage','displaymemory-usage','displaydevice'] #创建一个workbook设置编码 workbook=xlwt.Workbook(encoding='utf-8') #创建一个worksheet worksheet=workbook.add_sheet('MyWorksheet') #初始化表格 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列表用来生成迭代器 foripiniter(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('<>')) forcmdiniter(cmd_line): cmd_result=net_connect.send_command(cmd) regex_str=[] if'VRP(R)software'incmd_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'incmd_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'incmd_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'incmd_result: if'Abnormal'incmd_result: lie=lie+1 worksheet.write(hang,lie,label=u"Abnormal") elif'WrongType'incmd_result: lie=lie+1 worksheet.write(hang,lie,label=u"WrongType") elif'Unregistered'incmd_result: lie=lie+1 worksheet.write(hang,lie,label=u"Unregistered") elif'Off'incmd_result: lie=lie+1 worksheet.write(hang,lie,label=u"Off") elif'Offline'incmd_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()
四、测试过程:
审核编辑:汤梓红