400-035-6699
当前位置: 首页 » 技术支持 » 博文资讯 »

Python脚本实现华为交换机巡检

信息技术领域,交换机作为网络通信中的核心设备,其运行状态的好坏直接影响网络的稳定性和效率。为了及时发现并解决潜在问题,定期对交换机进行巡检至关重要。本文将为您介绍一种基于Python的巡检华为交换机的脚本,帮助您轻松完成交换机巡检工作。
首先,我们需要使用华为的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:

一、目的和测试结果:

Python脚本实现华为交换机巡检

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

四、测试过程:

审核编辑:汤梓红

【限时免费】一键获取网络规划系统模板+传输架构设计+连通性评估方案

SSH登录相关文章

服务电话:
400-035-6699
企服商城