python 判断网络通断同时检测网络的状态
思路:通过http判断网络通断,通过ping获取网络的状态
注意:不同平台下,调用的系统命令返回格式可能不同,跨平台使用的时候,注意调整字符串截取的值
主程序:network_testing_v0.3.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019-04-19 09:50
# @Author : yuyongxr
# @Site :
# @File : network_testing_v0.1.py
# @Software: PyCharm
# from icmp_test import *
from http_test import *
from config import *
import threading
import time
import json http_status = True def start_check_http(url,title):
global http_status
while True:
if check_http(url,title):
http_status = True
# print("http_status :", http_status)
else:
http_status = False
print("http_status :", http_status)
file = open("http_logs.txt", "a")
file.write(time.asctime(time.localtime(time.time()))+ " : http status is " +str(http_status) + "\n")
time.sleep(1) def check_continuous():
url,title,ip_address,times,domain,dnsserver = analyze_config()
t_http = threading.Thread(target=start_check_http,args=(url,title))
t_http.start() def icmp_continuous(): global http_status
global avg_list
global lost_list avg_list = []
lost_list = []
url,title,ip_address,times,domain,dnsserver = analyze_config() while True:
if http_status:
min, avg, max, lost = "","","",""
try:
min, avg, max, lost = shend_icmp_packet(ip_address, times) avg_flag = 0
avg_list.append(float(avg)) for a in avg_list:
avg_flag = avg_flag + a
avg_flag = avg_flag/len(avg_list) lost_flag = 0
lost_list.append(float(lost))
for a in lost_list:
lost_flag = lost_flag + a
lost_flag = lost_flag / len(lost_list) file = open("result.json")
content = file.read()
file.close()
content = json.loads(content)
content["ping"]["min"] =float(content["ping"]["min"]) if float(content["ping"]["min"]) <= float(min) else min
content["ping"]["avg"] = avg_flag
content["ping"]["max"] = float(content["ping"]["max"]) if float(content["ping"]["max"]) >= float(max) else max
content["ping"]["lost"] = lost_flag
content = json.dumps(content) file = open("result.json","w")
file.write(content)
file.close() print(min, avg, max, lost)
except:
pass
else:
time.sleep(1)
continue
time.sleep(5) def main():
c_check = threading.Thread(target=check_continuous)
i_icmp = threading.Thread(target=icmp_continuous) c_check.start()
i_icmp.start() if __name__ == '__main__':
main()
主程序
获取网络状态:icmp_test.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019-04-19 18:08
# @Author : yuyongxr
# @Site :
# @File : icmp_test.py
# @Software: PyCharm
import os def shend_icmp_packet(ip_address,times):
try:
response = os.popen('ping -c ' + times + ' '+ ip_address).read()
# 取出丢包率
lost = response[response.index("%")-4:response.index("%")]
#取出指定的延时字符串
res = list(response)
index = 0
count = 0
for r in res:
count += 1
if r == "=" :
index = count
response = response[index + 1:-4] # 取出执行的延迟
i = 0
j = []
res1 = list(response)
for r in res1:
i += 1
if r == "/" :
j.append(i) min = response[:j[0]-1]
avg = response[j[0]:j[1]-1]
max = response[j[1]:j[2]-1]
return min,avg,max,lost
except :
print("ping exec error")
file = open("icmp_logs.txt","a")
file.write(time.asctime(time.localtime(time.time())) +" ping exec error \n")
获取网络状态
判断网络通断:http_test.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019-04-19 18:09
# @Author : yuyongxr
# @Site :
# @File : http_test.py
# @Software: PyCharm import requests,bs4,time
from requests.exceptions import ReadTimeout,ConnectTimeout,HTTPError,ConnectionError def send_http_packet(url):
requests.packages.urllib3.disable_warnings()
user_agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
headers = {'User-Agent': user_agent}
url = "http://" + url
response_html= ""
file = open("http_logs.txt","a")
try:
response = requests.get(url, headers)
response_html = response.content.decode()
return response_html
except ReadTimeout:
print('Read Timeout')
file.write(time.asctime(time.localtime(time.time())) + " Read Timeout \n")
file.close()
return False
except ConnectTimeout:
print('Connect Timeout')
file.write(time.asctime(time.localtime(time.time())) + " Connect Timeout \n")
file.close()
return False
except HTTPError:
print('HTTP Error')
file.write(time.asctime(time.localtime(time.time())) + " HTTP Error \n")
file.close()
return False
except ConnectionError:
print('Connection Error')
file.write(time.asctime(time.localtime(time.time())) + " Connection Error \n")
file.close()
return False def check_http(url,title):
html = send_http_packet(url)
file = open("http_logs.txt","a")
if html != False and title != False :
soup = bs4.BeautifulSoup(html, 'lxml')
html_title = ""
html_title = soup.title.text
if title in html_title:
return True
else:
return False
else:
print('html or title is None')
file.write(time.asctime(time.localtime(time.time())) + " html or title is None \n")
file.close()
return False
判断网络通断
配置文件:config.json
{
"dns":{"domain":"www.baidu.com","dnsserver":"114.114.114.114"},
"icmp":{"ip_address":"www.baidu.com","times":""},
"http":{"url":"www.baidu.com","title":"百度"}
}
配置文件
解析配置文件:config.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019-04-19 18:28
# @Author : yuyongxr
# @Site :
# @File : config.py
# @Software: PyCharm import json def read_config():
file = open("config.json")
content = file.read()
file.close()
return content def analyze_config():
config = read_config()
config = json.loads(config) url = config["http"]["url"]
title = config["http"]["title"] ip_address = config["icmp"]["ip_address"]
times = config["icmp"]["times"] domain = config["dns"]["domain"]
dnsserver = config["dns"]["dnsserver"] return url,title,ip_address,times,domain,dnsserver
解析配置文件
结果存储文件:result.json
{"ping": {"min": 46.828, "avg": 137.0165, "max": 150.587, "lost": 0.7446808510638298}}
结果存放
python 判断网络通断同时检测网络的状态的更多相关文章
- Delphi检测网络连接状态
有时候,我们做一些小软件就需要检测网络连接状态,比如想给你的软件加上类似QQ那样的系统消息,可是像我这样的穷人肯定是买不起服务器了,那我们只好另想办法,可以读取网页然后用浏览器显示,这个时候就需要判断 ...
- iOS开发 - Swift实现检测网络连接状态及网络类型
一.前言 在移动开发中,检测网络的连接状态尤其检测网络的类型尤为重要.本文将介绍在iOS开发中,如何使用Swift检测网络连接状态及网络类型(移动网络.Wifi). 二.如何实现 Reachabili ...
- Python获取CPU、内存使用率以及网络使用状态代码
Python获取CPU.内存使用率以及网络使用状态代码_python_脚本之家 http://www.jb51.net/article/134714.htm
- [Swift通天遁地]四、网络和线程-(6)检测网络连接状态
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- iOS检测网络连接状态
官方Demo下载地址:https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip 将Reachab ...
- Android 检测网络连接状态
Android连接网络的时候,并不是每次都能连接到网络,因此在程序启动中需要对网络的状态进行判断,如果没有网络则提醒用户进行设置. 首先,要判断网络状态,需要有相应的权限,下面为权限代码(Androi ...
- iOS 网络与多线程--1.检测网络链接状态
通过Reachability库,检测设备的网络连接状况. 使用到的类库:Reachability Reachability库,是一个iOS环境下,检测设备网络状态的库,可以在网络上搜索下载. 使用之前 ...
- android检测网络连接状态示例讲解
网络的时候,并不是每次都能连接到网络,因此在程序启动中需要对网络的状态进行判断,如果没有网络则提醒用户进行设置 Android连接首先,要判断网络状态,需要有相应的权限,下面为权限代码(Andro ...
- qt检测网络连接状态【只能检测和路由器的连接,不能测试到外网的连接】
#include <QCoreApplication>#include <QDebug>#include <QTextStream>#include <QDi ...
随机推荐
- 四种途径提高RabbitMQ传输数据的可靠性(二)
前言 上一篇四种途径提高RabbitMQ传输消息数据的可靠性(一)已经介绍了两种方式提高数据可靠性传输的方法,本篇针对上一篇中提出的问题(1)与问题(2)提出解决常用的方法. 本文其实也就是结合以上四 ...
- ROS笔记 Topics
http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics rostopic rqt_graph rosmsg rqt_graph 一个用于查看topi ...
- [android]android下apk的安装过程
/********************2016年4月23日更新********************************/ 知乎:有什么apk分析工具? 拿到了一个apk文件,怀疑不安全,在 ...
- Java开发笔记(三十九)日期工具Date
Date是Java最早的日期工具,编程中经常通过它来获取系统的当前时间.当然使用Date也很简单,只要一个new关键字就能创建日期实例,就像以下代码示范的那样: // 创建一个新的日期实例,默认保存的 ...
- (11)Microsoft office Word 2013版本操作入门_word中表格操作
制作一个如下表格: 1. 插入一个4x4的表格或者手动绘制一个4x4表格. 1.1插入一个4x4表格或者绘制表格的按钮如下图所示 绘制表格,自己手动画比较复杂的表格 1.2对插入的表格: 点击表格的 ...
- centos-linux入门笔记
一.linux的用户 linux的用户和windwos差不多,分为管理员用户和普通用户. 普通用户:权限没那么高而已. 管理员用户:在linux中就是root用户,所拥有的权限是最高的. 二.linu ...
- WebGIS中以version方式实现代码更新后前端自动读取更新代码的方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 前言 GIS代码进行更新后,由于用户前端已有缓存,导致更新的功能不 ...
- TortoiseSVN 安装时出现 please install the universal crt
解决步骤: 1.打开 https://www.microsoft.com/zh-cn/ 2.搜索 universal crt (hotfix kb2999226) 3.点击链接 4.选择适合自己的版本 ...
- HALCON学习笔记
2019-2-2: 硬件选型--->镜头光源相机选型第一讲.avi: 高斯公式:1/u+1/v=1/f u:物距 v:像距 f:焦距 线放大倍率:像高/物高 或者 像距/物距 镜头需要掌握 ...
- 时序数据库InfluxDB安装及使用
时序数据库InfluxDB安装及使用 1 安装配置 安装 wget https://dl.influxdata.com/influxdb/releases/influxdb-1.3.1.x86_64. ...