吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3117|回复: 13
收起左侧

[其他] 基于python写的一个很简答的网络检测小工具附带源码

[复制链接]
Esingpawn 发表于 2023-5-23 11:06
应单位要求写了一个网络自检工具,其实也很简单就是ping+报警

希望能够帮助大家自动检测网络连接状态,及时发现并解决问题。以下是使用方法:
  • python环境可以直接运行
  • 在程序界面中,可以看到各个网络连接的状态,包括本机、核心交换机、DTS网络、市公司网络和互联网等(请自定义你们自己的设备ip)
  • 程序每隔5分钟会自动检测网络连接状态,如果发现某个网络连接断开,会自动报警并提示用户检查网络连接
  • 用户也可以手动检测网络连接状态,点击“手动检测”按钮即可
  • 如果用户不希望听到报警声音,可以点击“手动停止报警”按钮
此工具使用了Python编程语言,采用了多线程和PyQt5框架,可以自动检测网络连接状态,并及时报警。

下来是源码
[Asm] 纯文本查看 复制代码
import pyttsx3
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtMultimedia import *
from PyQt5.QtWidgets import *
from geopy.geocoders import Nominatim

import time
import subprocess

geolocator = Nominatim(user_agent="net_check_app")
ip_addresses = {
    '本机': '127.0.0.1',
    '核心交换机': '11.104.76.62',
    'DTS网络': '11.104.76.55',
    '市公司网络': '11.43.104.53',
    '互联网': 'baidu.com'
}
engine = pyttsx3.init()


class Worker(QThread):
    progress_signal = pyqtSignal(int)
    status_signal = pyqtSignal(str, str)

    def __init__(self, parent=None):
        super().__init__(parent=parent)
        self.stop_flag = False

    def run(self):
        while not self.stop_flag:
            for name, ip in ip_addresses.items():
                result = subprocess.run(["ping", "-n", "1", "-w", "500", ip], stdout=subprocess.PIPE)
                output = result.stdout.decode("gbk")
                if "TTL=" in output:
                    self.status_signal.emit(name, "正常")
                else:
                    self.status_signal.emit(name, "断开")
                    engine.say(name + "网络连接已断开,请检查网络连接!")
                    engine.runAndWait()
            self.progress_signal.emit(100)
            time.sleep(5 * 60)

    def stop(self):
        self.stop_flag = True


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("南河监控网络自检")
        self.setWindowIcon(QIcon("icon.png"))
        self.setGeometry(0, 0, 800, 600)
        self.setFixedSize(800, 600)
        self.setStyleSheet("background-color: white;")

        self.title_label = QLabel(self)
        self.title_label.setText("南河监控网络自检")
        self.title_label.setFont(QFont("Microsoft YaHei UI", 20, QFont.Bold))
        self.title_label.setAlignment(Qt.AlignHCenter)
        self.title_label.setGeometry(0, 20, 800, 40)
        self.title_label.setStyleSheet("color: white; background-color: #3f3f3f;")

        self.status_table = QTableWidget(self)
        self.status_table.setColumnCount(2)
        self.status_table.setHorizontalHeaderLabels(["名称", "状态"])
        self.status_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        self.status_table.verticalHeader().setVisible(False)
        self.status_table.setGeometry(50, 100, 300, 400)

        self.png_label = QLabel(self)
        self.png_label.setGeometry(400, 100, 350, 400)
        self.png_label.setPixmap(QPixmap("1.png"))
        self.png_label.setScaledContents(True)

        self.progress_bar = QProgressBar(self)
        self.progress_bar.setGeometry(50, 520, 300, 20)
        self.progress_bar.setStyleSheet(
            "QProgressBar {border: 2px solid grey; border-radius: 5px; text-align: center;} QProgressBar::chunk {background-color: #3f3f3f; width: 10px;}")

        self.check_button = QPushButton(self)
        self.check_button.setText("手动检测")
        self.check_button.setFont(QFont("Microsoft YaHei UI", 12))
        self.check_button.setStyleSheet(
            "QPushButton {background-color: white; color: #3f3f3f; border: 1px solid #3f3f3f; border-radius: 5px; padding: 5px 10px;} QPushButton:hover {background-color: #3f3f3f; color: white;}")
        self.check_button.setGeometry(50, 550, 120, 30)
        self.check_button.clicked.connect(self.manual_check)

        self.stop_button = QPushButton(self)
        self.stop_button.setText("手动停止报警")
        self.stop_button.setFont(QFont("Microsoft YaHei UI", 12))
        self.stop_button.setStyleSheet(
            "QPushButton {background-color: white; color: #3f3f3f; border: 1px solid #3f3f3f; border-radius: 5px; padding: 5px 10px;} QPushButton:hover {background-color: #3f3f3f; color: white;}")
        self.stop_button.setGeometry(180, 550, 120, 30)
        self.stop_button.clicked.connect(self.manual_stop_alert)

        self.language_selector = QComboBox(self)
        self.language_selector.addItem("中文")
        self.language_selector.addItem("English")
        self.language_selector.setGeometry(650, 550, 100, 30)
        self.language_selector.currentIndexChanged.connect(self.change_language)

        self.alert_player = QMediaPlayer(self)
        self.alert_player.setMedia(QMediaContent(QUrl.fromLocalFile("alert.mp3")))
        self.alert_player.setVolume(50)

        self.worker = Worker()
        self.worker.progress_signal.connect(self.update_progress_bar)
        self.worker.status_signal.connect(self.update_status_table)

        self.worker.start()

        self.translator = QTranslator(self)
        self.change_language()

    def manual_check(self):
        for name, ip in ip_addresses.items():
            result = subprocess.run(["ping", "-n", "1", "-w", "500", ip], stdout=subprocess.PIPE)
            output = result.stdout.decode("gbk")
            if "TTL=" in output:
                self.update_status_table(name, "正常")
            else:
                self.update_status_table(name, "断开")
                self.alert_player.play()
                engine.say(name + "网络连接已断开,请检查网络连接!")
                engine.runAndWait()

    def manual_stop_alert(self):
        self.alert_player.stop()

    def update_progress_bar(self, value):
        self.progress_bar.setValue(value)

    def update_status_table(self, name, status):
        row_count = self.status_table.rowCount()
        for i in range(row_count):
            if self.status_table.item(i, 0).text() == name:
                self.status_table.item(i, 1).setText(status)
                break
        else:
            row = self.status_table.rowCount()
            self.status_table.insertRow(row)
            self.status_table.setItem(row, 0, QTableWidgetItem(name))
            self.status_table.setItem(row, 1, QTableWidgetItem(status))

    def change_language(self):
        if self.language_selector.currentIndex() == 0:
            self.translator.load("languages/zh_CN.qm")
        elif self.language_selector.currentIndex() == 1:
            self.translator.load("languages/en.qm")
        qApp.installTranslator(self.translator)
        self.retranslate_ui()

    def retranslate_ui(self):
        self.setWindowTitle(QCoreApplication.translate("MainWindow", "南河监控网络自检"))
        self.title_label.setText(QCoreApplication.translate("MainWindow", "南河监控网络自检"))
        self.check_button.setText(QCoreApplication.translate("MainWindow", "手动检测"))
        self.stop_button.setText(QCoreApplication.translate("MainWindow", "手动停止报警"))

        self.status_table.setHorizontalHeaderLabels([QCoreApplication.translate("MainWindow", "名称"),
                                                     QCoreApplication.translate("MainWindow", "状态")])


if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)

    # 设置应用程序图标
    app.setWindowIcon(QIcon("icon.png"))

    # 设置应用程序样式
    app.setStyle("Fusion")

    # 设置应用程序主题
    palette = QPalette()
    palette.setColor(QPalette.Window, QColor("#ffffff"))
    palette.setColor(QPalette.WindowText, QColor("#3f3f3f"))
    palette.setColor(QPalette.Base, QColor("#ffffff"))
    palette.setColor(QPalette.AlternateBase, QColor("#e6e6e6"))
    palette.setColor(QPalette.ToolTipBase, QColor("#3f3f3f"))
    palette.setColor(QPalette.ToolTipText, QColor("#ffffff"))
    palette.setColor(QPalette.Text, QColor("#3f3f3f"))
    palette.setColor(QPalette.Button, QColor("#ffffff"))
    palette.setColor(QPalette.ButtonText, QColor("#3f3f3f"))
    palette.setColor(QPalette.BrightText, QColor("#ffffff"))
    palette.setColor(QPalette.Link, QColor("#0000ff"))
    palette.setColor(QPalette.Highlight, QColor("#0078d7"))
    palette.setColor(QPalette.HighlightedText, QColor("#ffffff"))
    app.setPalette(palette)

    window = MainWindow()
    window.show()

    sys.exit(app.exec_())



最后软件实例下载地址:https://wwi.lanzoup.com/icIvn0x0ff7g

运行截图

运行截图

软件截图

软件截图

下载实例.txt

36 Bytes, 下载次数: 26, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 2吾爱币 +4 热心值 +2 收起 理由
smile1110 + 3 + 1 谢谢@Thanks!
nndyky + 1 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

law.liu 发表于 2023-5-23 16:12
本帖最后由 law.liu 于 2023-5-23 16:14 编辑

这段代码看起来是一个使用PyQt5创建的网络自检监控应用程序。根据代码的结构,可以看出它是一个基于GUI的应用程序,用于检测一组预定义的IP地址的连通性,并在GUI界面中显示状态。
以下是代码中存在的一些问题:
1. 缺少必要的导入语句:代码中使用了一些第三方库和模块,但是缺少导入这些库的语句。请确保安装了所需的库,并在代码的开头添加相应的导入语句。
例如,确保已安装pyttsx3和geopy库,并在开头添加以下导入语句:
import pyttsx3
from geopy.geocoders import Nominatim
2. 缺少图像和音频文件:代码中引用了一些图像和音频文件,例如icon.png、1.png和alert.mp3,但是在当前目录中找不到这些文件。请确保这些文件存在并位于正确的路径下,或者根据实际情况修改相应的文件名或路径。
3. 缺少翻译文件:代码中尝试根据语言选择切换应用程序界面的语言,使用了QTranslator和翻译文件(.qm文件)。然而,在代码中并没有提供这些翻译文件的位置和内容。

以上列出的问题仅仅是根据代码片段的分析得出的推测,可能还存在其他问题。如果仍然遇到问题,建议提供完整的代码和详细的错误信息以便更好地帮助你解决问题。
Dlan 发表于 2023-5-23 15:37
Dlan 发表于 2023-5-23 15:39
dork 发表于 2023-5-23 17:02
2. 缺少图像和音频文件:代码中引用了一些图像和音频文件,例如icon.png、1.png和alert.mp3,但是在当前目录中找不到这些文件
xiaoyxf 发表于 2023-5-23 17:22
law.liu 发表于 2023-5-23 16:12
这段代码看起来是一个使用PyQt5创建的网络自检监控应用程序。根据代码的结构,可以看出它是一个基于GUI的应 ...

这个看着像是gpt回答的呐
hhjjrrtt 发表于 2023-5-23 17:50
谢谢楼主分享
lazhou 发表于 2023-5-23 19:14
试用一下,谢谢大佬!
zhang9qi 发表于 2023-5-24 11:59
谢谢分享,学习学习。
hcdcn 发表于 2023-5-26 19:15
顶顶更健康,谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-4 01:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表