介绍

只写了交换机的,路由器、防火墙、负载等其它设备以后,有需求再写,下面以一组交换机为例。

思路

1、收取交换机的信息
需要哪些信息,哪些命令,不同品牌交换机命令不同(本篇以H3C为例),需要提前规划好。交换机的IP、名字、密码等信息,写入数据库比较方便。
2、把需要的信息填入表格
根据关键字提取交换机中的状态信息,并一次填入设计好的表格中,难点是字符串的截取和excel表格的设计。同款交换机相同的命令,可能用同一个关键字,抓取的信息也不一样,这个要多试几次。
3、编写邮件,发送邮件。
4、linux编写任务计划,crontab定期执行python代码,定期发送邮件。

代码

抓取交换机需要的配置信息

import pexpect
import sys
import datetime
import pymssql
import ostoday=datetime.date.today().strftime('%Y%m%d')
path = "/root/xunjian/"+today
os.mkdir(path,777)#创建目录def Switch(name,ip,passwd):try:#try except 防止有一个命令错误,导致程序不能进行,其实不加也可以,如果有命令没输出,下一个代码也会报错。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("display cpu-usage")#查看cpu状态child.expect('<%s>'%name)child.sendline("display memory")#查看内存状态child.expect('<%s>'%name)child.sendline("display  environment")#运行温度child.expect('<%s>'%name)child.sendline("display fan")#风扇状态,一般输出都有2个child.expect('<%s>'%name)child.sendline("display power")#电源状态child.expect('<%s>'%name)child.sendline("display ip routing-table")#路由表for i in range(10):index = child.expect([name1,'<%s>'%name])if ( index == 0 ):child.send(" ")else:child.sendline("display interface brief")#端口状态breakfor i in range(10):index = child.expect([name1,'<%s>'%name])if ( index == 0 ):child.send(" ")else:child.sendline("dis  version")#版本,为了看运行时间breakfor i in range(10):index = child.expect([name1,'<%s>'%name])if ( index == 0 ):child.send(" ")else:child.sendline("display log")#日志,日志较多,循环100个空格,怕输出不全。break                  for i in range(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输出内容导成列表
for line in listall:Switch(line[1],line[2],line[3])
conn.commit()
conn.close()

代码

提取需要的信息,并塞入表格,因为设备太多,我只展示一个设备的代码。

import pymssql
import xlwt
import datetime
from xlwt import *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()#读取文档的每一行,至列表,如果不是双电源的问题,直接 for line in file.readlines():
i=1
for line in listlist:#读取列表每一行,因为两个电源的所有输出信息都一样,只能匹配关键字后输出下一行字符串,实属无奈。if '1       Normal' in line:power11=line[8:15].rstrip()#设备状态,都是匹配关键字,然后截取本来的字符串输出,这个要多试几次。print(power11)#确认输出是自己想要的字符串。if 'Uptime is' in line:#运行时间time11=line[-33:].rstrip()print(time11)if 'hotspot' in line:environment11=line[17:21].rstrip()#运行温度print(environment11)if 'Fan 1:' in line:fana11=listlist[i+1][-8:].rstrip()#电源状态,匹配关键字,截取下一行的字符串print(fana11)if 'Fan 2:' in line:fanb11=listlist[i+1][-8:].rstrip()#电源状态,匹配关键字,截取下一行的字符串print(fanb11)if 'in last 5 minutes' in line:cpu11=line[6:10].rstrip()#cpu使用率print(cpu11)if 'Mem:' in line:memory11=line[-7:].rstrip()#内存print(memory11)if 'To_F5-Core-S12508_Ten-G1' in line:#端口briefa11=line[20:30].rstrip()print(briefa11)if 'To_F5-Core-S12508_Ten-G2' in line:briefb11=line[20:30].rstrip()print(briefb11)if 'Current messages:' in line:#日志条目log11=line[-5:].rstrip()print(log11)if 'Routes' in line:routingtable11=line[-5:].rstrip()#路由条目print(routingtable11)i += 1workbook = xlwt.Workbook()#创建表格style = XFStyle()#初始化样式,此样式包含了单元格背景颜色和单元格边框两个属性。
pattern = Pattern()
pattern.pattern = Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = Style.colour_map['blue'] #设置单元格背景色为蓝色
style.pattern = pattern
borders = xlwt.Borders()#设置表格的边框,1是默认实线黑色。
borders.left = 1
borders.right = 1
borders.top = 1
borders.bottom = 1
style.borders = bordersstyle1 = XFStyle()#只有边框
borders = xlwt.Borders()
borders.left = 1
#borders.left = xlwt.Borders.THIN
borders.right = 1
borders.top = 1
borders.bottom = 1
style1.borders = bordersstyle3 = XFStyle()#初始化样式,带边框和表格内容居中。
borders = xlwt.Borders()
borders.left = 1
#borders.left = xlwt.Borders.THIN
borders.right = 1
borders.top = 1
borders.bottom = 1
style3.borders = borders
al = xlwt.Alignment()
al.horz = 0x02      # 设置水平居中
al.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)
for_col=F51FSwitch.col(3)
first_col.width=150*25
sec_col.width=100*25
thr_col.width=120*25
for_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,'10.20.5.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(7,3,memory11,style1)
F51FSwitch.write(8,3,briefa11,style1)
F51FSwitch.write(9,3,briefb11,style1)
F51FSwitch.write(10,3,log11,style1)
F51FSwitch.write(11,3,routingtable11,style1)print ('创建excel文件完成!')
workbook.save('/root/xunjian/%sF5Switchxunjian.xls'%today)

发送邮件代码

前两个文章有介绍,不写了。

任务计划 linux crontab(不会的请百度)

crontab -l 查看任务计划

crontab -e编写任务计划

结果

吐槽

代码一直执行没问题,突然前两天突然不发邮件了。
发现没生成excel文档
但是交换机的txt文档还在
手动执行生成excel文档的代码,报错。说utf-8格式问题
在windows python下面执行是OK的
后来发现有一个txt的文档是ANSI格式,其它的txt都是UEF-8格式
实在不明白为啥会有个txt是ANSI格式的,然后一顿改代码,在linux下面就是不行。
后来无意中发现,交换机的运行时间怎么是三天???和代码出问题很相符啊!!
然后然后,重启了这台交换机,居然好了,正常了。
H3C交换机真坑??莫非是上次交换机冷重启的原因?现在正常重启后,正常了??吐血的一下午。

Python3网络设备巡检(交换机篇)相关推荐

  1. python网络设备巡检(异常自动报警)_常用网络设备巡检命令参考(四)

    原标题:常用网络设备巡检命令参考(四) 1 港湾网络设备例行巡检数据采集任务 1.1 港湾交换机 Show version show services :显示设备当前的各种服务状态 show idle ...

  2. 2021-技能大赛-信息安全管理与评估-DCN 设备总结 (上)-任务一网络设备路由配置篇

    2021-技能大赛-信息安全管理与评估-DCN 设备总结 (上)-任务一网络设备路由配置篇 author:leadlife time:2022/3/11 知识星球:LeadlifeSec 技术交流 Q ...

  3. 校园网络设备巡检的准备工作

    某学校计划对网络中心机房进行网络设备巡检,在巡检之前将进行如下的准备工作. 1.明确巡检内容和范围 了解有哪些设备需要巡检,需要收集这些设备哪些方面的信息,如厂家.版本.硬件状态.使用情况.端口状态等 ...

  4. 交换机的linux测试脚本,更新网络设备巡检脚本,各位大神可以看看,如有不足,请指正!...

    [Visual Basic] 纯文本查看 复制代码params=str.split(" "); objTab.Session.Connect("/telnet " ...

  5. 服务器存储系统巡检,服务器存储网络设备巡检报告-20210628025243.pdf-原创力文档...

    服务器 /存储 / 网络设备 预防性维护服务记录 联系人 XX 用户单位 XX 市 XX 局 电 话 Xx 巡检日期 2018 年 07 月 02 日 巡检时间 巡检次数 第 3 次巡检 场地环境检查 ...

  6. 物联网之路由器和交换机篇

    交换机一般默认为二层,主要是数据链路层的以太帧转发,从开始的x.25发展到现在的万兆以太网,都是基于线路传播的,交换机的端口速度也能配置. 路由器有很多种,功能比较强大,有防火墙也有路由功能,最常见的 ...

  7. 网络设备(交换机、路由器、集线器)

    交换机 交换机是一种基于MAC(网卡的硬件地址)识别,能完成封装转发数据包功能的网络设备.它具有流量控制的能力,主要用于组建局域网.例如搭建一个公司网络,一般会使用交换机. 路由器 路由器是连接Int ...

  8. 计算机网络基础 — 网络设备 — 以太交换机(Switch)

    目录 文章目录 目录 交换机(Switch) 交换机与网桥的区别 交换机的自学习工作原理 交换机的类型 盒式交换机 框式交换机 二层交换机 三层交换机 网管交换机 交换机的硬件功能 端口数量 端口速率 ...

  9. 部署Django到云服务器(centos+nginx+mysql+uwsgi+python3)【操作篇(1)】

    开篇 笛卡尔说:"你不能教会一个人任何东西,你只能帮助他发现他自己内心本来就有的东西!" jacky能教你的,只能是经验和建议,要逆袭还得通过自己对数据的不断领悟,数据领域的技能都 ...

最新文章

  1. 使用 Linux 子系统部署 Node、Gradle 项目的构建工具
  2. 解决slideDown()、slideUp()执行结束后才执行下一次,导致鼠标离开后很久动画依然在执行的问题...
  3. vue修改计算属性的值_「Vue学习记录五」计算属性和侦听器
  4. python 只去除英文_如何使用 Python 制作词云(Word Cloud)-英文词云篇
  5. OpenGL仿作橡皮筋技术
  6. 取代Cookie失败,Google上线FLoC反遭“围攻”!
  7. Cisco ASA Web ××× 配置详解
  8. 【原创】 ES5高效封装WIN10系统教程2020系列(六)ES5封装
  9. wedo2.0恐龙系列图纸roboriseits乐高机器人暑假班(课程安排,psd海报,宣传素材,课堂实拍照片视频,课后反思等所有内容)
  10. vscode如何显示css
  11. C++多线程卡死问题--访问冲突未必崩溃
  12. 快手、携程等公司转战到 ClickHouse,ES 难道不行了?
  13. Android录屏技术方案
  14. NodeJS实现HTTP/HTTPS代理 - 刘春龙的博客
  15. 用 CaptureScreenshot捕捉游戏画面(截图,截屏)
  16. 180128 逆向-ichunqiu(Nonstandard)
  17. Golang Cannot use ss(type AAA) as type AAA in map index
  18. 玩 Spring框架
  19. 您的连接不是私密连接 thisisunsafe
  20. 细说汽车电子通信总线之LIN总线协议详解

热门文章

  1. TCP/IP详解之 《网络协议》图解 TCP 连接建立与释放
  2. Oracle数据库create or replace
  3. git config 设置,获取,删除
  4. java string parseint_Java parseInt() 方法
  5. 世界人工智能大会大咖云集,共商赋能传统企业数字化转型之路
  6. 报告显示:一次大型数据泄露成本约3.92亿美元
  7. Qt Style Sheet实践(一):按钮及关联菜单
  8. C语言恶搞之关机指令
  9. RewriteCond指令格式(个人学习笔记仅供参考)
  10. 年轻人,看看Redisson分布式锁—可重入锁吧!太重要了