Skip to content

[Bug] rules中,在AND中使用DOMAIN-REGEX会出现识别bug,无法正常处理正则表达式 #2150

@weineo

Description

@weineo

验证步骤

  • 我已经阅读了 文档,了解所有我编写的配置文件项的含义,而不是大量堆砌看似有用的选项或默认值。
  • 我仔细看过 文档 并未解决问题
  • 我已在 Issue Tracker 中寻找过我要提出的问题,并且没有找到
  • 我是中文用户,而非其他语言用户
  • 我已经使用最新的 Alpha 分支版本测试过,问题依旧存在
  • 我提供了可以在本地重现该问题的服务器、客户端配置文件与流程,而不是一个脱敏的复杂客户端配置文件。
  • 我提供了可用于重现我报告的错误的最简配置,而不是依赖远程服务器或者堆砌大量对于复现无用的配置等。
  • 我提供了完整的日志,而不是出于对自身智力的自信而仅提供了部分认为有用的部分。
  • 我直接使用 Mihomo 命令行程序重现了错误,而不是使用其他工具或脚本。

操作系统

Windows

系统版本

11

Mihomo 版本

1.19.11

配置文件

mode: rule
redir-port: 7895
tproxy-port: 7896
mixed-port: 7888
allow-lan: true
log-level: info
ipv6: true
external-controller: 127.0.0.1:9097
secret: set-your-secret
unified-delay: true
external-controller-cors:
  allow-private-network: true
  allow-origins:
  - tauri://localhost
  - http://tauri.localhost
  - https://yacd.metacubex.one
  - https://metacubex.github.io
  - https://board.zash.run.place
tcp-concurrent: true
skip-auth-prefixes:
- 127.0.0.1/8
- ::1/128
geox-url:
  geoip: https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat
  geosite: https://fastly.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat
  mmdb: https://cdn.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/Country.mmdb
sniffer:
  enable: true
  parse-pure-ip: true
  sniff:
    TLS:
      ports:
      - 443
      - 8443
    HTTP:
      ports:
      - 80
      - 8080-8880
      override-destination: true
  force-domain: []
geodata-mode: true
bind-address: '*'
keep-alive-interval: 15
find-process-mode: strict
profile:
  store-selected: true
  store-fake-ip: true
global-client-fingerprint: chrome
tun:
  enable: false
  stack: gvisor
  dns-hijack:
  - any:53
  strict-route: true
  auto-route: true
  auto-detect-interface: true
  device: Mihomo
  mtu: 1500
proxies:

proxy-groups:

rule-providers:
  reject:
    type: http
    behavior: domain
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt
    path: ./ruleset/reject.yaml
    interval: 86400
  icloud:
    type: http
    behavior: domain
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt
    path: ./ruleset/icloud.yaml
    interval: 86400
  apple:
    type: http
    behavior: domain
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt
    path: ./ruleset/apple.yaml
    interval: 86400
  google:
    type: http
    behavior: domain
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt
    path: ./ruleset/google.yaml
    interval: 86400
  proxy:
    type: http
    behavior: domain
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt
    path: ./ruleset/proxy.yaml
    interval: 86400
  direct:
    type: http
    behavior: domain
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt
    path: ./ruleset/direct.yaml
    interval: 86400
  private:
    type: http
    behavior: domain
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt
    path: ./ruleset/private.yaml
    interval: 86400
  gfw:
    type: http
    behavior: domain
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt
    path: ./ruleset/gfw.yaml
    interval: 86400
  greatfire:
    type: http
    behavior: domain
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/greatfire.txt
    path: ./ruleset/greatfire.yaml
    interval: 86400
  tld-not-cn:
    type: http
    behavior: domain
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/tld-not-cn.txt
    path: ./ruleset/tld-not-cn.yaml
    interval: 86400
  telegramcidr:
    type: http
    behavior: ipcidr
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt
    path: ./ruleset/telegramcidr.yaml
    interval: 86400
  cncidr:
    type: http
    behavior: ipcidr
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt
    path: ./ruleset/cncidr.yaml
    interval: 86400
  lancidr:
    type: http
    behavior: ipcidr
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt
    path: ./ruleset/lancidr.yaml
    interval: 86400
  applications:
    type: http
    behavior: classical
    format: yaml
    url: https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/applications.txt
    path: ./ruleset/applications.yaml
    interval: 86400
  bing:
    type: http
    behavior: classical
    format: yaml
    url: https://gcore.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/Bing/Bing.yaml
    path: ./ruleset/bing.yaml
    interval: 86400
  microsoft:
    type: http
    behavior: classical
    format: yaml
    url: https://gcore.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/Microsoft/Microsoft.yaml
    path: ./ruleset/microsoft.yaml
    interval: 86400
  youtube:
    type: http
    behavior: classical
    format: yaml
    url: https://gcore.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/YouTube/YouTube.yaml
    path: ./ruleset/youtube.yaml
    interval: 86400
  bilibiliintl:
    type: http
    behavior: classical
    format: yaml
    url: https://gcore.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/BiliBiliIntl/BiliBiliIntl.yaml
    path: ./ruleset/bilibiliintl.yaml
    interval: 86400
  videocdn:
    type: http
    behavior: classical
    format: yaml
    url: https://raw.githubusercontent.com/weineo/clashrule/refs/heads/main/VideoCDN.yaml
    path: ./ruleset/videocdn.yaml
    interval: 86400
rules:
- DOMAIN-KEYWORD,freeok,DIRECT
- DOMAIN-KEYWORD,dami,DIRECT
- DOMAIN-KEYWORD,dmflm,DIRECT
- DOMAIN-KEYWORD,ijujitv,DIRECT
- DOMAIN-KEYWORD,dandanju.,Proxy
- DOMAIN-SUFFIX,kan.cc,Proxy
- AND,((DOMAIN-REGEX,^[a-z0-9]{10,15}\.com$),(IP-ASN,13335)),DIRECT
- DOMAIN,login.microsoftonline.com,DIRECT
- DOMAIN,self.events.data.microsoft.com,DIRECT
- DOMAIN-SUFFIX,azurefd.net,DIRECT
- DOMAIN-SUFFIX,storage.live.com,DIRECT
- DOMAIN-SUFFIX,skydrive.wns.windows.com,DIRECT
- DOMAIN-SUFFIX,cnki.net,DIRECT
- DOMAIN-SUFFIX,ieee.org,DIRECT
- DOMAIN-SUFFIX,acm.org,DIRECT
- DOMAIN-SUFFIX,imgtu.com,DIRECT
- DOMAIN-SUFFIX,dpdk.org,DIRECT
- DOMAIN-SUFFIX,freenom.com,DIRECT
- DOMAIN-SUFFIX,sciencedirect.com,DIRECT
- DOMAIN-SUFFIX,springer.com,DIRECT
- DOMAIN,onedrive.live.com,Proxy
- DOMAIN-SUFFIX,69shuba.com,Proxy
- DOMAIN-SUFFIX,erome.com,Proxy
- DOMAIN-KEYWORD,xingjiabijichang.com,Proxy
- DOMAIN-SUFFIX,rewards.bing.com,Bing
- DOMAIN-SUFFIX,rewards.microsoft.com,Bing
- DOMAIN-SUFFIX,gemini.google.com,ArtIntel
- DOMAIN-SUFFIX,copilot.microsoft.com,ArtIntel
- DOMAIN-SUFFIX,sydney.bing.com,ArtIntel
- DOMAIN-SUFFIX,www.bing.com/images,ArtIntel
- DOMAIN-SUFFIX,www.bing.com/visualsearch,ArtIntel
- RULE-SET,videocdn,VideoCDN
- GEOSITE,Private,DIRECT
- GEOSITE,Bing,Bing
- GEOSITE,Openai,ArtIntel
- GEOSITE,Category-games@cn,Mainland
- GEOSITE,Category-games,Games
- GEOSITE,Github,Proxy
- GEOSITE,Telegram,Telegram
- GEOSITE,Bilibili,BiliBili
- GEOSITE,Youtube,Streaming
- GEOSITE,Disney,Streaming
- GEOSITE,Netflix,Streaming
- GEOSITE,HBO,Streaming
- GEOSITE,Primevideo,Streaming
- GEOSITE,Microsoft@cn,Mainland
- GEOSITE,Apple@cn,Mainland
- RULE-SET,youtube,Streaming
- RULE-SET,bing,Bing
- RULE-SET,microsoft,Microsoft
- RULE-SET,private,DIRECT
- RULE-SET,applications,DIRECT
- RULE-SET,icloud,DIRECT
- RULE-SET,google,Proxy
- RULE-SET,lancidr,DIRECT
- RULE-SET,cncidr,DIRECT
- RULE-SET,telegramcidr,Proxy
- RULE-SET,proxy,Proxy
- RULE-SET,direct,DIRECT
- GEOSITE,CN,Mainland
- GEOIP,lan,DIRECT,no-resolve
- GEOIP,CN,Mainland,no-resolve
- MATCH,Final

描述

在rules中,在AND中使用DOMAIN-REGEX会出现识别bug,无法正常处理正则表达式。
例子:使用规则
AND,((DOMAIN-REGEX,^[a-z0-9]{10,15}.com$),(IP-ASN,13335)),DIRECT
尝试识别所有使用cloudflare的,顶级域名com前带有10-15位字符的网址并走直连,
如thwzv5ijh9wd.com 。
但是,软件识别规则为AND((DomainRegex,^[a-z0-9]{10) && (IPASN,13335))
逗号后的部分无法识别,导致完全无法匹配,还请改进。

Image

Image

重现方式

加入任何AND规则,其中含有DOMAIN-REGEX,后跟的正则表达式内有**,逗号**,就会导致规则识别异常,逗号后的部分无法识别

日志

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions