import socket import subprocess import time import os import paramiko # 配置参数 ip_file = "C:/Users/andin/Desktop/ip.txt" # 存放IP地址的文件 timeout_threshold = 6 # 超过这个时间(秒)就重启 ssh_host = "192.168.234.143" # Linux 服务器的 IP 地址 ssh_user = "root" # SSH 用户名 ssh_password = "qwer1234" # SSH 密码 def load_ips(filename): print("加载 IP 地址...") if not os.path.exists(filename): print(f"文件 {filename} 不存在。") return [] with open(filename, 'r') as f: ips = [line.strip() for line in f if line.strip()] print(f"加载的 IP 地址: {ips}") return ips def test_port(ip, port=80): start_time = time.time() print(f"尝试连接到 {ip}:{port}...") try: with socket.create_connection((ip, port), timeout=timeout_threshold) as sock: request = f"GET / HTTP/1.1\r\nHost: {ip}\r\n\r\n".encode() sock.sendall(request) sock.recv(1024) # 读取响应 response_time = time.time() - start_time print(f"成功连接到 {ip}:{port},响应时间为 {response_time:.2f} 秒") return response_time except socket.timeout: print(f"连接到 {ip}:{port} 超时。") return None except Exception as e: print(f"连接到 {ip}:{port} 出错 - {e}") return None def restart(): try: print("通过 SSH 执行重启命令...") client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(ssh_host, username=ssh_user, password=ssh_password) stdin, stdout, stderr = client.exec_command("sudo reboot") print(stdout.read().decode()) print(stderr.read().decode()) client.close() print("重启命令执行成功。") except Exception as e: print(f"执行重启命令时出错: {e}") def main(): try: ip_list = load_ips(ip_file) for ip in ip_list: print(f"正在测试 {ip} 上的端口 80...") response_time = test_port(ip) if response_time is None or response_time > timeout_threshold: print(f"{ip} 的响应时间超过阈值或不可达。正在重启...") restart() else: print(f"{ip} 的响应时间为: {response_time:.2f} 秒") except Exception as e: print(f"主函数执行出错: {e}") if __name__ == "__main__": print("脚本开始执行...") main()