平时自动化运维的工作比较繁琐且枯燥,怎么通过写一个程序来实现自动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.xinyixx.com', 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生成一个可执行文件。
