Python 写网络监控

news2025/4/17 21:49:52

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。

网络监控是保障网络可靠性的一项重要任务。通过实时监控网络性能,我们可以及时发现异常,迅速采取措施,保障网络畅通无阻。本文将以 Python为工具,介绍如何编写一个简单而强大的网络监控程序,并封装成 GUI 工具帮助你实时把握网络状况,及时发现并解决潜在问题。

目录

    • 一、准备工作
    • 二、编写网络监控脚本
    • 三、封装为 GUI 工具
    • 四、作者Info

一、准备工作

欲行其事,必先利其器,本期实战需要 3 个 Python 第三方库

用于获取系统资源的库:

pip install psuntil -i https://pypi.doubanio.com/simple

用于测量网络速度的库:

pip install speedtest-cli -i https://pypi.doubanio.com/simple

用于把网络监控脚本封装成 GUI 工具的库:

pip install PyQt5 -i https://pypi.doubanio.com/simple



二、编写网络监控脚本

新建一个名为 network_monitor.py 的 Python 脚本:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import psutil
import speedtest
import time


def monitor_network():
    while True:
        # 获取系统资源利用情况
        disk_usage = psutil.disk_usage('/')
        cpu_usage = psutil.cpu_percent(interval=1)
        memory_usage = psutil.virtual_memory().percent

        # 测量网络速度
        st = speedtest.Speedtest()
        download_speed = st.download() / 1024 / 1024  # 转换为 Mbps
        upload_speed = st.upload() / 1024 / 1024  # 转换为 Mbps

        # 打印监控信息
        print(f'磁盘使用率:{disk_usage.percent}%')
        print(f'磁盘总量:{disk_usage.total / 1024 ** 3:.2f}GB')
        print(f'磁盘剩余量:{disk_usage.free / 1024 ** 3:.2f}GB')
        print(f'磁盘已使用量:{disk_usage.used / 1024 ** 3:.2f}GB')
        print(f"CPU 使用率: {cpu_usage}%")
        print(f"内存使用率: {memory_usage}%")
        print(f"下载速度: {download_speed:.2f} Mbps")
        print(f"上传速度: {upload_speed:.2f} Mbps")
        print("-" * 30)

        # 每隔一段时间进行监控
        time.sleep(300)  # 每5分钟监控一次


if __name__ == "__main__":
    monitor_network()

运行此脚本,即可实时获取系统的磁盘使用情况CPU 使用率内存使用率以及网络的下载和上传速度。此处写了一个死循环,每隔 5 分钟将相应的监控数据打印到控制台上,效果如下:
在这里插入图片描述

从图中可看出,除了磁盘使用情况外,其他监控数据都在变化

通过将这个网络监控工具部署到你的服务器或本地计算机上,你可以方便地监测网络性能,及时发现问题并作出相应的调整,以保障网络的高效稳定运行。

三、封装为 GUI 工具

为了将上述网络监控代码利用 PyQt5 封装成可视化的 GUI 工具,我们需要创建一个简单的图形用户界面,使用 PyQt5 的模块进行布局和交互。以下是一个基本的示例:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel
from PyQt5.QtCore import Qt, QTimer
import psutil
import speedtest


class NetworkMonitorGUI(QWidget):
    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):
        # 创建 QLabel 用于显示监控信息
        self.label = QLabel()
        self.label.setAlignment(Qt.AlignLeft)

        # 创建垂直布局
        layout = QVBoxLayout()
        layout.addWidget(self.label)

        # 设置主窗口的布局
        self.setLayout(layout)

        # 创建定时器,每隔一段时间更新监控信息
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_monitor_info)
        self.timer.start(5000)  # 每5秒更新一次

        # 设置主窗口的属性
        self.setWindowTitle('Network Monitor')
        self.setGeometry(100, 100, 400, 200)

        # 显示主窗口
        self.show()

    def update_monitor_info(self):
        # 获取系统资源利用情况
        disk_usage = psutil.disk_usage('/')
        cpu_usage = psutil.cpu_percent(interval=1)
        memory_usage = psutil.virtual_memory().percent

        # 测量网络速度
        st = speedtest.Speedtest()
        download_speed = st.download() / 1024 / 1024  # 转换为 Mbps
        upload_speed = st.upload() / 1024 / 1024  # 转换为 Mbps

        # 更新 QLabel 显示的监控信息
        info = f"磁盘使用率:{disk_usage.percent}%\n" \
               f"磁盘总量:{disk_usage.total / 1024 ** 3:.2f}GB\n" \
               f"磁盘剩余量:{disk_usage.free / 1024 ** 3:.2f}GB\n" \
               f"磁盘已使用量:{disk_usage.used / 1024 ** 3:.2f}GB\n" \
               f"CPU 使用率: {cpu_usage}%\n" \
               f"内存使用率: {memory_usage}%\n" \
               f"下载速度: {download_speed:.2f} Mbps\n" \
               f"上传速度: {upload_speed:.2f} Mbps"
        self.label.setText(info)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    gui = NetworkMonitorGUI()
    sys.exit(app.exec_())

这个代码创建了一个简单的 PyQt5 GUI 应用程序,其中包含一个 QLabel 用于显示网络监控信息。使用 QTimer 定时器每隔一段时间更新监控信息,并通过 setText 方法更新 QLabel 中的显示文本

保存上述代码为 network_monitor_gui.py,运行它,即可看到一个简单的网络监控 GUI 工具,效果如下:
在这里插入图片描述

在实际项目中,你可以根据需求进行更复杂的布局和交互设计。

希望本文对你了解如何使用 Python 编写网络监控工具有所帮助。如果有任何疑问或建议,可以与我交流。感谢阅读!

四、作者Info

Author:小鸿的摸鱼日常,Goal:让编程更有趣!

专注于算法、爬虫,游戏开发,数据分析、自然语言处理,AI等,期待你的关注,让我们一起成长、一起Coding!

版权说明:本文禁止抄袭、转载,侵权必究!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1461745.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云性能监控有着至关重要的作用

随着云计算的蓬勃发展,云性能监控成为保障云应用顺畅运行的不可或缺的一环。本文将介绍云性能监控的主要作用,以便更好地理解为什么它对于云环境中的应用程序至关重要。 1. 实时性能反馈 云性能监控提供了对应用程序性能的实时反馈。通过监测关键性能指标…

压缩感知的图像仿真(MATLAB源代码)

压缩感知是一种用于高效获取和表示信号的技术,它可以显著减少数据的采样和传输量,同时保持对信号的高质量恢复能力。在压缩感知中,信号被表示为其在一个稀疏基中的稀疏线性组合。通过仅使用少量的随机投影测量,就能够捕捉信号的大…

区块链之光:揭秘Web3时代的创新契机

随着技术的不断演进,区块链技术正逐渐引领着数字化时代的新潮流。Web3作为区块链技术的核心,为我们带来了前所未有的创新契机。本文将深入揭秘Web3时代的创新契机,探讨区块链之光如何改变我们的世界。 1. 区块链技术的兴起 区块链技术作为一…

springcloud:1.Eureka详细讲解

Eureka 是 Netflix 开源的一个服务注册和发现工具,被广泛应用于微服务架构中。作为微服务架构中的核心组件之一,Eureka 提供了服务注册、发现和失效剔除等功能,帮助构建弹性、高可用的分布式系统。在现代软件开发领域,使用 Eureka 可以有效地管理和监控服务实例,实现服务之…

1660s部署ChatGLM3-6B

用Chatgpt一段时间了,最近在想有没有离线可以装在本机的chatgpt,这样哪天openai把咱们渠道堵得死死的之后,咱们还有东西可用。网上一搜还真有,比如这个ChatGLM3,我用的就是ChatGLM3-6B。 ​​​​​​​官网有详细的部…

鸿蒙视频播放器,主要包括视频获取和视频播放功能:

鸿蒙视频播放器,主要包括视频获取和视频播放功能: 1 获取本地视频或者网络视频。 2 通过media.createAVPlayer创建播放器AVPlayer,然后进行视频播放。 3 通过VideoController进行AVPlayerState的状态管理,如开始,停止&…

Dom节点继承树基本操作

遍历节点树 基于元素节点树的遍历 parcntElcrmcnt -> 返回当前元素的父元秦节点 (IE不兼容)children ->只返回当前元素的元素子节点node.childFlement(ount nodechildren.length当前元素节点的子元素(IE不兼容)firstElementChild->返回的是第一个元素节点(IE不兼容)l…

ONLYOFFICE编辑器升级大揭秘:v8.0版新特性实测与评价

ONLYOFFICE编辑器升级大揭秘:v8.0版新特性实测与评价 一个人简介二前言三操作步骤创建房间我的文档 四开发人员工具应用程序接口Javascript开发工具包插件SDK网络钩子 五测评总结六体验地址 一个人简介 🏘️🏘️个人主页:以山河作…

探索亚信安慧AntDB的数据库管理之道

AntDB数据库管理系统以其卓越的性能和稳定性成为众多用户的选择之一。这款系统采用了影响力大、社区繁荣、开放度高、生态增长迅速的PG内核,为用户提供了稳定可靠的数据库解决方案。 数据库的稳定性对于用户来说至关重要,特别是在面对大规模数据处理和高…

机房预约系统(个人学习笔记黑马学习)

1、机房预约系统需求 1.1系统简介 学校现有几个规格不同的机房,由于使用时经常出现“撞车“现象,现开发一套机房预约系统,解决这一问题。 1.2身份简介 分别有三种身份使用该程序 学生代表:申请使用机房教师:审核学生的预约申请管理员:给学生、教师创建账…

用Jmeter对数据库执行压力测试

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

HarmonyOS—LocalStorage:页面级UI状态存储

LocalStorage是页面级的UI状态存储,通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility实例内,在页面间共享状态。 本文仅介绍LocalStorage使用场景和相关的装饰器:LocalStorageProp和LocalS…

Redis之缓存雪崩问题解决方案

文章目录 一、书接上文二、介绍三、解决方案1. 锁2. 不同的过期时间3. 缓存预热和定时任务 一、书接上文 Redis之缓存穿透问题解决方案实践SpringBoot3Docker 二、介绍 缓存雪崩,指大量的缓存失效,大量的请求又同时落在数据库。主要的一种诱因是key设…

接口请求重试的8种方法

转载文章:https://blog.csdn.net/qq_34162294/article/details/134131439 文章目录 1.前言2.几种方法 2.1循环重试2.2 使用Spring Retry库 2.2.1 添加 Maven 依赖2.2.2 添加 EnableRetry 注解启用重试功能2.2.3 在需要重试的方法上添加 Retryable 注解2.2.4. 还可以…

寒心,成立 25 年的车企迎来了首次裁员

车企 随着春节假期结束,各行各业也正式复工,但车企却未能迎来属于它们的"新年新气象"。 早在年前(12 月),就有新闻爆出,知名传统车企「广汽本田」为了加快转向电动车市场,宣布解雇中国…

洛谷 P1075 [NOIP2012 普及组] 质因数分解

参考代码and代码解读 #include<bits/stdc.h>//万能头文件 using namespace std; int main() { int n; cin>>n;//输入这个数 for (int i2;i<n;i)//用for循环查找最小的因数 if (n%i0)//如果i是n的因数 { cout<<n/i…

如何在STM32微控制器中使用外部SDRAM

如何在STM32微控制器中使用外部SDRAM STM32微控制器因其卓越的性能、灵活的内存配置选项以及广泛的应用领域而受到工程师们的青睐。在许多高级应用中&#xff0c;如图像处理、大数据分析和复杂算法运算&#xff0c;内部存储资源可能不足以满足需求。这时&#xff0c;通过添加外…

Centos安装图形化桌面环境

1.使用root远程登录最小化安装的虚拟机 2.执行命令yum groupinstall "X Window System" 这是安装窗口系统 3.执行命令yum grouplist" 检查安装的软件可可以安装的软件 4.执行命令yum groupinstall "Server with GUI" 这是安装图形化界面 5.执行命令sy…

C#写的一个计算DCI-P3色域和SRGB的小工具

文章最后附带分享链接与提取码 方便需要测试屏幕的小伙伴&#xff0c;只需要输入RGB就能得到覆盖率与比率&#xff0c;W计算色温&#xff0c;不测也要写上&#xff0c;不然会报错 链接&#xff1a;https://pan.baidu.com/s/1wdmAwmwiXjNvn1tGsvy0HA 提取码&#xff1a;1234

NAS系统折腾记 | 黑群晖系统快速制作英特尔核显补丁支持硬解

常见的群晖机器&#xff0c;例如 DS920&#xff0c;DS918&#xff0c;系统内核一直是 4.4 的&#xff0c;而这个内核自带的核显驱动最高支持到 9 代&#xff0c;支持的CPU型号分别是J3455&#xff08;DS918&#xff09;和J4155&#xff08;DS920&#xff09;。而目前DIY搭建NAS…