privacy-protection-tools / anti-AD

致力于成为中文区命中率最高的广告过滤列表,实现精确的广告屏蔽和隐私保护。anti-AD现已支持AdGuardHome,dnsmasq, Surge,Pi-Hole,smartdns等网络组件。完全兼容常见的广告过滤工具所支持的各种广告过滤列表格式
https://anti-ad.net
MIT License
8.09k stars 723 forks source link

请问大佬能否适配sing-box的规则文件 #900

Open LQ2002 opened 4 months ago

LQ2002 commented 4 months ago

singbox有劫持dns请求服务,能否适配下singbox的规则吖。

welcome[bot] commented 4 months ago

Thank you for opening your first issue in this repo. It’s people like you who make anti-AD better!

gentlyxu commented 4 months ago

有参考的列表格式吗?

MkQtS commented 4 months ago

sing-box 的配置是 json 格式,要匹配doubleclick.net及其子域名,对于 sing-box 1.9.0 之前的版本,是这样的:

{
    "version": 1,
    "rules": [
        {
            "domain": [
                "doubleclick.net"
            ]
        },
        {
            "domain_suffix": [
                ".doubleclick.net"
            ]
        }
    ]
}

sing-box 1.9.0 之后这样:

{
    "version": 1,
    "rules": [
        {
            "domain_suffix": [
                "doubleclick.net"
            ]
        }
    ]
}

支持编译为二进制减小体积

参考:

  1. https://sing-box.sagernet.org/configuration/rule-set/source-format/#compile

  2. https://github.com/SagerNet/sing-box/commit/f91a90cad8bc331f9ad7c943dd083c77c3ebfc7f

不过似乎不支持在一个规则里匹配部分域名同时排除另外部分域名(例如屏蔽mmstat.com,但放行log.mmstat.com)可能需要生成两个文件

merrkry commented 4 months ago

不过似乎不支持在一个规则里匹配部分域名同时排除另外部分域名(例如屏蔽mmstat.com,但放行log.mmstat.com)可能需要生成两个文件

是可行的,使用逻辑规则即可,模板如下:

{
  "version": 1,
  "rules": [
    {
      "type": "logical",
      "mode": "and",
      "rules": [
        {
          "domain": [],
          "domain_suffix": []
        },
        {
          "domain": [],
          "domain_suffix": [],
          "invert": true
        }
      ]
    }
  ]
}

sing-box 1.9+ 仍然与旧版本写法兼容,使用旧版写法生成规则兼容性更佳。

另外由于 sing-box 的规则集引用机制,「引用的规则集可视为被合并,而不是作为一个单独的规则子项」,使用逻辑规则的规则集在与其他规则集合并使用的时候容易出现问题,需要在一条规则中单独使用。还请添加相关注释。

InspoOnU commented 1 month ago

sing-box的1.9正式版出了,现在domain suffix规则和其他app可以保持一致

srk24 commented 1 month ago

https://github.com/srk24/profile/blob/master/sing/ruleset/anti_ad.srs 我用surge2的转换了一个。使用编译后的文件(即srs后缀文件)就行,编译出来文件的兼容1.9.x和<1.9.x,并且期望是一致的

PuerNya commented 3 weeks ago

https://github.com/srk24/profile/blob/master/sing/ruleset/anti_ad.srs 我用surge2的转换了一个。使用编译后的文件(即srs后缀文件)就行,编译出来文件的兼容1.9.x和<1.9.x,并且期望是一致的

如果希望释出 json 还是建议以 1.9.0- 的格式为主,事实上 1.9.0- 的 source type rule-set 和 1.9.0+ 的 source type rule-set 在 compile 之后没有区别

srk24 commented 3 weeks ago

https://github.com/srk24/profile/blob/master/sing/ruleset/anti_ad.srs 我用surge2的转换了一个。使用编译后的文件(即srs后缀文件)就行,编译出来文件的兼容1.9.x和<1.9.x,并且期望是一致的

如果希望释出 json 还是建议以 1.9.0- 的格式为主,事实上 1.9.0- 的 source type rule-set 和 1.9.0+ 的 source type rule-set 在 compile 之后没有区别

鼓励所有人用srs格式,所以这项我这边不会处理。