python程序4:自动ping包的小程序

平时自动化运维的工作比较繁琐且枯燥,怎么通过写一个程序来实现自动ping包,并返回文本框内。

Socket 是一种网络编程接口,它提供了一组函数,可以用于在网络上发送和接收数据。而 ping 命令则是一种用于测试网络连接的工具,它通过向目标服务器发送 ICMP 报文并等待响应,来判断目标服务器是否可达。

在使用 Socket 去 ping 服务器时,通常需要创建一个 Socket 对象,并使用该对象发送 ICMP 报文到目标服务器的 IP 地址。如果目标服务器能够接收到该报文并成功响应,那么就说明目标服务器是可达的。

需要注意的是,ICMP 报文是一种特殊类型的数据包,它不同于普通的 TCP 或 UDP 数据包。因此,在使用 Socket 去 ping 服务器时,需要使用特定的 ICMP 协议来发送和接收数据。具体实现方式可以参考相关的 Socket 编程文档和 ICMP 协议规范。

具体的实现代码如下:

import sys
import socket
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # 创建菜单栏
        menu_bar = self.menuBar()
        file_menu = menu_bar.addMenu('File')
        exit_action = QAction('Exit', self)
        exit_action.triggered.connect(self.close)
        file_menu.addAction(exit_action)

        # 创建文本编辑框
        self.text_edit = QTextEdit()
        self.setCentralWidget(self.text_edit)

        # 检查服务器和端口的通断情况
        self.check_status('www.google.com', 80)
        self.check_status('www.baidu.com', 80)
        self.check_status('www.bing.com', 443)
        self.check_status('www.x521.top', 80)
        self.check_status('c.zzgao.eu.org', 443)


    def check_status(self, host, port):
        try:
            # 创建一个socket对象并连接到指定的主机和端口
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.settimeout(5)
            s.connect((host, port))

            # 输出连接成功的消息
            message = f'{host}:{port} is open'
            print(message)
            self.text_edit.append(message)

            # 关闭socket连接
            s.close()
        except:
            # 输出连接失败的消息
            message = f'{host}:{port} is closed'
            print(message)
            self.text_edit.append(message)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

在pycharm里运行看一下效果。如果需要其他地址可以在python文件中直接添加。

http协议默认端口是80;https默认端口是443;如上就可以直观的观察具体哪个网站是中断的,及时的排查并解决问题。

最后按之前一样可以直接用pyinstaller生成一个可执行文件。

发表评论

zh_CNChinese