返回顶部
首页 > 资讯 > 后端开发 > Python >Python3 实现简易ping监控并发
  • 321
分享到

Python3 实现简易ping监控并发

简易ping 2023-01-31 08:01:21 321人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

python3 实现简易ping监控并发动报警邮件1、实现原理通过ping命令结果获取丢包率和延时情况,当丢包率和延时达到预设值时,将结果作为邮件内容,并发送邮件2、邮件是用smtplib和email实现发送的3、目前脚本有个小问题就是:我

python3 实现简易ping监控并发动报警邮件

1、实现原理通过ping命令结果获取丢包率和延时情况,当丢包率和延时达到预设值时,将结果作为邮件内容,并发送邮件

2、邮件是用smtplib和email实现发送的

3、目前脚本有个小问题就是:我打开文件,循环读,当读第一行时,我执行ping,获取结果,把结果写到一个文件里,同时判断是否达到预设值,如果达到,就把结果加到邮件内容,就这样一直循环,当把文件读完,然后关闭这两个文件,再发送邮件。总觉得有点问题,应该将结果存到一个列表,一次性写入。算了就先这样玩吧。


代码如下:

# -*- coding:utf-8 -*-

__author__   = 'babyshen'
__version__  = '0.0.3'
__datetime__ = '2016-12-30 03:30:00'

import os
import subprocess
import smtplib
import sys
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import COMMASPACE,fORMatdate
from email import encoders

# server['name'], server['user'], server['passwd']
def send_mail(server, fro, to, subject="", text="", files=[]):
    assert type(server) == dict
    assert type(to) == list
    assert type(files) == list

    msg = MIMEMultipart()
    msg['From'] = fro                # 邮件的发件人
    msg['Subject'] = subject         # 邮件的主题
    msg['To'] = COMMASPACE.join(to)  # COMMASPACE==', ' 收件人可以是多个,to是一个列表
    msg['Date'] = formatdate(localtime=True) # 发送时间
    msg.attach(MIMEText(text,'plain','utf-8'))

    for file in files:          # 添加附件可以是多个,files是一个列表,可以为空
        part = MIMEBase('application', 'octet-stream') #'octet-stream': binary data
        with open(file,'rb') as f:
            part.set_payload(f.read())
        encoders.encode_base64(part)
        part.add_header('Content-Disposition', 'p_w_upload; filename="%s"' % os.path.basename(file))
        msg.attach(part)

    smtp = smtplib.SMTP()
    smtp.connect(server['name']) # connect有两个参数,第一个为邮件服务器,第二个为端口,默认是25
    smtp.login(server['user'], server['passwd']) # 用户名,密码
    smtp.sendmail(fro, to, msg.as_string()) # 发件人,收件人,发送信息
    smtp.close()  # 关闭连接

def ping_test(src,dest):
    ping = subprocess.Popen('/bin/ping -i 0.2 -c 4 -q -I ' + src + ' ' + dest,
                            shell=True,
                            stderr=subprocess.PIPE,
                            stdout=subprocess.PIPE) # 执行命令
    res,err = ping.communicate()
    if err: sys.exit(err.decode().strip('\n'))
    pres = list(res.decode().split('\n'))
    loss = pres[3].split()[5]  # 获取丢包率
    try:
        rtt = pres[4].split('/')[4] # 获取rtt avg值
    except IndexError:
        rtt = ""
    return loss,rtt

def ping_res(file,revfile):
    with open(file, 'r', encoding='utf-8') as f:
        with open(revfile, 'w', encoding='utf-8') as f1:
            textmail = text = '%-15s %-15s %-15s %-5s %-5s \n' % ('host','src','dest','loss','rtt')
            f1.write(text)
            for line in f:
                host = line.split()[0]
                src = line.split()[1]
                dest = line.split()[2]
                threshold = line.split()[3] if len(line.split()) == 4 else 100
                loss, rtt = ping_test(src, dest)
                text = '%-15s %-15s %-15s %-5s %-5s \n' % (host, src, dest, loss, rtt)
                f1.write(text)
                # 判断丢包率和延时是不是达到预设值
                if float(loss.strip('%')) > 10 or float(rtt) > float(threshold):
                    textmail += text
    return textmail

if __name__ == '__main__':
    try:
        file = '/root/ping_test/ping_test.cfg' # 配置文件,格式(空格隔开):主机名,源地址,目标地址,延时阀值(默认是100)
        revfile = '/root/ping_test/ping_test.rev' # 结果文件
        textmail = ping_res(file,revfile) # 邮件内容
        # print(textmail)
        server = {'name':'mail.baidu.com',
                  'user':'xxxx',
                  'passwd':xxoo''}
        fro = 'xxxxx'
        to = ['ooooo']
        subject = 'ping_test'
        if len(textmail.split('\n')) == 2 : sys.exit() # 当只有一行时退出程序不发送邮件
        send_mail(server,fro,to,subject,textmail)
    except smtplib.SMTPAuthenticationError:
        sys.exit("Mail Authentication Failed")
    except KeyboardInterrupt:
        sys.exit(249)
    except Exception as e:
        sys.exit(e)

GitHub地址:https://github.com/babyshen/python/blob/master/monitor.py

升级版本已实现命令行参数和守护进程模式

github地址:Https://github.com/babyshen/Python/blob/master/monitor_2.py

--结束END--

本文标题: Python3 实现简易ping监控并发

本文链接: https://lsjlt.com/news/192474.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python3 实现简易ping监控并发
    Python3 实现简易ping监控并发动报警邮件1、实现原理通过ping命令结果获取丢包率和延时情况,当丢包率和延时达到预设值时,将结果作为邮件内容,并发送邮件2、邮件是用smtplib和email实现发送的3、目前脚本有个小问题就是:我...
    99+
    2023-01-31
    简易 ping
  • node中如何使用Nest.js实现简易版请求监控
    本篇内容介绍了“node中如何使用Nest.js实现简易版请求监控”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • Kubernetes节点之间的ping监控怎么实现
    小编给大家分享一下Kubernetes节点之间的ping监控怎么实现,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!脚本和配置我们解决方案的主要组件是一个脚本,该脚本监视每个节点的.stat...
    99+
    2024-04-02
  • shell脚本编写ping包及arp的监控并发送短信功能
    下面给大家分享shell脚本编写ping包及arp的监控并发送短信功能,具体代码如下所示: #!/bin/bash NOW="`date +%Y%m%d-%H:%M:%S`" PHONES=151345...
    99+
    2022-06-04
    短信功能 脚本 shell
  • javaweb实现简易邮件发送
    本文实例为大家分享了javaweb实现简易邮件发送的具体代码,供大家参考,具体内容如下 1.邮件发送 2.jar包的支持 activation-1.1.1.jar mail-1.4...
    99+
    2024-04-02
  • Python3利用Qt5实现简易的五子棋游戏
    要写出一个五子棋游戏,我们最先要解决的,就是如何下子,如何判断已经五子连珠,而不是如何绘制画面,因此我们先确定棋盘 五子棋采用15*15的棋盘,因此,我们可以使用二维列表来创建一个棋...
    99+
    2024-04-02
  • shell脚本如何编写ping包及arp的监控并发送短信功能
    这篇文章主要为大家展示了“shell脚本如何编写ping包及arp的监控并发送短信功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“shell脚本如何编写ping包及arp的监控并发送短信功能”...
    99+
    2023-06-09
  • springboot线程池监控的简单实现
    目录背景代码代码类结构线程池扩展类线程工具类线程bean类线程池实现类线程池监控接口类运行结果背景 在我们实际项目开发中,常常会为不同的优先级的任务设置相对应的线程池。一般我们只关注...
    99+
    2024-04-02
  • 简单实现并发:python concur
    可以使用python 3中的concurrent模块,如果python环境是2.7的话,需要下载https://pypi.python.org/packages/source/f/futures/futures-2.1.6.tar.gz#m...
    99+
    2023-01-31
    简单 python concur
  • javaweb怎么实现简易邮件发送
    本文小编为大家详细介绍“javaweb怎么实现简易邮件发送”,内容详细,步骤清晰,细节处理妥当,希望这篇“javaweb怎么实现简易邮件发送”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.邮件发送2.jar包的...
    99+
    2023-07-02
  • Python3怎么利用Qt5实现简易的五子棋游戏
    这篇文章主要讲解了“Python3怎么利用Qt5实现简易的五子棋游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python3怎么利用Qt5实现简易的五子棋游戏”吧!要写出一个五子棋游戏,...
    99+
    2023-06-30
  • Python实现监控屏幕界面内容变化并发送通知
    目录需求实现原理代码接收通知需求 有时候需要实时监控屏幕上的信息是否发生变化,例如监控某个公众号是否发送了推送,可能是你重要的一个信息来源渠道,你希望第一时间留意到,抢热点等~那么可...
    99+
    2023-05-17
    Python实现实时监控屏幕 Python监控屏幕 Python监控
  • python实现简易五子棋游戏(控制台版)
    本文实例为大家分享了python实现简易五子棋游戏的具体代码,供大家参考,具体内容如下 运行效果:  完整代码+注释:  finish = False # 游戏...
    99+
    2024-04-02
  • android自定义控件实现简易时间轴(2)
    这篇做了一个简单的时间轴控件。右侧的数据就是一个简单的字符串。问题还是有的,当右侧的文字长度不一样的时候就会有问题了。现在可以修改一下适配右侧的文字。 效果如下: 代码: priv...
    99+
    2024-04-02
  • android自定义控件实现简易时间轴(1)
    本文实例为大家分享了android自定义控件实现简易时间轴的具体代码,供大家参考,具体内容如下 之前项目需要写一个消费记录,类似于时间轴似的控件,自身在自定义控件这里不咋地(&hel...
    99+
    2024-04-02
  • Python实现定时发送监控邮件
    目录一、自动定时任务运行详情二、开启POP3/SMTP服务三、发送邮件1 导入库2 设置邮件内容3 添加附件4 发送邮件5 邮件发送效果四、设置定时任务1 设置定时任务的具体步骤2 ...
    99+
    2024-04-02
  • Shell脚本实现监控kingate并自动启动
    自己在vps做的kingate服务端,估计最近占用流量太大了,老是被服务商把我vps重启,但kingate这个东西是一旦被强制结束掉,是无法开机启动的,因为要把kingate.pid这个文件删除了才能启动,...
    99+
    2022-06-04
    脚本 自动启动 Shell
  • Java实现简易的洗牌和发牌功能
    目录代码思路代码实现Poker的Java文件抽象出一张扑克牌Game的Java文件实现洗牌跟发牌功能创建一副扑克牌洗牌发牌整体功能实现在日常生活中,想必大家都玩过或者听过斗地主吧,斗...
    99+
    2023-05-15
    Java 洗牌 Java 发牌
  • MySQL中怎么实现并发控制
    今天就跟大家聊聊有关MySQL中怎么实现并发控制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。锁锁分为读锁和写锁两种,也称作共享锁和排他锁。因为多个...
    99+
    2024-04-02
  • JavaScript中怎么实现并发控制
    这篇文章给大家分享的是有关JavaScript中怎么实现并发控制的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 在日常开发过程中,你可能会遇到并发控制...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作