介绍
只写了交换机的,路由器、防火墙、负载等其它设备以后,有需求再写,下面以一组交换机为例。
思路
1、收取交换机的信息
需要哪些信息,哪些命令,不同品牌交换机命令不同(本篇以H3C为例),需要提前规划好。交换机的IP、名字、密码等信息,写入数据库比较方便。
2、把需要的信息填入表格
根据关键字提取交换机中的状态信息,并一次填入设计好的表格中,难点是字符串的截取和excel表格的设计。同款交换机相同的命令,可能用同一个关键字,抓取的信息也不一样,这个要多试几次。
3、编写邮件,发送邮件。
4、linux编写任务计划,crontab定期执行python代码,定期发送邮件。
代码
抓取交换机需要的配置信息
import pexpect
import sys
import datetime
import pymssql
import os
today=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 = fout
child.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")#端口状态
break
for i in range(10):
index = child.expect([name1,'<%s>'%name])
if ( index == 0 ):