思路:通过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 判断网络通断同时检测网络的状态的更多相关文章

  1. Delphi检测网络连接状态

    有时候,我们做一些小软件就需要检测网络连接状态,比如想给你的软件加上类似QQ那样的系统消息,可是像我这样的穷人肯定是买不起服务器了,那我们只好另想办法,可以读取网页然后用浏览器显示,这个时候就需要判断 ...

  2. iOS开发 - Swift实现检测网络连接状态及网络类型

    一.前言 在移动开发中,检测网络的连接状态尤其检测网络的类型尤为重要.本文将介绍在iOS开发中,如何使用Swift检测网络连接状态及网络类型(移动网络.Wifi). 二.如何实现 Reachabili ...

  3. Python获取CPU、内存使用率以及网络使用状态代码

    Python获取CPU.内存使用率以及网络使用状态代码_python_脚本之家 http://www.jb51.net/article/134714.htm

  4. [Swift通天遁地]四、网络和线程-(6)检测网络连接状态

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  5. iOS检测网络连接状态

    官方Demo下载地址:https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip 将Reachab ...

  6. Android 检测网络连接状态

    Android连接网络的时候,并不是每次都能连接到网络,因此在程序启动中需要对网络的状态进行判断,如果没有网络则提醒用户进行设置. 首先,要判断网络状态,需要有相应的权限,下面为权限代码(Androi ...

  7. iOS 网络与多线程--1.检测网络链接状态

    通过Reachability库,检测设备的网络连接状况. 使用到的类库:Reachability Reachability库,是一个iOS环境下,检测设备网络状态的库,可以在网络上搜索下载. 使用之前 ...

  8. android检测网络连接状态示例讲解

    网络的时候,并不是每次都能连接到网络,因此在程序启动中需要对网络的状态进行判断,如果没有网络则提醒用户进行设置   Android连接首先,要判断网络状态,需要有相应的权限,下面为权限代码(Andro ...

  9. qt检测网络连接状态【只能检测和路由器的连接,不能测试到外网的连接】

    #include <QCoreApplication>#include <QDebug>#include <QTextStream>#include <QDi ...

随机推荐

  1. Linux之安装常用软件

    Linux下安装软件的方法: 1,rpm(不推荐使用) 2,yum安装(使用快捷方便) 3,编译安装 一.安装python3(这里使用的是编译安装) 1,下载python3源码包 在centos下,第 ...

  2. Electron 创建一个空白的界面

    添加应用 首先添加一个Lorikeet版本的Electron应用. 'use strict' const electron = require('electron'); const app = ele ...

  3. WPF StringFormat 格式化文本

    StringFormat对特定数据格式的转换 WPF中,对数字/日期等的格式化,可参考此篇博客:https://www.cnblogs.com/zhengwen/archive/2010/06/19/ ...

  4. Maven(十四)Maven 继承

    以Junit为例 由于junit的依赖的范围为test,所以在每一个项目中都必须配置一个junit. 为了统一管理方便,可以单独创建一个项目用来进行**统一管理**junit的版本 即在子项目中不设置 ...

  5. 2019前端面试题汇总(主要为Vue)

    摘要: 经典面试题. 原文:2019前端面试题汇总(主要为Vue) 作者:前端小酱 Fundebug经授权转载,版权归原作者所有. 毕业之后就在一直合肥小公司工作,没有老司机.没有技术氛围,在技术的道 ...

  6. 万能pb_ds头文件—bits/extc++.h

    c++中自带了一些非常强大却鲜为人知的功能库—pd_ds库 里面含有红黑树(rb_tree),哈希表(gp_hash_table),可持久化平衡树(rope)等超强数据结构 但是有一件非常令人头痛的事 ...

  7. 【代码笔记】Web-CSS-CSS样式列表(url)

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  8. java对接申通下单接口示例代码

    上面是控制台示例代码 public class Sample{ private final static String URL = "http://order.sto-express.cn: ...

  9. 常用Shell脚本命令(备忘)

    此处纪录一些个人常用的Shell命令,留作复用 Linux 必备软件 Tmux 终端复用神器 zsh 无比强大Shell运行环境 oh my zsh 搭配zsh食用 uGet Linux下载工具 Do ...

  10. 通过Erlang构建TCP服务应用案例(最原始方式)

    文章来源:公众号-智能化IT系统. 案例介绍 本文介绍的案例是TCP网络服务器的构建,用最原始的方式(非OTP).其功能很简单,通过网络TCP接口接收数据,按照指定的格式解析,并把数据存储至Mongo ...