侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

对Python 网络设备巡检脚本的实例讲解

Python  /  管理员 发布于 7年前   173

1、基本信息

我公司之前采用的是人工巡检,但奈何有大量网络设备,往往巡检需要花掉一上午(还是手速快的话),浪费时间浪费生命。

这段时间正好在学 Python ,于是乎想(其)要(实)解(就)放(是)双(懒)手。

好了,脚本很长又比较挫,有耐心就看看吧。

需要巡检的设备如下:

设备清单

设备型号

防火墙

华为 E8000E

H3C M9006

飞塔 FG3950B

交换机

华为 S9306

H3C S12508

Cisco N7K

路由器

华为 NE40E

负载

Radware RD5412

Radware RD6420

2、采集数据并写入文件

# 相关设备巡检命令就不介绍了。。。

01DMZ-E8000E.py # 华为 E8000E 交互脚本

#!/usr/bin/env pythonimport pexpectimport sysimport datetime d1=datetime.datetime.now()d3=d1+datetime.timedelta(days=-1)tdy=d3.strftime('%b %d')today=datetime.date.today().strftime('%Y%m%d') tt=tdy.split()if int(tt[-1]) < 10: tdy=tdy.replace('0',' ') ip=str(sys.argv[1])passwd=str(sys.argv[2])password=str(sys.argv[3]) child=pexpect.spawn('ssh 用户名@%s'%ip)fout=file('/usr/sh/shell/linux/xunjian/'+today+'/01DMZ-E8000E.txt','w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect('(?i)E8000E-1>')child.sendline("su")child.expect("(?i)assword:")child.sendline("%s"%password)child.expect("(?i)E8000E-1>")child.sendline("dis device | ex Normal")child.expect("(?i)E8000E-1>")child.sendline("dis version")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ): child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis temperature")child.expect("(?i)E8000E-1>")child.sendline("dir")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ): child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis memory-usage")child.expect("(?i)E8000E-1>")child.sendline("dis hrp state")child.expect("(?i)E8000E-1>")child.sendline("dis firewall session table")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ): child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis ip routing-table protocol static")child.expect("(?i)E8000E-1>")child.sendline("dis int brief | in up")child.expect("(?i)E8000E-1>")child.sendline("dis acl 3004")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ): child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis acl 3005")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ): child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis acl 3006")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ): child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis acl 3007")index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"])if ( index == 0 ): child.send("a")child.expect("(?i)E8000E-1>")child.sendline("dis alarm all")child.expect("(?i)E8000E-1>")child.sendline("dis logbuffer | in %s"%tdy)for i in range(20): index = child.expect(["(?i)---- More ----","(?i)E8000E-1>"]) if ( index == 0 ): child.send(" ") else: child.sendline("q") break

02_03-M9006.py # H3C M9006 交互脚本

#!/usr/bin/env pythonimport pexpectimport sysimport datetimed1=datetime.datetime.now()d3=d1+datetime.timedelta(days=-1)tdy=d3.strftime('%b')today=datetime.date.today().strftime('%Y%m%d') ip=str(sys.argv[1])passwd=str(sys.argv[2])password=str(sys.argv[3])  if ip == '判断ip,手动打码': txt='03SM-M9006.txt'else: txt='02DMZ-M9006.txt' child=pexpect.spawn('ssh 用户名@%s'%ip)fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect('(?i)M9006>')child.sendline("su")child.expect("(?i)assword:")child.sendline("%s"%password)child.expect("M9006>")child.sendline("dis device | ex Normal")child.expect("M9006>")child.sendline("dis version | in uptime")child.expect("M9006>")child.sendline("dis environment")for i in range(10): index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") else: child.sendline("dir | in total") breakchild.expect("M9006>")child.sendline("dis memory")for i in range(10): index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") else: child.sendline("dis irf link") breakchild.expect("M9006>")child.sendline("dis redundancy group")child.expect("---- More ----")child.send('a')child.expect("M9006>")child.sendline("dis session statistics summary")child.expect("M9006>")child.sendline("dis ip routing-table protocol static")child.expect("M9006>")child.sendline("dis int brief | in UP")for i in range(10): index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") else: breakif ip == '判断ip': child.sendline("dis acl 3001") for i in range(10): index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") else: child.sendline("dis acl 3002") child.expect("M9006>") child.sendline("dis alarm") breakelse: child.sendline("dis object-policy ip") for i in range(20): index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") else: child.sendline("dis alarm") breakchild.expect("M9006>")child.sendline("dis logbuffer reverse | in %s"%tdy)index = child.expect(["(?i)---- More ----","M9006>"]) 这边其实只要一个 for 循环就可以了,不高兴改了if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","M9006>"]) if ( index == 0 ):  child.send(" ")  index = child.expect(["(?i)---- More ----","M9006>"])  if ( index == 0 ):  child.send(" ")  index = child.expect(["(?i)---- More ----","M9006>"])  if ( index == 0 ):  child.send(" ")  index = child.expect(["(?i)---- More ----","M9006>"])  if ( index == 0 ):  child.send(" ")  index = child.expect(["(?i)---- More ----","M9006>"])  if ( index == 0 ):   child.send(" ")   index = child.expect(["(?i)---- More ----","M9006>"])   if ( index == 0 ):   child.send("a")   index = child.expect(["(?i)---- More ----","M9006>"])   if ( index == 0 ):   child.send("a")   else:   child.sendline('')child.expect("M9006>")child.sendline("q")

04IN-FG3950B.py # 飞塔 FG3950B 交互脚本

#!/usr/bin/env pythonimport pexpectimport sysimport datetimetoday=datetime.date.today().strftime('%Y%m%d') ip=str(sys.argv[1])passwd=str(sys.argv[2]) child=pexpect.spawn('ssh 用户@%s'%ip)fout=file('/usr/sh/shell/linux/xunjian/'+today+'/04IN-FG3950B.txt','w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect('W-IN-FG3950-1 #')child.sendline("get sys performance status")for i in range(5): index = child.expect(["(?i)--More--","W-IN-FG3950-1 #"]) if ( index == 0 ): child.send(" ") else: child.sendline("diagnose sys session stat") breakchild.expect('W-IN-FG3950-1 #')child.sendline("get route info routing-table static")child.expect('--More--')child.send(' ')child.expect('W-IN-FG3950-1 #')child.sendline("exit")

05_06DMZ-S9306.py # 华为 S9306 交互脚本

#!/usr/bin/env pythonimport pexpectimport sysimport datetime d1=datetime.datetime.now()d3=d1+datetime.timedelta(days=-1)tdy=d3.strftime('%b %d')today=datetime.date.today().strftime('%Y%m%d') tt=tdy.split()if int(tt[-1]) < 10: tdy=tdy.replace('0',' ') ip=str(sys.argv[1])passwd=str(sys.argv[2])password=str(sys.argv[3]) child=pexpect.spawn('ssh 用户名@%s'%ip) if ip == '判断ip,不止一个该类型设备': txt='05DMZ-S9306-1.txt'else: txt='06DMZ-S9306-2.txt' fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect('<JSYD-WX-12580-DMZ-9306')child.sendline("su")child.expect("(?i)assword:")child.sendline("%s"%password)child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis device")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis version | in Quidway")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dir")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis cpu-usage")index = child.expect(["(?i)---- More ----","<JSYD-WX-12580-DMZ-9306(?i)"])if ( index == 0 ): child.send("a")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis memory-usage")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis int brief | in up")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis vrrp brief")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis mac-address total-number")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis arp statistics all")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis ip routing-table protocol static")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis temperature all")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis alarm all")child.expect("<JSYD-WX-12580-DMZ-9306")child.sendline("dis logbuffer | in %s"%tdy)for i in range(50): index = child.expect(["(?i)---- More ----","<JSYD-WX-12580-DMZ-9306(?i)"]) if ( index == 0 ): child.send(" ") else: child.sendline("q") break

07_08-S12508.py # H3C S12508 交互脚本

#!/usr/bin/env pythonimport pexpectimport sysimport datetimed1=datetime.datetime.now()d3=d1+datetime.timedelta(days=-1)tdy=d3.strftime('%b %d')today=datetime.date.today().strftime('%Y%m%d') tt=tdy.split()if int(tt[-1]) < 10: tdy=tdy.replace('0',' ') ip=str(sys.argv[1])passwd=str(sys.argv[2])password=str(sys.argv[3]) child=pexpect.spawn('ssh 用户名@%s'%ip) IP=['ip1','ip2'] if ip == IP[0]: txt='07DMZ-S12508.txt' name='<W-DMZ-G1G2-12508>'else: txt='08IN-S12508.txt' name='<W-IN-G7G8-12508>' fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect("%s"%name)child.sendline("su")child.expect("(?i)assword:")child.sendline("%s"%password)child.expect("%s"%name)child.sendline("dis device | ex Normal")child.expect("%s"%name)child.sendline("dis version | in H3C S12508")child.expect("%s"%name)child.sendline("dir")child.expect("%s"%name)child.sendline("dis memory")child.expect("%s"%name)child.sendline("dis irf link")for i in range(10): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("dis int brief | in UP") breakfor i in range(20): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("dis mac-address count") breakchild.expect("%s"%name)child.sendline("dis arp all count")if ip == "手动打码": child.expect("%s"%name) child.sendline("dis ip routing-table vpn-instance Dmz protocol static") for i in range(20): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("dis ip routing-table vpn-instance Inside protocol static") for i in range(20): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ):  child.send(" ") else:  child.sendline(" ")  break breakchild.expect("%s"%name)child.sendline("dis environment")for i in range(50): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("dis alarm") breakchild.expect("%s"%name)child.sendline("dis logbuffer | in %s"%tdy) for i in range(50): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("q") sys.exit()

09_10SM-N7K.py # Cisco N7K 交互脚本

#!/usr/bin/env pythonimport pexpectimport sysimport datetimetoday=datetime.date.today().strftime('%Y%m%d') ip=str(sys.argv[1])passwd=str(sys.argv[2]) child=pexpect.spawn('telnet %s'%ip)  if ip == '是个ip': txt='09SM-N7K-1.txt' name='W-SM-N7K-1#'else: txt='10SM-N7K-2.txt' name='W-SM-N7K-2#' fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w')child.logfile = foutchild.expect('login:')child.sendline("发送用户名")child.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect("%s"%name)child.sendline("sh hardware | in ok")child.expect("%s"%name)child.sendline("sh version | in uptime")child.expect("%s"%name)child.sendline("dir")child.expect("%s"%name)child.sendline("sh int brief | in up")for i in range(10): index = child.expect(["(?i)More--","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("sh hsrp brief") breakchild.expect("%s"%name)child.sendline("sh mac address-table count")child.expect("%s"%name)child.sendline("sh ip arp | in number")child.expect("%s"%name)child.sendline("sh ip route static summary")child.expect("%s"%name)child.sendline("sh environment temperature")for i in range(10): index = child.expect(["(?i)More--","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("sh vpc") breakfor i in range(10): index = child.expect(["(?i)More--","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("sh logging last 30") breakfor i in range(10): index = child.expect(["(?i)More--","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("exit") sys.exit()

11_12DMZ-NE40E.py # 华为 NE40E 交互脚本

#!/usr/bin/env pythonimport pexpectimport sysimport datetimed1=datetime.datetime.now()d3=d1+datetime.timedelta(days=-1)tdy=d3.strftime('%b %d')today=datetime.date.today().strftime('%Y%m%d') tt=tdy.split()if int(tt[-1]) < 10: tdy=tdy.replace('0',' ') ip=str(sys.argv[1])passwd=str(sys.argv[2]) child=pexpect.spawn('ssh 用户名@%s'%ip) IP=['ip1','ip2'] if ip == IP[0]: txt='11DMZ-NE40E-1.txt' name='<W-SM-E11-NE40E-01>'elif ip == IP[1]: txt='12DMZ-NE40E-2.txt' name='<W-SM-E12-NE40E-02>'else: print "IP Input Error!" sys.exit() fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)child.expect("(?i)N]:")child.sendline("n")child.expect("%s"%name)child.sendline("dis device | ex Normal")child.expect("%s"%name)child.sendline("dis version | in NE40E-X8 uptime")child.expect("%s"%name)child.sendline("dir")index = child.expect(["(?i)---- More ----","%s"%name])if ( index == 0 ): child.send(" ") index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("dis memory-usage")else: child.sendline("dis memory-usage")child.expect("%s"%name)child.sendline("dis int brief | in up")child.expect("%s"%name)child.sendline("dis ip routing-table protocol static")child.expect("%s"%name)child.sendline("dis temperature")for i in range(40): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("dis alarm all") breakchild.expect("%s"%name)child.sendline("dis logbuffer | in %s"%tdy)for i in range(30): index = child.expect(["(?i)---- More ----","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("q") break

13_16-RD5412_6420.py # Radware RD5412 交互脚本,只要掌握一个,其他都是套路

#!/usr/bin/env pythonimport pexpectimport sysimport datetimed1=datetime.datetime.now()d3=d1+datetime.timedelta(days=-1)tdy=d3.strftime('%b %d')today=datetime.date.today().strftime('%Y%m%d') tt=tdy.split()if int(tt[-1]) < 10: tdy=tdy.replace('0',' ') ip=str(sys.argv[1])passwd=str(sys.argv[2]) child=pexpect.spawn('ssh 还是用户名@%s'%ip) IP=['ip1','ip2','ip3','ip4'] if ip == IP[0]: txt='13DMZ-RD5412-1.txt'elif ip == IP[1]: txt='14DMZ-RD5412-2.txt'elif ip == IP[2]: txt='15SM-RD6420-1.txt'elif ip == IP[3]: txt='16SM-RD6420-2.txt'else: print "IP Input Error!" sys.exit()name='Standalone ADC(?i)' fout=file('/usr/sh/shell/linux/xunjian/'+today+'/'+txt,'w')child.logfile = foutchild.expect('(?i)ssword:')child.sendline("%s"%passwd)if ip == IP[3]: child.expect("(?i)y]:") child.sendline("y")child.expect("%s"%name)child.sendline("/i/sys/general")child.expect("%s"%name)child.sendline("/i/sys/ps")child.expect("%s"%name)child.sendline("/i/sys/fan")child.expect("%s"%name)child.sendline("/i/link")index = child.expect(["Press q to quit, any other key to continue","%s"%name])if ( index == 0 ): child.send(" ") index = child.expect(["Press q to quit, any other key to continue","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("/i/sys/capacity slb")else: child.sendline("/i/sys/capacity slb")index = child.expect(["Press q to quit, any other key to continue","%s"%name])if ( index == 0 ): child.send(" ") index = child.expect(["Press q to quit, any other key to continue","%s"%name]) if ( index == 0 ): child.send(" ") index = child.expect(["Press q to quit, any other key to continue","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("/stats/mp/cpu") else: child.sendline("/stats/mp/cpu")else: child.sendline("/stats/mp/cpu")child.expect("%s"%name)child.sendline("/stats/mp/mem")child.expect("%s"%name)child.sendline("/i/sys/temp")child.expect("%s"%name)child.sendline("/i/l3/vrrp")child.expect("%s"%name)child.sendline("/i/sys/log")for i in range(50): index = child.expect(["Press q to quit, any other key to continue","%s"%name]) if ( index == 0 ): child.send(" ") else: child.sendline("exit") break#index = child.expect(["(?i)n]:","%s"%name])#if ( index == 0 ):if ip == IP[3]: child.expect("(?i)n]:") child.sendline("y")#else:# passchild.expect("(?i)n]:")child.sendline("n")

3、编写邮件脚本

mail.py

#!/usr/bin/python# -*- coding: utf-8 -*-from email.header import Headerimport smtplib import email.MIMEMultipart# import MIMEMultipart import email.MIMEText# import MIMEText import email.MIMEBase# import MIMEBase import os.path import sys import mimetypes import email.MIMEImage# import MIMEImage import datetime  tday=datetime.date.today().strftime('%Y/%m/%d')#命令 mail.py <1:发送方(回复地址)[email protected]> <2:发送地址,多个以;隔开> <3:发送文件> From = "%s<*@139.com>" % Header("XXX","utf-8")ReplyTo=sys.argv[1]To = sys.argv[2]file_name = sys.argv[3]#附件名 file_name1 = sys.argv[4] server = smtplib.SMTP("smtp.139.com",25) server.login("[email protected]","password") #仅smtp服务器需要验证时  # 构造MIMEMultipart对象做为根容器 main_msg = email.MIMEMultipart.MIMEMultipart()  # 构造MIMEText对象做为邮件显示内容并附加到根容器 text_msg = email.MIMEText.MIMEText("message内容正文",_charset="utf-8") main_msg.attach(text_msg)  # 构造MIMEBase对象做为文件附件内容并附加到根容器 ctype,encoding = mimetypes.guess_type(file_name) if ctype is None or encoding is not None:  ctype='application/octet-stream' maintype,subtype = ctype.split('/',1) file_msg=email.MIMEImage.MIMEImage(open(file_name,'rb').read(),subtype) file_msg1=email.MIMEImage.MIMEImage(open(file_name1,'rb').read(),subtype) ## 设置附件头 basename = os.path.basename(file_name) file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改邮件头 main_msg.attach(file_msg)  basename1 = os.path.basename(file_name1)file_msg1.add_header('Content-Disposition','attachment', filename = basename1)#修改邮件头main_msg.attach(file_msg1) # 设置根容器属性 main_msg['From'] = From main_msg['Reply-to'] = ReplyTo #main_msg['To'] = To main_msg['Subject'] = u"[每日巡检] %s邮件标题" %tdaymain_msg['Date'] = email.Utils.formatdate()  #main_msg['Bcc'] = To # 得到格式化后的完整文本 fullText = main_msg.as_string( )  # 用smtp发送邮件 try:  server.sendmail(From, To.split(';'), fullText) finally:  server.quit()

mail_excel_error.py # 报错通知邮件:excel不存在

#!/usr/bin/env python# -*- coding:utf-8 -*-#import sys#reload(sys)import smtplib,string,datetime,xlrd tday=datetime.date.today().strftime('%Y/%m/%d')HOST="smtp.139.com"SUBJECT="[每日巡检] %s哈哈哈"%tdayTO="*.com"FROM="*@139.com" text="excel no cunzai" BODY=string.join(( "FROM: %s" % FROM, "To: %s" % TO, "Subject: %s" % SUBJECT, "", text ), "\r\n")server=smtplib.SMTP()server.connect(HOST,"25")server.starttls()server.login(FROM,"密码")server.sendmail(FROM,[TO],BODY)server.quit()

mail_zip_error.py # 邮件告警:巡检历史记录压缩文档不存在

#!/usr/bin/env python# -*- coding:utf-8 -*-#import sys#reload(sys)import smtplib,string,datetime,xlrd tday=datetime.date.today().strftime('%Y/%m/%d')HOST="smtp.139.com"SUBJECT="[每日巡检] %s嘻嘻嘻" %tdayTO="asdas.com"FROM="***@139.com" text="zip no cunzai" BODY=string.join(( "FROM: %s" % FROM, "To: %s" % TO, "Subject: %s" % SUBJECT, "", text ), "\r\n")server=smtplib.SMTP()server.connect(HOST,"25")server.starttls()server.login(FROM,"PASSWORD")server.sendmail(FROM,[TO],BODY)server.quit()

4、数据处理

wangluo_xunjian.py # 根据巡检内容制表

#!/usr/bin/env python# -*- coding:utf-8 -*-#import sys#reload(sys)import xlsxwriter,os,datetime def cmd(sname,fname):  # 该函数判断巡检命令行所在输出文件位置 i=1 f=open(fname) line_hang_list=[] for line in f: if line.find(sname) == 0: line_hang_list.append(i) i+=1 f.close return line_hang_list def cmd1(sname,fname): # 同上 i=1 f=open(fname) line_hang_list=[] for line in f: if sname in line: line_hang_list.append(i) i+=1 f.close return line_hang_list tday=datetime.date.today().strftime('%Y.%m.%d')today=datetime.date.today().strftime('%Y%m%d')workbook=xlsxwriter.Workbook(u"/usr/sh/shell/linux/xunjian/%s/网络设备巡检-%s.xlsx"%(today,tday),{'strings_to_numbers':True}) file_01='/usr/sh/shell/linux/xunjian/'+str(today)+'/01DMZ-E8000E.txt'file_02_1='/usr/sh/shell/linux/xunjian/'+str(today)+'/03SM-M9006.txt'file_02_2='/usr/sh/shell/linux/xunjian/'+str(today)+'/02DMZ-M9006.txt'file_03='/usr/sh/shell/linux/xunjian/'+str(today)+'/04IN-FG3950B.txt'  # 新建 sheetworksheet0=workbook.add_worksheet(u"防火墙")worksheet1=workbook.add_worksheet(u"交换机")worksheet2=workbook.add_worksheet(u"路由器")worksheet3=workbook.add_worksheet(u"负载") # 设置单元格格式(居中,颜色,边框,合并,列宽,列隐藏等)colour='#660099' format_title=workbook.add_format()format_title.set_border(1)format_title.set_bottom(2)format_title.set_bold(1)format_title.set_font_color('white')format_title.set_bg_color(colour)format_title.set_align('center')format_title.set_valign('vcenter') format_nr=workbook.add_format()format_nr.set_border(1)format_nr.set_bottom(2)format_nr.set_align('center')format_nr.set_valign('vcenter') format_nrr=workbook.add_format()format_nrr.set_border(1)format_nrr.set_valign('vcenter')format_nrr.set_text_wrap() format_bottom=workbook.add_format()format_bottom.set_border(1)format_bottom.set_bottom(2)format_bottom.set_valign('vcenter')format_bottom.set_text_wrap() format_rt=workbook.add_format()format_rt.set_border(1)format_rt.set_right(2)format_rt.set_valign('left')format_rt.set_text_wrap() format_right=workbook.add_format()format_right.set_border(1)format_right.set_right(2)format_right.set_bottom(2)format_right.set_valign('vcenter')format_right.set_text_wrap() format_red=workbook.add_format()format_red.set_font_color('red')format_red.set_border(1)format_red.set_right(2)format_red.set_valign('vcenter') format_rd=workbook.add_format()format_rd.set_font_color('red')format_rd.set_border(1)format_rd.set_right(2)format_rd.set_bottom(2)format_rd.set_valign('vcenter') # 填写相关固定单元格内容firewall_title=[u'设备名称',u'设备类型',u'IP地址',u'检查项',u'命令',u'说明',u'检查结果'] firewall_jc=[u'设备状态',u'运行时长',u'运行温度',u'Flash状态',u'CPU使用率',u'内存使用率',u'冗余组状态',u'session数目',u'路由条数',u'端口状态',u'策略条数',u'告警',u'日志',u'板卡状态',u'运行时长',u'运行温度',u'Flash状态',u'CPU使用率',u'内存使用率',u'堆叠状态',u'冗余组状态',u'session数目',u'路由条数',u'端口状态',u'策略条数',u'告警',u'日志',u'板卡状态',u'运行时长',u'运行温度',u'Flash状态',u'CPU使用率',u'内存使用率',u'堆叠状态',u'冗余组状态',u'session数目',u'路由条数',u'端口状态',u'策略条数',u'告警',u'日志',u'运行时长',u'CPU使用率 (BOMC看)',u'内存使用率',u'网络流量',u'session数目',u'新建session速率',u'接口状态',u'冗余组状态',u'路由条数',u'日志',u'策略条数',u'告警'] firewall_cmd=['dis device | ex Normal','dis version','dis temperature','dir',u'在BOMC看','dis memory-usage','dis hrp state','dis firewall session table','dis ip routing-table protocol static','dis int brief (dis logbuffer | in DOWN)','dis acl 3004 (3004-3007)','dis alarm all','dis logbuffer | in [data]','dis device | ex Normal','dis version | in uptime','dis environment','dir | in total',u'在BOMC看','dis memory','dis irf link','dis redundancy group','dis session statistics summary','dis ip routing-table protocol static','dis int brief (dis logbuffer | in DOWN)','dis object-policy ip','dis alarm','dis logbuffer | in [month]','dis device | ex Normal','dis version | in uptime','dis environment','dir | in total',u'在BOMC看','dis memory','dis irf link','dis redundancy group','dis session statistics summary','dis ip routing-table protocol static','dis int brief (dis logbuffer | in DOWN)','dis acl all','dis alarm','dis logbuffer | in [month]','get sys performance status','','','','diagnose sys session stat','',u'网页登录查看',u'网页登录查看','get route info routing table static',u'网页登录查看',u'网页登录查看',u'网页登录查看'] firewall_sm=[u'填写Status是Abnormal的项',u'填写已运行天数,小时数',u'填写温度范围',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写本机和邻居的角色,看有无发生主备切换',u'填写链接总数',u'填写路由数目',u'填写状态为UP的端口数目',u'填写策略数目',u'填写告警内容,无告警则填写“无告警”',u'填写异常日志,无异常则填写“正常”',u'填写State为Absent,且Type不为NONE的项',u'填写已运行天数,小时数',u'填写温度范围',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率范围',u'填写Status不是UP的项',u'填写Status,看有无发生主备切换',u'填写链接总数',u'填写路由数目',u'填写状态为UP的端口数目',u'填写策略数目(所有rule的总数)',u'填写告警内容,无告警则填写“无告警”',u'填写异常日志,无异常则填写“正常”',u'填写State为Absent,且Type不为NONE的项',u'填写已运行天数,小时数',u'填写温度范围',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率范围',u'填写Status不是UP的项',u'填写Status,看有无发生主备切换',u'填写链接总数',u'填写路由数目',u'填写状态为UP的端口数目',u'填写策略数目(acl 3001+3002的总条目数)',u'填写告警内容,无告警则填写“无告警”',u'填写异常日志,无异常则填写“正常”',u'填写已运行天数,小时数',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写30分钟内平均带宽占用(kbps)',u'填写session_count值',u'填写setup_rate值',u'填写启用状态的接口数目',u'填写冗余状态',u'填写路由数目',u'填写异常日志,无异常则填写“正常”',u'填写策略数目',u'填写告警内容,无告警则填写“无告警”']  switch_title=[u'设备名称',u'设备类型',u'IP地址',u'检查项',u'命令',u'说明',u'检查结果'] switch_jc=[u'设备状态',u'运行时长',u'Flash状态',u'CPU使用率',u'内存使用率',u'接口状态',u'VRRP状态',u'MAC地址条目数',u'ARP条目数',u'路由条目数',u'运行温度',u'告警',u'日志']switch_jc1=[u'设备状态',u'运行时长',u'Flash状态',u'CPU使用率',u'内存使用率',u'堆叠状态',u'接口状态',u'MAC地址条目数',u'ARP条目数',u'路由条目数',u'运行温度',u'告警',u'日志'] switch_jc2=[u'设备状态',u'运行时长',u'Flash状态',u'CPU使用率',u'内存使用率',u'堆叠状态',u'接口状态',u'MAC地址条目数',u'ARP条目数',u'运行温度',u'告警',u'日志'] switch_cmd=['dis device','dis version | in Quidway','dir','dis cpu-usage','dis memory-usage','dis int brief (dis logbuffer | in IF_STATE)','dis vrrp brief','dis mac-address total-number','dis arp statistics all','dis ip routing-table protocol static','dis temperature all','dis alarm all','dis logbuffer | in [date]'] switch_cmmd=['dis device | ex Normal','dis version | in H3C S12508','dir',u'在BOMC看','dis memory','dis irf link','dis int brief (dis logbuffer reverse | in UPDOWN)','dis mac-address count','dis arp all count','dis ip routing-table vpn-instance Dmz/Inside protocol static','dis environment','dis alarm','dis logbuffer reverse | in [date]'] switch_cmd1=['dis device | ex Normal','dis version | in H3C S12508','dir',u'在BOMC看','dis memory','dis int brief (dis logbuffer reverse | in UPDOWN)','dis vrrp','dis mac-address count','dis arp all count','dis ip routing-table protocol static','dis environment','dis alarm','dis logbuffer reverse | in [date]'] switch_cmd2=['dis device | ex Normal','dis version | in H3C S12508','dir',u'在BOMC看','dis memory','dis irf link','dis int brief (dis logbuffer reverse | in UPDOWN)','dis mac-address count','dis arp all count','dis environment','dis alarm','dis logbuffer reverse | in [date]'] switch_sm=[u'查看电源、风扇以及板卡状态,填写异常项',u'填写已运行天数,小时数',u'填写total和free的flash大小',u'填写CPU使用率',u'填写内存使用率',u'填写状态为UP的端口数目',u'查看VRRP主备状态',u'填写总的mac-address条目数',u'填写动态和静态ARP条目数',u'填写路由数目',u'填写温度范围',u'填写告警内容,无告警则填写“无告警”',u'填写异常日志,无异常则填写“正常”'] switch_ssm=[u'填写状态异常的项',u'填写已运行天数,小时数',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写Status不是UP的项',u'填写状态为UP的端口数目',u'填写总的mac-address条目数',u'填写总的ARP条目数',u'填写路由数目(Dmz和Inside路由总和)',u'填写温度范围',u'填写设备告警,无则填写“无告警”',u'填写异常日志,无异常则填写“正常”'] switch_sm1=[u'填写状态异常的项',u'填写已运行天数,小时数',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写状态为UP的端口数目',u'查看VRRP主备状态',u'填写总的mac-address条目数',u'填写总的ARP条目数',u'填写路由数目',u'填写温度范围',u'填写设备告警,无则填写“无告警”',u'填写异常日志,无异常则填写“正>常”'] switch_sm2=[u'填写状态异常的项',u'填写已运行天数,小时数',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写Status不是UP的项',u'填写状态为UP的端口数目',u'填写总的mac-address条目数',u'填写总的ARP条目数',u'填写温度范围',u'填写设备告警,无则填写“无告警”',u'填写异常日志,无异常则填写“正>常”'] route_title=[u'设备名称',u'设备类型',u'IP地址',u'检查项',u'命令',u'说明',u'检查结果'] route_jc=[u'设备状态',u'运行时长',u'Flash状态',u'CPU使用率',u'内存使用率',u'接口状态',u'路由条数',u'运行温度',u'告警',u'日志'] route_cmd=['dis device | ex Normal','dis version | in NE40E-X8 uptime','dir',u'在BOMC看','dis memory-usage','dis int brief (dis logbuffer | in IF_STATE)','dis ip routing-table protocol static','dis temperature','dis alarm all','dis logbuffer | in [date]'] route_sm=[u'填写Status不是“Normal”的项',u'填写已运行天数,小时数',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写状态为UP的端口数目',u'填写路由数目',u'填写温度范围',u'填写告警内容,无告警则填写“无告警”',u'填写异常日志,无异常则填写“正常”'] fuzai_title=[u'设备名称',u'设备类型',u'IP地址',u'检查项',u'命令',u'说明',u'检查结果'] fuzai_jc=[u'运行时长',u'电源状态',u'风扇状态',u'端口状态',u'各表项数值',u'CPU使用率',u'内存使用率',u'硬件温度',u'冗余状态',u'日志'] fuzai_cmd=['/i/sys/general','/i/sys/ps','/i/sys/fan','/i/link','/i/sys/capacity slb','/stats/mp/cpu','/stats/mp/mem','/i/sys/temp','/i/l3/vrrp','/i/sys/log'] fuzai_sm=[u'填写已运行天数,小时数',u'填写电源状态',u'填写风扇状态',u'填写Link处于UP状态的端口数',u'填写real servers/server groups/virtual servers/filters当前值',u'填写CPU使用率',u'填写内存使用率',u'填写温度',u'填写VRRP状态,"master"或者"backup"',u'填写异常日志,无异常则填写“正常”'] newsmswitch_title=[u'设备状态',u'运行时长',u'Flash状态',u'CPU使用率',u'内存使用率',u'接口状态',u'HSRP状态',u'MAC地址条目数',u'ARP条目数',u'路由条目数',u'运行温度',u'VPC状态',u'日志']newsmswitch_cmd=['sh hardware | in ok','sh version | in uptime','dir',u'在BOMC看',u'在BOMC看','sh int brief (sh int brief | in up)','sh hsrp brief','sh mac address-table count','sh ip arp | in number','sh ip route static summary','sh environment temperature','sh vpc','sh logging last 30'] newsmswitch_sm=[u'填写状态为OK的模块数',u'填写已运行天数,小时数',u'填写total和free的flash大小',u'填写CPU使用率峰值和平均值',u'填写内存使用率',u'填写状态为UP的端口数目',u'查看HSRP状态(Active local则正常)',u'填写总的mac-address条目数',u'填写总的ARP条目数',u'填写路由数目',u'填写CurTemp范围',u'查看VPC状态是否正常',u'查看日志,无异常则填写"正常"'] # ip 我就隐藏掉啦,虽然也没什么意思host={"DMZ-E8000E":[u'防火墙',"ip1"],"DMZ-M9006":[u'防火墙','ip2'],"SM-M9006":[u'防火墙','ip3'],"IN-FG3950B":[u'防火墙',"ip4"],"DMZ-S9306-1":[u'交换机',"ip5"],"DMZ-S9306-2":[u'交换机',"ip6"],"DMZ-S12508":[u'交换机',"ip7"],"IN-S12508":[u'交换机',"ip8"],"SM-S12508-1":[u'交换机',"ip9"],"SM-S12508-2":[u'交换机',"ip10"],"DMZ-NE40E-1":[u'路由器',"ip11"],"DMZ-NE40E-2":[u'路由器',"ip12"],"DMZ-RD5412-1":[u'负载',"ip13"],"DMZ-RD5412-2":[u'负载',"ip14"],"SM-RD6420-1":[u'负载',"ip15"],"SM-RD6420-2":[u'负载',"ip16"],"SM-N7K-1":[u"交换机","ip17"],"SM-N7K-2":[u"交换机","ip18"]} # 开始填写固定单元格内容worksheet0.write_row('A1',firewall_title,format_title)worksheet0.merge_range('A2:A14','DMZ-E8000E',format_nr)worksheet0.merge_range('B2:B14',host["DMZ-E8000E"][0],format_nr)worksheet0.merge_range('C2:C14',host["DMZ-E8000E"][1],format_nr)worksheet0.merge_range('A15:A28','DMZ-M9006',format_nr)worksheet0.merge_range('B15:B28',host["DMZ-M9006"][0],format_nr)worksheet0.merge_range('C15:C28',host["DMZ-M9006"][1],format_nr)worksheet0.merge_range('A29:A42','SM-M9006',format_nr)worksheet0.merge_range('B29:B42',host["SM-M9006"][0],format_nr)worksheet0.merge_range('C29:C42',host["SM-M9006"][1],format_nr)worksheet0.merge_range('A

  • 上一条:
    Python3之读取连接过的网络并定位的方法
    下一条:
    python爬虫_实现校园网自动重连脚本的教程
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客