IP过滤器程序:展示黑白名单及设备信息与时间

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

完善以下程序代码,要求同时展示出黑名单和白名单内容,发现的设备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()

此代码实现了以下功能:

  1. 用户可以输入IP地址、设备名称、最后一次出现时间、提交封禁时间和备注。
  2. 添加IP时会检查是否已在白名单或黑名单中。
  3. 显示白名单和黑名单的内容,包括IP地址、设备名称、最后一次出现时间、提交封禁时间和备注。
  4. 数据保存在data.json文件中,程序启动时会加载数据,关闭时会