• Python 写网络监控


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

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

    一、准备工作

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

    用于获取系统资源的库:

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

    用于测量网络速度的库:

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

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

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



    二、编写网络监控脚本

    新建一个名为 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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    运行此脚本,即可实时获取系统的磁盘使用情况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_())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

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

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

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

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

    四、作者Info

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

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

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

  • 相关阅读:
    HyperLynx(十九)DDR(二)DDR的地址仿真
    字符/字符串算法专题-思维新解(1)
    对比纯软开与嵌入式硬件开发谁更好呢?
    三篇论文入选国际顶会SIGMOD,厉害了腾讯云数据库
    [学习记录] SpringBoot 17. 数据访问 Mybatis
    《C Primer Plus》第12章复习题与编程练习
    基于PSO训练常规自动编码器(Matlab代码实现)
    Vue3+node.js网易云音乐实战项目(六)
    持续学习的综述: 理论、方法与应用
    Oracle 11G 性能优化一例
  • 原文地址:https://blog.csdn.net/qq_44000141/article/details/136221210