diff --git a/data/shield_stats.json b/data/shield_stats.json index 84b8a01..0afaf21 100644 --- a/data/shield_stats.json +++ b/data/shield_stats.json @@ -1,5 +1,5 @@ { "blockedDomainsCount": {}, "resolvedDomainsCount": {}, - "lastSaved": "2025-11-23T23:49:00.869596178+08:00" + "lastSaved": "2025-11-23T23:59:38.260427873+08:00" } \ No newline at end of file diff --git a/data/stats.json b/data/stats.json index 4d2b5cd..3bad383 100644 --- a/data/stats.json +++ b/data/stats.json @@ -340,5 +340,5 @@ "2025-11-23-22": 2, "2025-11-23-23": 2 }, - "lastSaved": "2025-11-23T23:35:51.696690359+08:00" + "lastSaved": "2025-11-23T23:53:55.655573463+08:00" } \ No newline at end of file diff --git a/dns-server b/dns-server new file mode 100755 index 0000000..f69e19e Binary files /dev/null and b/dns-server differ diff --git a/dns-server.log b/dns-server.log index 0976751..9ece824 100644 --- a/dns-server.log +++ b/dns-server.log @@ -18920,3 +18920,93 @@ time="2025-11-23T23:49:01+08:00" level=error msg="获取远程规则失败" erro time="2025-11-23T23:49:01+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/rules/costomize.txt" time="2025-11-23T23:49:01+08:00" level=info msg="规则加载完成,域名规则: 86449, 排除规则: 977, 正则规则: 901, hosts规则: 3" time="2025-11-23T23:49:01+08:00" level=info msg="自动更新规则成功" +time="2025-11-23T23:50:00+08:00" level=info msg="开始自动更新规则" +time="2025-11-23T23:50:00+08:00" level=info msg="Shield计数数据保存成功" +time="2025-11-23T23:50:00+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/filter.txt" +time="2025-11-23T23:50:01+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/hosts/adaway.txt" +time="2025-11-23T23:50:01+08:00" level=error msg="获取远程规则失败" error="Get \"hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt\": unsupported protocol scheme \"hhttps\"" url="hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt" +time="2025-11-23T23:50:01+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/rules/costomize.txt" +time="2025-11-23T23:50:01+08:00" level=info msg="规则加载完成,域名规则: 86449, 排除规则: 977, 正则规则: 901, hosts规则: 3" +time="2025-11-23T23:50:01+08:00" level=info msg="自动更新规则成功" +time="2025-11-23T23:51:00+08:00" level=info msg="开始自动更新规则" +time="2025-11-23T23:51:00+08:00" level=info msg="Shield计数数据保存成功" +time="2025-11-23T23:51:00+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/filter.txt" +time="2025-11-23T23:51:01+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/hosts/adaway.txt" +time="2025-11-23T23:51:01+08:00" level=error msg="获取远程规则失败" error="Get \"hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt\": unsupported protocol scheme \"hhttps\"" url="hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt" +time="2025-11-23T23:51:01+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/rules/costomize.txt" +time="2025-11-23T23:51:01+08:00" level=info msg="规则加载完成,域名规则: 86449, 排除规则: 977, 正则规则: 901, hosts规则: 3" +time="2025-11-23T23:51:01+08:00" level=info msg="自动更新规则成功" +time="2025-11-23T23:52:00+08:00" level=info msg="开始自动更新规则" +time="2025-11-23T23:52:00+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/filter.txt" +time="2025-11-23T23:52:01+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/hosts/adaway.txt" +time="2025-11-23T23:52:01+08:00" level=error msg="获取远程规则失败" error="Get \"hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt\": unsupported protocol scheme \"hhttps\"" url="hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt" +time="2025-11-23T23:52:01+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/rules/costomize.txt" +time="2025-11-23T23:52:01+08:00" level=info msg="规则加载完成,域名规则: 86449, 排除规则: 977, 正则规则: 901, hosts规则: 3" +time="2025-11-23T23:52:01+08:00" level=info msg="自动更新规则成功" +time="2025-11-23T23:52:01+08:00" level=info msg="Shield计数数据保存成功" +time="2025-11-23T23:53:00+08:00" level=info msg="开始自动更新规则" +time="2025-11-23T23:53:00+08:00" level=info msg="Shield计数数据保存成功" +time="2025-11-23T23:53:00+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/filter.txt" +time="2025-11-23T23:53:01+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/hosts/adaway.txt" +time="2025-11-23T23:53:01+08:00" level=error msg="获取远程规则失败" error="Get \"hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt\": unsupported protocol scheme \"hhttps\"" url="hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt" +time="2025-11-23T23:53:01+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/rules/costomize.txt" +time="2025-11-23T23:53:01+08:00" level=info msg="规则加载完成,域名规则: 86449, 排除规则: 977, 正则规则: 901, hosts规则: 3" +time="2025-11-23T23:53:01+08:00" level=info msg="自动更新规则成功" +time="2025-11-23T23:53:55+08:00" level=info msg="正在关闭服务..." +time="2025-11-23T23:53:55+08:00" level=info msg="统计数据保存成功" +time="2025-11-23T23:53:55+08:00" level=info msg="DNS服务器已停止" +time="2025-11-23T23:53:55+08:00" level=error msg="HTTP控制台服务器启动失败" error="http: Server closed" +time="2025-11-23T23:53:55+08:00" level=info msg="HTTP控制台服务器已停止" +time="2025-11-23T23:53:55+08:00" level=info msg="Shield计数数据保存成功" +time="2025-11-23T23:53:55+08:00" level=info msg="规则自动更新已停止" +time="2025-11-23T23:53:55+08:00" level=info msg="所有服务已关闭" +time="2025-11-23T23:53:55+08:00" level=warning msg="日志系统已关闭" +time="2025-11-23T23:54:37+08:00" level=error msg="解析Shield计数数据失败" error="unexpected end of JSON input" +time="2025-11-23T23:54:37+08:00" level=error msg="获取远程规则失败" error="Get \"hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt\": unsupported protocol scheme \"hhttps\"" url="hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt" +time="2025-11-23T23:54:37+08:00" level=info msg="规则加载完成,域名规则: 86449, 排除规则: 977, 正则规则: 452, hosts规则: 3" +time="2025-11-23T23:54:37+08:00" level=info msg="统计数据加载成功" +time="2025-11-23T23:54:37+08:00" level=info msg="DNS服务器已启动,监听端口: 53" +time="2025-11-23T23:54:37+08:00" level=info msg="HTTP控制台已启动,监听端口: 8080" +time="2025-11-23T23:54:37+08:00" level=info msg="DNS TCP服务器启动,监听端口: 53" +time="2025-11-23T23:54:37+08:00" level=info msg="规则自动更新已启动" interval=60 +time="2025-11-23T23:54:37+08:00" level=info msg="DNS UDP服务器启动,监听端口: 53" +time="2025-11-23T23:54:37+08:00" level=info msg="启动Shield计数数据自动保存功能" file=./data/shield_stats.json interval=60 +time="2025-11-23T23:54:37+08:00" level=info msg="HTTP控制台服务器启动,监听地址: 0.0.0.0:8080" +time="2025-11-23T23:54:37+08:00" level=info msg="Shield计数数据保存成功" +time="2025-11-23T23:55:37+08:00" level=info msg="开始自动更新规则" +time="2025-11-23T23:55:37+08:00" level=info msg="Shield计数数据保存成功" +time="2025-11-23T23:55:38+08:00" level=error msg="获取远程规则失败" error="Get \"hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt\": unsupported protocol scheme \"hhttps\"" url="hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt" +time="2025-11-23T23:55:38+08:00" level=info msg="规则加载完成,域名规则: 86449, 排除规则: 977, 正则规则: 452, hosts规则: 3" +time="2025-11-23T23:55:38+08:00" level=info msg="自动更新规则成功" +time="2025-11-23T23:56:37+08:00" level=info msg="开始自动更新规则" +time="2025-11-23T23:56:37+08:00" level=info msg="Shield计数数据保存成功" +time="2025-11-23T23:56:37+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/filter.txt" +time="2025-11-23T23:56:37+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/hosts/adaway.txt" +time="2025-11-23T23:56:38+08:00" level=error msg="获取远程规则失败" error="Get \"hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt\": unsupported protocol scheme \"hhttps\"" url="hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt" +time="2025-11-23T23:56:38+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/rules/costomize.txt" +time="2025-11-23T23:56:38+08:00" level=info msg="规则加载完成,域名规则: 86449, 排除规则: 977, 正则规则: 901, hosts规则: 3" +time="2025-11-23T23:56:38+08:00" level=info msg="自动更新规则成功" +time="2025-11-23T23:57:37+08:00" level=info msg="Shield计数数据保存成功" +time="2025-11-23T23:57:37+08:00" level=info msg="开始自动更新规则" +time="2025-11-23T23:57:37+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/filter.txt" +time="2025-11-23T23:57:37+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/hosts/adaway.txt" +time="2025-11-23T23:57:38+08:00" level=error msg="获取远程规则失败" error="Get \"hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt\": unsupported protocol scheme \"hhttps\"" url="hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt" +time="2025-11-23T23:57:38+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/rules/costomize.txt" +time="2025-11-23T23:57:38+08:00" level=info msg="规则加载完成,域名规则: 86449, 排除规则: 977, 正则规则: 901, hosts规则: 3" +time="2025-11-23T23:57:38+08:00" level=info msg="自动更新规则成功" +time="2025-11-23T23:58:37+08:00" level=info msg="开始自动更新规则" +time="2025-11-23T23:58:37+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/filter.txt" +time="2025-11-23T23:58:37+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/hosts/adaway.txt" +time="2025-11-23T23:58:38+08:00" level=error msg="获取远程规则失败" error="Get \"hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt\": unsupported protocol scheme \"hhttps\"" url="hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt" +time="2025-11-23T23:58:38+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/rules/costomize.txt" +time="2025-11-23T23:58:38+08:00" level=info msg="规则加载完成,域名规则: 86449, 排除规则: 977, 正则规则: 901, hosts规则: 3" +time="2025-11-23T23:58:38+08:00" level=info msg="自动更新规则成功" +time="2025-11-23T23:58:38+08:00" level=info msg="Shield计数数据保存成功" +time="2025-11-23T23:59:37+08:00" level=info msg="开始自动更新规则" +time="2025-11-23T23:59:37+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/filter.txt" +time="2025-11-23T23:59:37+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/hosts/adaway.txt" +time="2025-11-23T23:59:38+08:00" level=error msg="获取远程规则失败" error="Get \"hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt\": unsupported protocol scheme \"hhttps\"" url="hhttps://gitea.amazehome.xyz/AMAZEHOME/hosts-and-Filters/raw/branch/main/list/easylist.txt" +time="2025-11-23T23:59:38+08:00" level=info msg="从缓存加载远程规则" url="https://gitea.amazehome.xyz/AMAZEHOME/hosts-and-filters/raw/branch/main/rules/costomize.txt" +time="2025-11-23T23:59:38+08:00" level=info msg="规则加载完成,域名规则: 86449, 排除规则: 977, 正则规则: 901, hosts规则: 3" +time="2025-11-23T23:59:38+08:00" level=info msg="自动更新规则成功" +time="2025-11-23T23:59:38+08:00" level=info msg="Shield计数数据保存成功" diff --git a/http/server.go b/http/server.go index e9d9335..a8f107d 100644 --- a/http/server.go +++ b/http/server.go @@ -304,12 +304,21 @@ func (s *Server) handleShieldHosts(w http.ResponseWriter, r *http.Request) { case http.MethodGet: // 获取hosts条目列表 - // 注意:这需要在shieldManager中添加一个获取所有hosts条目的方法 - // 暂时返回统计信息 - stats := s.shieldManager.GetStats() + hosts := s.shieldManager.GetAllHosts() + hostsCount := s.shieldManager.GetHostsCount() + + // 转换为数组格式,便于前端展示 + hostsList := make([]map[string]string, 0, len(hosts)) + for domain, ip := range hosts { + hostsList = append(hostsList, map[string]string{ + "domain": domain, + "ip": ip, + }) + } + json.NewEncoder(w).Encode(map[string]interface{}{ - "hostsCount": stats["hostsRules"], - "message": "获取hosts列表功能待实现", + "hosts": hostsList, + "hostsCount": hostsCount, }) default: diff --git a/shield/manager.go b/shield/manager.go index 3a083d0..ee21def 100644 --- a/shield/manager.go +++ b/shield/manager.go @@ -1019,6 +1019,28 @@ func (m *ShieldManager) UpdateBlacklist(blacklists []config.BlacklistEntry) { m.config.Blacklists = blacklists } +// GetAllHosts 获取所有hosts条目 +func (m *ShieldManager) GetAllHosts() map[string]string { + m.rulesMutex.RLock() + defer m.rulesMutex.RUnlock() + + // 返回hostsMap的副本,避免并发问题 + hostsCopy := make(map[string]string, len(m.hostsMap)) + for domain, ip := range m.hostsMap { + hostsCopy[domain] = ip + } + + return hostsCopy +} + +// GetHostsCount 获取hosts条目数量 +func (m *ShieldManager) GetHostsCount() int { + m.rulesMutex.RLock() + defer m.rulesMutex.RUnlock() + + return len(m.hostsMap) +} + // GetRules 获取所有规则 func (m *ShieldManager) GetRules() map[string]interface{} { m.rulesMutex.RLock() diff --git a/static/index.html b/static/index.html index 5f72f79..395c73a 100644 --- a/static/index.html +++ b/static/index.html @@ -1559,7 +1559,7 @@ function loadRules() { console.error('保存黑名单设置失败:', error); showNotification('danger', '保存失败: ' + error.message); }); - .then(data => { + then(data => { // 重置按钮状态 btn.innerHTML = originalText; btn.disabled = false; @@ -1591,22 +1591,40 @@ function loadRules() { fetch('/api/shield/hosts') .then(response => response.json()) .then(data => { - // 注意这需要在shieldManager中添加一个获取所有hosts条目的方法 - // 暂时返回统计信息 const hostsCount = data.hostsCount || 0; + const hostsList = data.hosts || []; - if (hostsCount > 0) { - hostsContainer.innerHTML = `
暂无Hosts条目
暂无Hosts条目
+ +加载中...
暂无Hosts条目
+ +加载失败: ${error.message}