并发ping监测网络状态

"""
网络监测v2.0,改进为使用多进程并发监测多个IP或域名,更加高效
兼容WINXP系统
同时检查本地到baidu.com或qq.com等的通讯情况并附至邮件,可以更客观地了解本地网络情况
linxingyi
20160305
"""
import os, time,subprocess, smtplib, datetime, platform
from multiprocessing import Pool
from email.header import Header
from email.mime.text import MIMEText

IP = ["www.baidu.com","www.qq.com","www.sina.com"]
#保存ping命令执行结果的临时文件列表,大小与IP列表一致
f = ["d:/ping11.txt","d:/ping12.txt","d:/ping13.txt"]
#保存网络状态的列表,大小与IP列表一致
status = ["","",""]
#发邮件的定义
from_addr = ‘‘          #发件人的邮箱地址
to_addr = [‘####@qq.com‘]     #收件人邮箱地址,用,来分隔
smtp_server = ‘smtp.qq.com‘
password = ‘############‘
mailtext = ["","",""]

#监测IP通讯情况,输出到临时文件
def ping(name,IP,file):
print(‘Run task %s (%s)...‘ % (name, os.getpid()))
    subprocess.call(["ping",IP,"-n","20"],shell=True,stdout=open(file,"wb"))

#根据临时文件内容判断网络状态
def netStatus(file,IP):
#判断是否为WINxp
if platform.version().split(".")[0] == "5":
with open(file,"r") as f:
            a = f.readlines()
if len(a) != 1:
#IP = a[2].split()[1]
count = int(a[-6].split()[-3])
            value = int(a[-2].split()[-1][:-2])
            log(IP+"丢包个数为 %s" %count)
            log(IP+"平均ping值为 %s" %value)
#判断为网络差的条件
if count > 5 or value > 100:
                status = "bad"
return status,a[-6:]
else:
                status = "good"
return status,a[-6:]
else:
#IP = a[0].split()[1]
status = "请求找不到主机"
log(IP+status)
return status,a[0]
else:
with open(file,"r") as f:
            a = f.readlines()
if len(a) != 1:
#IP = a[1].split()[2]
count = int(a[-3].split()[-3])
            value = int(a[-1].split()[-1][:-2])
            log(IP+"丢包个数为 %s" %count)
            log(IP+"平均ping值为 %s" %value)
#判断为网络差的条件
if count > 5 or value > 100:
                status = "bad"
return status,a[-3:]
else:
                status = "good"
return status,a[-3:]
else:
#IP = a[0].split()[2]
status = "请求找不到主机"
log(IP+status)
return status,a[0]

#输出日志并在控制台打印
def log(str):
with open(‘D:/dnslog.txt‘,‘a‘) as f:
        f.write(str+"\n")
print(str)

#发送邮件
def faemail(msgtext):
    msg = MIMEText(msgtext, ‘plain‘, ‘utf-8‘)
    msg[‘From‘] = from_addr
    msg[‘To‘] = ‘, ‘.join(to_addr)
    msg[‘Subject‘] = Header(‘线路预警‘, ‘utf-8‘).encode()
    server = smtplib.SMTP_SSL(smtp_server, 465)
    server.set_debuglevel(1)
    server.login(from_addr, password)
    server.sendmail(from_addr, to_addr, msg.as_string())
    server.quit()

if __name__==‘__main__‘:
#持续监测
while True:
print(‘Parent process %s.‘ % os.getpid())
        start = time.time()
        log(str(datetime.datetime.now()))
#创建和IP列表大小相同的进程池,调用ping方法
p = Pool(3)
for i in range(3):
                p.apply_async(ping,args=(i,IP[i],f[i],))
print(‘Waiting for all subprocesses done...‘)
        p.close()
        p.join()
#获取网络状态和邮件文本
for i in range(3):
            status[i],s = netStatus(f[i],IP[i])
            mailtext[i] = IP[i] + "".join(s)
for s in status:
print(s)
print("".join(mailtext))
#此处选择为第一个IP网络情况不佳时发送邮件
try:
if status[0] == "bad":
                faemail("".join(mailtext))
except Exception as e:
            log(e,":邮件发送失败")
        end = time.time()
print(‘runs %0.2f seconds.‘ % (end - start))
        log("------------------------------------------------------------------")
#每次监测的时间间隔
time.sleep(10)
时间: 2024-11-06 09:36:08

并发ping监测网络状态的相关文章

iOS开发之监测网络状态

一.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI\3G网络:自动下载高清图片 低速网络:只下载缩略图 没有网络:只显示离线的缓存数据 苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态 https://developer.apple.com/library/ios/samplecode/Reachabil

iOS开发网络篇—监测网络状态

iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI\3G网络:自动下载高清图片 低速网络:只下载缩略图 没有网络:只显示离线的缓存数据 苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态 https://developer.apple.com/library/ios/samp

iOS基础-网络-监测网络状态

iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI\3G网络:自动下载高清图片 低速网络:只下载缩略图 没有网络:只显示离线的缓存数据 苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态 https://developer.apple.com/library/ios/samp

Android实践--监测网络状态

Android 监测网络状态 我们在使用Android手机时候,一些APP需要网络环境才能运行,所以手机需要可用的网络,不管是2G.3G或者WIFI,甚至有一些比较耗流量的APP只能在WIFI的环境下运行,或者提供用户自行选择是否只能在WIFI环境下运行,作为用户貌似后者体验更好,那么作为开发者,我们仅仅需要几步就能给用户这种体验. ----------------------------------------------------------------------------------

监测网络状态

监测网络状态 转自 http://www.cnblogs.com/wendingding/p/3950114.html# 有些许修改 #import "YYViewController.h"#import "Reachability.h" @interface YYViewController ()@property (nonatomic, strong) Reachability *conn;@end @implementation YYViewControlle

并发 ping

参考 [[email protected] ~]# cat 5.sh #!/bin/bash # 2006-7-12, by wwy #----------------------------------------------------------------------------------- # 此例子说明了一种用wait.read命令模拟多线程的一种技巧 # 此技巧往往用于多主机检查,比如ssh登录.ping等等这种单进程比较慢而不耗费cpu的情况 # 还说明了多线程的控制 #---

OS开发网络篇—监测网络状态

iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI\3G网络:自动下载高清图片 低速网络:只下载缩略图 没有网络:只显示离线的缓存数据 苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态 https://developer.apple.com/library/ios/samp

iOS开发网络篇—监测网络状态(使用Reachability)

一.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI\3G网络:自动下载高清图片 低速网络:只下载缩略图 没有网络:只显示离线的缓存数据 苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态 https://developer.apple.com/library/ios/samplecode/Reachabil

AFN三方文件 监测网络状态 请求网络数据

AFNetworking 三方文件来请求网络数据 第一步 引头文件 #import "AFNetworking.h" 第二步 创建manager用来网络请求 AFHTTPRequestOperationManager *manager=[AFHTTPRequestOperationManager manager]; 第三步 :进行网络请求 因为咱们的接口问题 ,需要添加一句@"text/html" 在AFURLResponseSerialization.m文件中的第