Python3网络设备巡检(交换机篇)_第1页
Python3网络设备巡检(交换机篇)_第2页
Python3网络设备巡检(交换机篇)_第3页
Python3网络设备巡检(交换机篇)_第4页
Python3网络设备巡检(交换机篇)_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python3⽹络设备巡检(交换机篇)介绍只写了交换机的,路由器、防⽕墙、负载等其它设备以后,有需求再写,下⾯以⼀组交换机为例。思路1、收取交换机的信息需要哪些信息,哪些命令,不同品牌交换机命令不同(本篇以H3C为例),需要提前规划好。交换机的IP、名字、密码等信息,写⼊数据库⽐较⽅便。2、把需要的信息填⼊表格根据关键字提取交换机中的状态信息,并⼀次填⼊设计好的表格中,难点是字符串的截取和excel表格的设计。同款交换机相同的命令,可能⽤同⼀个关键字,抓取的信息也不⼀样,这个要多试⼏次。3、编写邮件,发送邮件。4、linux编写任务计划,crontab定期执⾏python代码,定期发送邮件。代码抓取交换机需要的配置信息importpexpectimportsysimportdatetimeimportpymssqlimportostoday=datetime.date.today().strftime('%Y%m%d')path="/root/xunjian/"+todayos.mkdir(path,777)#创建⽬录defSwitch(name,ip,passwd):try:#tryexcept防⽌有⼀个命令错误,导致程序不能进⾏,其实不加也可以,如果有命令没输出,下⼀个代码也会报错。name1="----More----"#模拟交换机出现的翻页提⽰child=pexpect.spawn('telnet%s'%ip)fout=open('/root/xunjian/'+today+'/'+'%s-%s.txt'%(name,ip),'wb+')child.logfile=foutchild.expect('login:')#提⽰⽤户登录,输⼊帐号,交换机不同,有所不同。child.sendline("admin")child.expect('(?i)ssword:')#提⽰输⼊密码child.sendline("%s"%passwd)child.expect('<%s>'%name)child.sendline("displaycpu-usage")#查看cpu状态child.expect('<%s>'%name)child.sendline("displaymemory")#查看内存状态child.expect('<%s>'%name)child.sendline("displayenvironment")#运⾏温度child.expect('<%s>'%name)child.sendline("displayfan")#风扇状态,⼀般输出都有2个child.expect('<%s>'%name)child.sendline("displaypower")#电源状态child.expect('<%s>'%name)child.sendline("displayiprouting-table")#路由表foriinrange(10):index=child.expect([name1,'<%s>'%name])if(index==0):child.send("")else:child.sendline("displayinterfacebrief")#端⼝状态breakforiinrange(10):index=child.expect([name1,'<%s>'%name])if(index==0):if(index==0):child.send("")else:child.sendline("disversion")#版本,为了看运⾏时间breakforiinrange(10):index=child.expect([name1,'<%s>'%name])if(index==0):child.send("")else:child.sendline("displaylog")#⽇志,⽇志较多,循环100个空格,怕输出不全。breakforiinrange(100):index=child.expect([name1,'<%s>'%name])if(index==0):child.send("")else:child.sendline("quit")breakexcept:passhost='x.x.x.x'#连接数据库,抓取数据库内的信息,交换机的名字、ip、密码user='sa'pwd='xxxx'db='MAC'conn=pymssql.connect(host=host,user=user,password=pwd,database=db,timeout=1,login_timeout=1,charset="utf8")cur=conn.cursor()sqls="select*from[dbo].[F5HJSwitch]"cur.execute(sqls)listall=cur.fetchall()#SQl输出内容导成列表forlineinlistall:Switch(line[1],line[2],line[3])mit()conn.close()代码提取需要的信息,并塞⼊表格,因为设备太多,我只展⽰⼀个设备的代码。importpymssqlimportxlwtimportdatetimefromxlwtimport*today=datetime.date.today().strftime('%Y%m%d')txt='F51FA-HJ-S5560X-x.x.x.x.txt'#打开设备的配置信息,不建议⽤循环打开所有的,因为有些设备的输出会多空格等。file=open('/root/xunjian/'+today+'/'+txt,'r+')listlist=file.readlines()#读取⽂档的每⼀⾏,⾄列表,如果不是双电源的问题,直接forlineinfile.readlines():i=1forlineinlistlist:#读取列表每⼀⾏,因为两个电源的所有输出信息都⼀样,只能匹配关键字后输出下⼀⾏字符串,实属⽆奈。if'1Normal'inline:power11=line[8:15].rstrip()#设备状态,都是匹配关键字,然后截取本来的字符串输出,这个要多试⼏次。print(power11)#确认输出是⾃⼰想要的字符串。if'Uptimeis'inline:#运⾏时间time11=line[-33:].rstrip()print(time11)if'hotspot'inline:environment11=line[17:21].rstrip()#运⾏温度print(environment11)if'Fan1:'inline:fana11=listlist[i+1][-8:].rstrip()#电源状态,匹配关键字,截取下⼀⾏的字符串print(fana11)print(fana11)if'Fan2:'inline:fanb11=listlist[i+1][-8:].rstrip()#电源状态,匹配关键字,截取下⼀⾏的字符串print(fanb11)if'inlast5minutes'inline:cpu11=line[6:10].rstrip()#cpu使⽤率print(cpu11)if'Mem:'inline:memory11=line[-7:].rstrip()#内存print(memory11)if'To_F5-Core-S12508_Ten-G1'inline:#端⼝briefa11=line[20:30].rstrip()print(briefa11)if'To_F5-Core-S12508_Ten-G2'inline:briefb11=line[20:30].rstrip()print(briefb11)if'Currentmessages:'inline:#⽇志条⽬log11=line[-5:].rstrip()print(log11)if'Routes'inline:routingtable11=line[-5:].rstrip()#路由条⽬print(routingtable11)i+=1workbook=xlwt.Workbook()#创建表格style=XFStyle()#初始化样式,此样式包含了单元格背景颜⾊和单元格边框两个属性。pattern=Pattern()pattern.pattern=Pattern.SOLID_PATTERNpattern.pattern_fore_colour=Style.colour_map['blue']#设置单元格背景⾊为蓝⾊style.pattern=patternborders=xlwt.Borders()#设置表格的边框,1是默认实线⿊⾊。borders.left=1borders.right=1borders.top=1borders.bottom=1style.borders=bordersstyle1=XFStyle()#只有边框borders=xlwt.Borders()borders.left=1#borders.left=xlwt.Borders.THINborders.right=1borders.top=1borders.bottom=1style1.borders=bordersstyle3=XFStyle()#初始化样式,带边框和表格内容居中。borders=xlwt.Borders()borders.left=1#borders.left=xlwt.Borders.THINborders.right=1borders.top=1borders.bottom=1style3.borders=bordersal=xlwt.Alignment()al.horz=0x02al.vert=0x01#设置⽔平居中#设置垂直居中style3.alignment=alF51FSwitch=workbook.add_sheet('F51FSwitch',cell_overwrite_ok=True)#创建表格的某⼀分页first_col=F51FSwitch.col(0)#设置0、1、2、3列的列宽sec_col=F51FSwitch.col(1)thr_col=F51FSwitch.col(2)thr_col=F51FSwitch.col(2)for_col=F51FSwitch.col(3)first_col.width=150*25sec_col.width=100*25thr_col.width=120*25for_col.width=320*25F51FSwitch.write_merge(1,11,0,0,'QCMC-F5-1FA',style3)#合并单元格(1,11为⾏1到11⾏0,0为列0到0),填⼊内容#F51FSwitch.write_merge(1,10,0,1,'QCMC-F3-1FA')#合并0到1列,1到10⾏F51FSwitch.write_merge(1,11,1,1,'',style3)#添加style3的样式,只能填写⼀个,所以初始化样式的时候根据需求添加多个属性。F51FSwitch.write(0,0,'设备名称',style)F51FSwitch.write(0,1,'管理地址',style)F51FSwitch.write(0,2,'检查项',style)F51FSwitch.write(0,3,'检查结果',style)F51FSwitch.write(1,2,'设备状态',style1)F51FSwitch.write(2,2,'运⾏时间',style1)F51FSwitch.write(3,2,'运⾏温度',style1)F51FSwitch.write(4,2,'风扇A状态',style1)F51FSwitch.write(5,2,'风扇B状态',style1)F51FSwitch.write(6,2,'CPU使⽤率',style1)F51FSwitch.write(7,2,'内存使⽤率',style1)F51FSwitch.write(8,2,'聚合⼝A',style1)F51FSwitch.write(9,2,'聚合⼝B',style1)F51FSwitch.write(10,2,'⽇志条⽬',style1)F51FSwitch.write(11,2,'路由条⽬',style1)F51FSwitch.write(1,3,power11,style1)#添加抓取的字符串到相应的表格F51FSwitch.write(2,3,time11,style1)F51FSwitch.write(3,3,environment11,style1)F51FSwitch.write(4,3,fana11,style1)F51FSwitch.write(5,3,fanb11,style1)F51FSwitch.write(6,3,cpu11,style1)F51FSwitch.write

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论