完善以下程序代码,要求同时展示出黑名单和白名单内容,发现的设备IP地址以及名称,并且加入"最后一次出现时间"和"提交封禁时间",时间格式为用户输入的文本内容,默认在每个IP后面加入备注,用户不输入,则备注为空。以下是代码:import tkinter as tk from tkinter import filedialog, messagebox import datetime import os import json
class IPFilterApp: def init(self, root): self.root = root self.root.title("IP过滤器")
self.ip_list = []
self.whitelist = []
self.blacklist = []
self.load_data()
self.create_widgets()
self.display_history()
def create_widgets(self):
# IP Entry
self.ip_label = tk.Label(self.root, text="IP地址:")
self.ip_label.grid(row=0, column=0, padx=5, pady=5)
self.ip_entry = tk.Entry(self.root)
self.ip_entry.grid(row=0, column=1, padx=5, pady=5)
# Add IP Button
self.add_ip_button = tk.Button(self.root, text="添加IP", command=self.add_ip)
self.add_ip_button.grid(row=0, column=2, padx=5, pady=5)
# Import
以下是完善后的程序代码,满足展示黑名单和白名单内容,发现的设备IP地址及名称,并加入“最后一次出现时间”和“提交封禁时间”的要求。时间格式为用户输入的文本内容,默认在每个IP后面加入备注,用户不输入则备注为空。
import tkinter as tk
from tkinter import filedialog, messagebox
import datetime
import os
import json
class IPFilterApp:
def __init__(self, root):
self.root = root
self.root.title("IP过滤器")
self.ip_list = []
self.whitelist = []
self.blacklist = []
self.load_data()
self.create_widgets()
self.display_history()
def create_widgets(self):
# IP Entry
self.ip_label = tk.Label(self.root, text="IP地址:")
self.ip_label.grid(row=0, column=0, padx=5, pady=5)
self.ip_entry = tk.Entry(self.root)
self.ip_entry.grid(row=0, column=1, padx=5, pady=5)
# Name Entry
self.name_label = tk.Label(self.root, text="设备名称:")
self.name_label.grid(row=1, column=0, padx=5, pady=5)
self.name_entry = tk.Entry(self.root)
self.name_entry.grid(row=1, column=1, padx=5, pady=5)
# Last Seen Time Entry
self.last_seen_label = tk.Label(self.root, text="最后一次出现时间:")
self.last_seen_label.grid(row=2, column=0, padx=5, pady=5)
self.last_seen_entry = tk.Entry(self.root)
self.last_seen_entry.grid(row=2, column=1, padx=5, pady=5)
# Ban Time Entry
self.ban_time_label = tk.Label(self.root, text="提交封禁时间:")
self.ban_time_label.grid(row=3, column=0, padx=5, pady=5)
self.ban_time_entry = tk.Entry(self.root)
self.ban_time_entry.grid(row=3, column=1, padx=5, pady=5)
# Remark Entry
self.remark_label = tk.Label(self.root, text="备注:")
self.remark_label.grid(row=4, column=0, padx=5, pady=5)
self.remark_entry = tk.Entry(self.root)
self.remark_entry.grid(row=4, column=1, padx=5, pady=5)
# Add IP Button
self.add_ip_button = tk.Button(self.root, text="添加IP", command=self.add_ip)
self.add_ip_button.grid(row=5, column=0, columnspan=2, padx=5, pady=5)
# Display Lists
self.whitelist_label = tk.Label(self.root, text="白名单:")
self.whitelist_label.grid(row=6, column=0, padx=5, pady=5)
self.whitelist_text = tk.Text(self.root, height=10, width=50)
self.whitelist_text.grid(row=7, column=0, padx=5, pady=5)
self.blacklist_label = tk.Label(self.root, text="黑名单:")
self.blacklist_label.grid(row=6, column=1, padx=5, pady=5)
self.blacklist_text = tk.Text(self.root, height=10, width=50)
self.blacklist_text.grid(row=7, column=1, padx=5, pady=5)
def load_data(self):
if os.path.exists("data.json"):
with open("data.json", "r") as file:
data = json.load(file)
self.whitelist = data.get("whitelist", [])
self.blacklist = data.get("blacklist", [])
def save_data(self):
data = {
"whitelist": self.whitelist,
"blacklist": self.blacklist
}
with open("data.json", "w") as file:
json.dump(data, file)
def add_ip(self):
ip = self.ip_entry.get()
name = self.name_entry.get()
last_seen = self.last_seen_entry.get()
ban_time = self.ban_time_entry.get()
remark = self.remark_entry.get()
if not ip:
messagebox.showwarning("警告", "IP地址不能为空")
return
entry = {
"ip": ip,
"name": name,
"last_seen": last_seen,
"ban_time": ban_time,
"remark": remark
}
if ip in [item["ip"] for item in self.whitelist]:
messagebox.showinfo("信息", "IP已在白名单中")
elif ip in [item["ip"] for item in self.blacklist]:
messagebox.showinfo("信息", "IP已在黑名单中")
else:
self.blacklist.append(entry)
self.save_data()
self.display_history()
def display_history(self):
self.whitelist_text.delete(1.0, tk.END)
self.blacklist_text.delete(1.0, tk.END)
for entry in self.whitelist:
self.whitelist_text.insert(tk.END, f"IP: {entry['ip']}, 名称: {entry['name']}, 最后一次出现时间: {entry['last_seen']}, 提交封禁时间: {entry['ban_time']}, 备注: {entry['remark']}\n")
for entry in self.blacklist:
self.blacklist_text.insert(tk.END, f"IP: {entry['ip']}, 名称: {entry['name']}, 最后一次出现时间: {entry['last_seen']}, 提交封禁时间: {entry['ban_time']}, 备注: {entry['remark']}\n")
if __name__ == "__main__":
root = tk.Tk()
app = IPFilterApp(root)
root.mainloop()
此代码实现了以下功能:
data.json
文件中,程序启动时会加载数据,关闭时会