package main import ( "encoding/json" "log" "os" ) // Config 防火墙配置结构 type Config struct { LogLevel LogLevel `json:"log_level"` CaptureInterface string `json:"capture_interface"` ForwardEnabled bool `json:"forward_enabled"` MaxPacketSize int `json:"max_packet_size"` ConfigFile string `json:"config_file"` } // NewConfig 创建新的配置实例 func NewConfig() *Config { return &Config{ LogLevel: LogLevelInfo, CaptureInterface: "", ForwardEnabled: false, MaxPacketSize: 65536, ConfigFile: "firewall.json", } } // Load 从配置文件加载配置 func (c *Config) Load() error { // 检查文件是否存在 if _, err := os.Stat(c.ConfigFile); os.IsNotExist(err) { // 文件不存在,使用默认配置并保存 log.Println("Config file not found, creating default config") return c.Save() } // 读取文件内容 data, err := os.ReadFile(c.ConfigFile) if err != nil { return err } // 解析JSON if err := json.Unmarshal(data, c); err != nil { return err } log.Println("Config loaded successfully") return nil } // Save 将配置保存到文件 func (c *Config) Save() error { // 转换为JSON data, err := json.MarshalIndent(c, "", " ") if err != nil { return err } // 写入文件 if err := os.WriteFile(c.ConfigFile, data, 0644); err != nil { return err } log.Println("Config saved successfully") return nil } // Update 更新配置参数 func (c *Config) Update(newConfig *Config) { c.LogLevel = newConfig.LogLevel c.CaptureInterface = newConfig.CaptureInterface c.ForwardEnabled = newConfig.ForwardEnabled c.MaxPacketSize = newConfig.MaxPacketSize }