sing-geosite规则集生成原理:一文读懂domainMap与SRS文件

📅 2026/7/21 18:38:08
sing-geosite规则集生成原理:一文读懂domainMap与SRS文件
sing-geosite规则集生成原理一文读懂domainMap与SRS文件【免费下载链接】sing-geositeGeosite database and rule sets for sing-box.项目地址: https://gitcode.com/gh_mirrors/si/sing-geositesing-geosite是为sing-box打造的Geosite数据库和规则集项目其核心功能是通过domainMap数据结构和SRS文件格式实现高效的域名规则管理。本文将深入解析这两个关键组件的生成原理帮助用户理解sing-geosite规则集的工作机制。domainMap规则集的核心数据结构domainMap是sing-geosite规则集生成过程中的核心数据结构它负责存储和组织所有域名规则信息。在main.go中我们可以看到domainMap的定义和使用过程domainMap : make(map[string][]geosite.Item)这行代码创建了一个以字符串为键、geosite.Item切片为值的映射。其中键通常表示国家代码或类别标签而值则包含具体的域名规则项。domainMap的构建主要分为以下几个步骤数据解析从上游数据源下载并解析原始数据转换为geosite.Item格式去重处理使用common.Uniq函数确保每个域名规则的唯一性属性分类根据域名属性创建带符号的复合键如cncategory标签过滤通过filterTags函数移除冗余和冲突的规则项标签合并使用mergeTags函数合并相关类别的规则如合并所有中国地区相关规则SRS文件高效的规则集存储格式SRSSing-box Rule Set是sing-geosite项目采用的规则集文件格式专为sing-box设计具有高效的加载和匹配性能。SRS文件的生成过程在main.go的generate函数中实现for code, domains : range domainMap { // 编译域名规则 defaultRule : geosite.Compile(domains) // 构建规则集结构 plainRuleSet.Rules []option.HeadlessRule{{ Type: C.RuleTypeDefault, DefaultOptions: headlessRule, }} // 写入SRS文件 srsPath : filepath.Join(ruleSetOutput, geosite-code.srs) outputRuleSet, err : os.Create(srsPath) err srs.Write(outputRuleSet, plainRuleSet, false) }SRS文件生成过程主要包括规则编译将domainMap中的域名规则编译为高效的匹配格式规则集构建创建包含默认规则类型的规则集结构文件写入使用srs.Write函数将规则集写入SRS文件sing-geosite项目同时生成稳定版和不稳定版两种SRS文件分别存储在rule-set和rule-set-unstable目录中以满足不同场景的需求。完整的规则集生成流程综合来看sing-geosite规则集的生成流程可以概括为数据获取从上游仓库下载最新的域名列表数据数据验证通过SHA256校验确保数据完整性domainMap构建解析、分类、过滤和合并域名规则数据库生成将domainMap写入geosite.db和geosite-cn.dbSRS文件生成将每个类别的规则编译为SRS格式文件这一流程通过main.go中的release和generate函数实现确保了规则集的及时性、准确性和高效性。如何使用生成的规则集生成的规则集可以通过sing-box的配置文件引用例如{ route: { rule_set: [ { type: file, tag: geosite-cn, path: rule-set/geosite-cn.srs } ], rules: [ { rule_set: geosite-cn, outbound: direct } ] } }通过这种方式用户可以轻松实现基于地理位置或类别的域名路由策略。sing-geosite项目通过domainMap和SRS文件的协同工作为sing-box提供了强大而灵活的域名规则管理能力。理解这两个核心组件的生成原理有助于用户更好地配置和使用sing-box实现高效的网络流量控制。【免费下载链接】sing-geositeGeosite database and rule sets for sing-box.项目地址: https://gitcode.com/gh_mirrors/si/sing-geosite创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考