简化以下代码,并给代码加入搜索功能,例如:搜索ip,出现资产内容、封禁原因、发现的设备、等情况。支持txt导入历史封禁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)
为了简化代码并添加搜索功能,我们可以重构代码并添加必要的功能。以下是简化后的代码,并且加入了��索功能和txt导入历史封禁IP地址的功能:
import tkinter as tk
from tkinter import filedialog, messagebox
import json
import os
class IPFilterApp:
def __init__(self, root):
self.root = root
self.root.title("IP过滤器")
self.ip_data = {}
self.whitelist = set()
self.blacklist = set()
self.load_data()
self.create_widgets()
self.display_history()
def create_widgets(self):
# IP Entry
tk.Label(self.root, text="IP地址:").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
tk.Label(self.root, text="设备名称:").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)
# Add to Blacklist Button
tk.Button(self.root, text="添加到黑名单", command=self.add_to_blacklist).grid(row=2, column=0, padx=5, pady=5)
# Add to Whitelist Button
tk.Button(self.root, text="添加到白名单", command=self.add_to_whitelist).grid(row=2, column=1, padx=5, pady=5)
# Search Entry
tk.Label(self.root, text="搜索IP:").grid(row=3, column=0, padx=5, pady=5)
self.search_entry = tk.Entry(self.root)
self.search_entry.grid(row=3, column=1, padx=5, pady=5)
# Search Button
tk.Button(self.root, text="搜索", command=self.search_ip).grid(row=3, column=2, padx=5, pady=5)
# History Display
self.history_text = tk.Text(self.root, height=10, width=50)
self.history_text.grid(row=4, column=0, columnspan=3, padx=5, pady=5)
# Load History Button
tk.Button(self.root, text="导入历史封禁IP", command=self.load_history).grid(row=5, column=0, columnspan=3, padx=5, pady=5)
def load_data(self):
if os.path.exists("ip_data.json"):
with open("ip_data.json", "r") as file:
self.ip_data = json.load(file)
self.whitelist = set(self.ip_data.get("whitelist", []))
self.blacklist = set(self.ip_data.get("blacklist", []))
def save_data(self):
self.ip_data["whitelist"] = list(self.whitelist)
self.ip_data["blacklist"] = list(self.blacklist)
with open("ip_data.json", "w") as file:
json.dump(self.ip_data, file)
def add_to_blacklist(self):
ip = self.ip_entry.get()
name = self.name_entry.get()
if ip:
self.blacklist.add(ip)
self.ip_data[ip] = {"name": name, "list": "blacklist"}
self.save_data()
self.display_history()
def add_to_whitelist(self):
ip = self.ip_entry.get()
name = self.name_entry.get()
if ip:
self.whitelist.add(ip)
self.ip_data[ip] = {"name": name, "list": "whitelist"}
self.save_data()
self.display_history()
def search_ip(self):
ip = self.search_entry.get()
if ip in self.ip_data:
info = self.ip_data[ip]
messagebox.showinfo("搜索结果", f"IP: {ip}\n设备名称: {info['name']}\n列表: {info['list']}")
else:
messagebox.showinfo("搜索结果", "未找到该IP的信息")
def load_history(self):
file_path = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])
if file_path:
with open(file_path, "r") as file:
for line in file:
ip = line.strip()
if ip:
self.blacklist.add(ip)
self.ip_data[ip] = {"name": "", "list": "blacklist"}
self.save_data()
self.display_history()
def display_history(self):
self.history_text.delete(1.0, tk.END)
self.history_text.insert(tk.END, "黑名单:\n")
for ip in self.blacklist:
self.history_text.insert(tk.END, f"{ip}\n")
self.history_text.insert(tk.END, "\n白名单:\n")
for ip in self.whitelist:
self.history_text.insert(tk.END, f"{ip}\n")
if __name__ == "__main__":
root = tk.Tk()
app = IPFilterApp(root)
root.mainloop()
self.ip_data
存储IP信息,减少冗余。tk.Label
和 tk.Entry
直接创建UI组件,减少代码重复。search_ip
方法实现IP搜索功能。load_history
方法实现从txt文件导入历史封禁IP地址的功能。这样,代码更加简洁,功能也更加完善。