增加更多匹配的域名信息

This commit is contained in:
Alex Yang
2026-01-14 23:08:46 +08:00
parent f247eaeaa8
commit 8159577be0
60 changed files with 11716 additions and 1022 deletions

View File

@@ -0,0 +1,113 @@
## 支持Base64编码GFWList格式的实现计划
### 问题分析
当前的GFWList加载代码直接按行解析文件内容无法处理Base64编码的GFWList格式。Base64编码的GFWList文件包含
1. 头部注释行(以!开头)
2. Base64编码的规则内容整个文件或主要部分
3. 可能的尾部注释
### 解决方案
修改`gfw/manager.go`中的`LoadRules`函数添加Base64解码支持
1. **检测Base64编码**
- 读取文件内容
- 跳过注释行
- 检查剩余内容是否为Base64编码
2. **解码Base64内容**
- 如果是Base64编码使用`encoding/base64`包解码
- 解码后得到原始规则文本
3. **解析规则**
- 按行分割解码后的内容
- 调用现有的`parseRule`函数处理每一行
### 具体修改点
1. **添加Base64依赖**
-`gfw/manager.go`中添加`encoding/base64`导入
2. **修改LoadRules函数**
- 读取文件内容
- 过滤注释行收集可能的Base64内容
- 尝试Base64解码
- 解析解码后的规则
3. **测试**
- 使用现有的Base64编码GFWList文件测试
- 确保解码和规则解析正常工作
### 预期效果
- 服务器能够正确加载Base64编码的GFWList文件
- 兼容现有的纯文本GFWList格式
- 规则解析结果与原格式一致
### 代码修改示例
```go
// 在import中添加encoding/base64
import (
// 现有导入
"encoding/base64"
// 现有导入
)
// 修改LoadRules函数
func (m *GFWListManager) LoadRules() error {
// 现有代码...
// 从文件路径读取GFWList内容
content, err := os.ReadFile(m.config.Content)
if err != nil {
return fmt.Errorf("读取GFWList文件失败: %w", err)
}
// 处理Base64编码
rawContent := string(content)
// 过滤注释行收集Base64内容
var base64Content strings.Builder
lines := strings.Split(rawContent, "\n")
for _, line := range lines {
line = strings.TrimSpace(line)
if line == "" || strings.HasPrefix(line, "!") || strings.HasPrefix(line, "[") {
// 跳过注释行和头信息
continue
}
base64Content.WriteString(line)
}
// 尝试Base64解码
decoded, err := base64.StdEncoding.DecodeString(base64Content.String())
if err == nil {
// 解码成功,使用解码后的内容
rawContent = string(decoded)
} else {
// 解码失败,使用原始内容(可能是纯文本格式)
}
// 按行解析规则
ruleLines := strings.Split(rawContent, "\n")
for _, line := range ruleLines {
line = strings.TrimSpace(line)
if line == "" || strings.HasPrefix(line, "!") || strings.HasPrefix(line, "[") {
// 跳过空行、注释行和头信息行
continue
}
m.parseRule(line)
}
// 现有代码...
}
```
### 实施步骤
1. 修改`gfw/manager.go`添加Base64支持
2. 编译并测试
3. 验证规则加载是否正常
这个修改将使服务器能够同时支持纯文本和Base64编码的GFWList格式提高了兼容性和灵活性。