python实现批量探测IP存活性并发送邮件告警

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

python实现批量探测IP存活性并发送邮件告警前言:运维工程师在实际运维过程中,由于需要监控的IP主机数量过多且单位又没有一个监控软件使用导致日常巡检几十台或几百台主机就非常麻烦,有时候主机发生死机或宕机这样严重的故障又不能及时发现存在重大安全隐患,那么python脚本实现内网主机存活性探测且带有邮件告警功能就能帮助运维工程师解决这些问题。好了,废话不多说,直接上图!正文:多数代码都有借鉴网上一些大神的劳动成果,小菜只是将其综合揉捏在一起,请大神们多多见谅!代码一定要在linux系统中运行,window环境中有其个别模块不支持!Attachment.py:邮件告警模块Auto_ping.py:批量ping工具IP.txt:需要监控的系统或主机IP列表Running_again.py:轮询主程序Timeout.txt:邮件告警转发内容Attachment.py代码如下:auto_ping.py代码如下:runing_again.py代码如下:IP.txt中IP地址格式如下:Timeout.txt文件为空就行:Liunx环境下运行runing_again.py结果如下:我的外网邮箱中收到告警邮件:attachment.py源代码内容:#coding=utf-8#!/usr/bin/python#发送邮件模块importosimportsysimportsmtplibfromemail.mime.multipartimportMIMEMultipartfromemail.mime.textimportMIMETextfromemail.mime.imageimportMIMEImage#读取timeout.txt文件名file_path=sys.path[0]listfile=os.listdir(file_path)att_name=listfile[4]#发送者邮件地址、用户名、密码sender='yangXX.cn'receiver='yangXX.cn'subject=pythontestmessagesmtpserver='mail.XX.cn'username='yanglXX.cn'password='XXXX'#发送邮件的标题,和邮件附件msgRoot=MIMEMultipart('related')msgRoot['Subject']=att_nameatt=MIMEText(open(att_name,'rb').read(),'base64','utf-8')att[Content-Type]='application/octet-stream'att[Content-Disposition]='attachment;filename='+att_namemsgRoot.attach(att)#连接邮件服务器域名,带入认证用户名和密码smtp=smtplib.SMTP()smtp.connect('mail.XX.cn')smtp.login(username,password)smtp.sendmail(sender,receiver,msgRoot.as_string())smtp.quit()auto_ping.py源代码内容:#coding=utf-8#!/usr/bin/python#批量ping模块importpexpectfromthreadingimportThreadimportdatetimeimportos#打开IP.txt文件读取需要监控的ip地址hostIP=[]e=open(IP.txt,r)foriine:i=i.replace(\n,)hostIP.append(i)e.close()report_ok=[]report_error=[]classPING(Thread):def__init__(self,ip):Thread.__init__(self)self.ip=ipdefrun(self):Curtime=datetime.datetime.now()#Scrtime=Curtime+datetime.timedelta(0,minute,0)#print([%s]主机[%s]%(Curtime,self.ip))ping=pexpect.spawn(ping-c1%s%(self.ip))check=ping.expect([pexpect.TIMEOUT,1packetstransmitted,1received,0%packetloss],2)ifcheck==0:print([%s]超时%s%(Curtime,self.ip))f=open(timeout.txt,a)f.write(self.ip+\n)f.close()elifcheck==1:print([%s]%s可达%(Curtime,self.ip))else:print([%s]主机%s不可达%(Curtime,self.ip))#多线程同时执行T_thread=[]foriinhostIP:t=PING(i)T_thread.append(t)foriinrange(len(T_thread)):T_thread[i].start()runing_again.py源代码内容:#coding=utf-8#!/usr/bin/python__author__='Administrator'importhashlibimportsysimportosimporttime#获取timeout.txt的md5值函数defGetStrMd5():f=open(timeout.txt,r)content=f.read()f.close()m0=hashlib.md5()m0.update(content)returnm0.hexdigest()#每2分钟循环探测timeout.txt的md5值,如果过前后timeout.txt文件大小一致再次轮询#如果前后timeout.txt文件不一致,就发送告警邮件if__name__==__main__:whileTrue:md1=GetStrMd5()time.sleep(120)os.system(pythonauto_ping.py)md2=GetStrMd5()printmd1,md2if(md1inmd2):passelse:os.system(pythonattachment.py)

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功