服务器系统时间修改器
下面是一个安全的服务器系统时间修改器的图形界面实现,这个工具允许管理员查看当前时间并谨慎地修改系统时间,同时提供必要的安全措施和操作日志。
import tkinter as tkfrom tkinter import ttk, messageboximport datetimeimport socketimport osimport sysimport subprocessimport loggingfrom logging.handlers import RotatingFileHandlerclass ServerTimeEditor:def __init__(self, root):self.root = rootself.root.title("服务器系统时间修改器")self.root.geometry("800x600")self.root.resizable(True, True)self.root.configure(bg="#f5f5f5")# 设置日志self.setup_logging()# 获取服务器信息self.server_name = socket.gethostname()self.os_type = sys.platform# 创建UIself.create_widgets()# 初始更新时间显示self.update_time()# 日志操作self.log_action("应用程序启动")def setup_logging(self):"""配置日志记录"""if not os.path.exists('logs'):os.makedirs('logs')self.logger = logging.getLogger("TimeEditor")self.logger.setLevel(logging.INFO)# 创建滚动日志文件处理器handler = RotatingFileHandler('logs/time_editor.log',maxBytes=5*1024*1024,# 5 MBbackupCount=3)formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s',datefmt='%Y-%m-%d %H:%M:%S')handler.setFormatter(formatter)self.logger.addHandler(handler)def log_action(self, message):"""记录操作日志"""self.logger.info(message)# 同时更新UI中的日志显示self.log_text.configure(state='normal')timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")self.log_text.insert(tk.END, f"[{timestamp}] {message}n")self.log_text.configure(state='disabled')self.log_text.see(tk.END)# 滚动到底部def create_widgets(self):"""创建界面组件"""# 创建主框架main_frame = ttk.Frame(self.root, padding=20)main_frame.pack(fill=tk.BOTH, expand=True)# 标题title_label = ttk.Label(main_frame,text="服务器系统时间修改器",font=("Arial", 16, "bold"),foreground="#2c3e50")title_label.pack(pady=10)# 服务器信息info_frame = ttk.LabelFrame(main_frame, text="服务器信息", padding=10)info_frame.pack(fill=tk.X, pady=10)ttk.Label(info_frame, text=f"服务器名称: {self.server_name}", font=("Arial", 10)).pack(anchor="w")ttk.Label(info_frame, text=f"操作系统: {self.get_os_name()}", font=("Arial", 10)).pack(anchor="w")ttk.Label(info_frame, text=f"当前用户: {os.getlogin()}", font=("Arial", 10)).pack(anchor="w")# 时间显示区域time_frame = ttk.LabelFrame(main_frame, text="当前系统时间", padding=15)time_frame.pack(fill=tk.X, pady=10)self.time_var = tk.StringVar()time_label = ttk.Label(time_frame,textvariable=self.time_var,font=("Courier", 24, "bold"),foreground="#3498db")time_label.pack(pady=5)self.date_var = tk.StringVar()date_label = ttk.Label(time_frame,textvariable=self.date_var,font=("Arial", 14),foreground="#7f8c8d")date_label.pack(pady=5)# 更新时间按钮update_btn = ttk.Button(time_frame,text="更新时间显示",command=self.update_time,style="Accent.TButton")update_btn.pack(pady=10)# 时间修改区域edit_frame = ttk.LabelFrame(main_frame, text="修改系统时间", padding=15)edit_frame.pack(fill=tk.X, pady=10)# 日期选择ttk.Label(edit_frame, text="设置日期:").grid(row=0, column=0, padx=5, pady=5, sticky="w")self.date_entry = ttk.Entry(edit_frame, width=15)self.date_entry.grid(row=0, column=1, padx=5, pady=5, sticky="w")self.date_entry.insert(0, datetime.datetime.now().strftime("%Y-%m-%d"))ttk.Label(edit_frame, text="格式: YYYY-MM-DD").grid(row=0, column=2, padx=5, pady=5, sticky="w")# 时间选择ttk.Label(edit_frame, text="设置时间:").grid(row=1, column=0, padx=5, pady=5, sticky="w")self.time_entry = ttk.Entry(edit_frame, width=15)self.time_entry.grid(row=1, column=1, padx=5, pady=5, sticky="w")self.time_entry.insert(0, datetime.datetime.now().strftime("%H:%M:%S"))ttk.Label(edit_frame, text="格式: HH:MM:SS").grid(row=1, column=2, padx=5, pady=5, sticky="w")# 修改按钮change_btn = ttk.Button(edit_frame,text="修改系统时间",command=self.change_system_time,style="Warning.TButton")change_btn.grid(row=2, column=0, columnspan=3, pady=15)# 操作日志区域log_frame = ttk.LabelFrame(main_frame, text="操作日志", padding=10)log_frame.pack(fill=tk.BOTH, expand=True, pady=10)self.log_text = tk.Text(log_frame, height=8, state='disabled', wrap=tk.WORD)self.log_text.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)scrollbar = ttk.Scrollbar(log_frame, command=self.log_text.yview)scrollbar.pack(side=tk.RIGHT, fill=tk.Y)self.log_text.config(yscrollcommand=scrollbar.set)# 状态栏self.status_var = tk.StringVar()self.status_var.set("就绪")status_bar = ttk.Label(self.root, textvariable=self.status_var, relief=tk.SUNKEN, anchor=tk.W)status_bar.pack(side=tk.BOTTOM, fill=tk.X)# 样式配置self.style = ttk.Style()self.style.configure("Accent.TButton", background="#3498db", foreground="white")self.style.configure("Warning.TButton", background="#e74c3c", foreground="white")def get_os_name(self):"""获取操作系统名称"""if self.os_type == "linux" or self.os_type == "linux2":return "Linux"elif self.os_type == "darwin":return "macOS"elif self.os_type == "win32":return "Windows"return "Unknown OS"def update_time(self):"""更新当前时间显示"""now = datetime.datetime.now()self.time_var.set(now.strftime("%H:%M:%S"))self.date_var.set(now.strftime("%Y年%m月%d日 星期") + ["一", "二", "三", "四", "五", "六", "日"][now.weekday()])self.root.after(1000, self.update_time)self.status_var.set("时间显示已更新")def change_system_time(self):"""修改系统时间"""new_date = self.date_entry.get()new_time = self.time_entry.get()# 验证日期格式try:datetime.datetime.strptime(new_date, "%Y-%m-%d")except ValueError:messagebox.showerror("错误", "日期格式无效!请使用 YYYY-MM-DD 格式")return# 验证时间格式try:datetime.datetime.strptime(new_time, "%H:%M:%S")except ValueError:messagebox.showerror("错误", "时间格式无效!请使用 HH:MM:SS 格式")return# 确认对话框if not messagebox.askyesno("确认修改",f"您确定要将系统时间修改为:n{new_date} {new_time}?nn""警告:修改系统时间可能影响服务器运行!"):return# 根据操作系统执行不同命令try:if self.os_type == "win32":# Windows 系统subprocess.run(f'date {new_date}', shell=True, check=True)subprocess.run(f'time {new_time}', shell=True, check=True)self.log_action(f"系统时间已修改为: {new_date} {new_time}")self.status_var.set(f"系统时间已成功修改为 {new_date} {new_time}")messagebox.showinfo("成功", "系统时间已成功修改")else:# Linux/MACOS 系统datetime_str = f"{new_date} {new_time}"subprocess.run(f'date -s "{datetime_str}"', shell=True, check=True)self.log_action(f"系统时间已修改为: {datetime_str}")self.status_var.set(f"系统时间已成功修改为 {datetime_str}")messagebox.showinfo("成功", "系统时间已成功修改")except subprocess.CalledProcessError as e:self.log_action(f"修改系统时间失败: {str(e)}")self.status_var.set("错误: 修改系统时间失败")messagebox.showerror("错误", f"修改系统时间失败: {str(e)}")except Exception as e:self.log_action(f"发生未知错误: {str(e)}")self.status_var.set("错误: 发生未知错误")messagebox.showerror("错误", f"发生未知错误: {str(e)}")def run(self):self.root.mainloop()if __name__ == "__main__":# 检查管理员权限if os.name == 'nt':import ctypesif not ctypes.windll.shell32.IsUserAnAdmin():messagebox.showerror("权限错误", "此程序需要管理员权限运行!")sys.exit(1)else:if os.geteuid() != 0:messagebox.showerror("权限错误", "此程序需要使用root权限运行!")sys.exit(1)root = tk.Tk()app = ServerTimeEditor(root)app.run()
功能说明
这个服务器系统时间修改器具有以下功能:
使用说明
注意事项
此工具为管理员提供了安全、便捷的时间修改方式,同时通过日志记录确保操作可追溯。














发表评论