Skip to content

cosmic-latte/sing-box-subscribe

 
 

Repository files navigation

sing-box-subscribe

中文 | EN

根据配置模板生成 sing-box 使用的 config.json,主要用于将机场订阅节点添加到 config,对使用 clash_mode 的配置才有意义。

不适合完全不了解 sing-box 配置文件的人使用,最少要知道什么是出站、dns server、dns规则、路由规则。最好了解 clash 的分组方式。

请查看:https://sing-box.sagernet.org/zh/configuration

SSR协议脚本默认不解析,订阅链接里都是SSR协议会报错

特色

sing-box网页版解析器

用自己搭建的网站实现配置热更新,可充当 sing-box 的 remote link

比如我搭建的网站 https://sing-box-subscribe.vercel.app, 在网站后面添加 /config/URL_LINK, 此处 URL_LINK 指订阅链接

在 sing-box 中输入此格式的链接,你可能需要在 URL_LINK 前面加 url=

https://xxxxxxx.vercel.app/config/url=https://xxxxxxsubscribe?token=123456/&file=https://github.com/Toperlock/sing-box-subscribe/raw/main/config_template/config_template_groups_tun.json

2023.10.26更新: 支持链接后面增加 emoji, tag, prefix, UA, file参数用 & 连接多个参数, 用法与 providers.json 里的参数一样

/config/URL_LINK/&emoji=1&prefix=♥&UA=v2rayng&file=https://xxxxxxxxx.json

上面例子表示:开启emoji,节点名前加♥,使用v2rayng用户代理,使用 https://xxxxxxxxx.json 作为生成 sing-box 配置模板(这些参数只有 URL_LINK 是一条链接时才有效)

示例:https://sing-box-subscribe.vercel.app/config/https://gist.githubusercontent.com/Toperlock/b1ca381c32820e8c79669cbbd85b68ac/raw/dafae92fbe48ff36dae6e5172caa1cfd7914cda4/gistfile1.txt/&file=https://github.com/Toperlock/sing-box-subscribe/raw/main/config_template/config_template_groups_tun.json

2023.11.04更新: 可以处理两条订阅,格式为:/config/URL编码,不能写 emoji, tag, prefix, UA, file 参数

| 连接两个订阅链接后进行 URL编码 放在 config/ 后面,如图:

how-to-use

示例:https://sing-box-subscribe.vercel.app/config/https%3A%2F%2Fgist.githubusercontent.com%2FToperlock%2Fb1ca381c32820e8c79669cbbd85b68ac%2Fraw%2Fdafae92fbe48ff36dae6e5172caa1cfd7914cda4%2Fgistfile1.txt%7Chttps%3A%2F%2Fgist.githubusercontent.com%2FToperlock%2Ffa2fdc5f827ff7d288c23d568db75412%2Fraw%2F6c3b725da347f57b0021b806dfca5f51e1660746%2F1.yaml

2023.11.10更新:可以简化 file 参数写成数字 12 代表使用github仓库里提供的的模板序号

示例:https://sing-box-subscribe.vercel.app/config/https://gist.githubusercontent.com/Toperlock/b1ca381c32820e8c79669cbbd85b68ac/raw/dafae92fbe48ff36dae6e5172caa1cfd7914cda4/gistfile1.txt/&file=2

演示视频

网页解析通用订阅链接(v2/clash/sing-box)
sing-box.remote.link.mp4

导航

操作演示视频

参数填写含义

模板内容详解

Windows使用

支持协议

协议 V2格式 Clash格式 标准URI格式 SingBox格式
http
socks5
shadowsocks
shadowsocksR singbox默认不支持此协议
vmess
trojan
vless
tuic
hysteria
hysteria2
wireguard

不支持转换 clash 订阅的解析 暂时只写了以上打勾协议的分享链接的解析(v2订阅格式/clash订阅格式),因为自己用的机场只有这几个协议。添加新的协议解析有能力可以自己写,比如 vless.py(文件名称必须为协议名称),写好后将其放入到 parsers 目录即可,vless.py 中必须包含 parse 函数。

脚本为自用,本人使用 yacd (ios请用http://yacd.metacubex.one) 进行节点切换管理(类型为urltest、selector的出站),配合规则像clash一样分流,非常方便。需求跟我一样的可以尝试,使用脚本过程中有新的功能需求或者出现任何错误请提出 issue,不要骚扰 sing-box。

脚本可以用vercel服务器部署在网页运行,也可以下载项目源码在本地运行。请使用自己部署的网站生成sing-box配置。

一、服务器部署

开始使用

  1. 点击此项目右上角的 fork 按钮,fork 本项目到自己仓库;
  2. 点击右侧按钮开始部署: Deploy with Vercel,直接使用 Github 账号登录即可;请查看详细教程
  3. 部署完毕后,即可开始使用;
  4. (可选)绑定自定义域名:Vercel 分配的域名 DNS 在某些区域被污染了,绑定自定义域名即可直连。

打开自动更新

如果你遇到了 Upstream Sync 执行错误,请手动 Sync Fork 一次!

当你 fork 项目之后,由于 Github 的限制,需要手动去你 fork 后的项目的 Actions 页面启用 Workflows,并启用 Upstream Sync Action,启用之后即可开启每小时定时自动更新:

自动更新

启用自动更新

手动更新代码

如果你想让手动立即更新,可以查看 Github 的文档 了解如何让 fork 的项目与上游代码同步。

你可以 star/watch 本项目或者 follow 作者来及时获得新功能更新通知。

页面操作步骤

示例网站。打开自己部署的网站,编辑右侧编辑服务器 TEMP_JSON_DATA方框内容,点击保存,左上角选择配置模板,点击生成配置文件。👉🏻参数填写查看

ios配合快捷指令复制网页内容,或者内容太多选择下载文稿后自行解决文稿后缀问题。👉🏻快捷指令安装

Android使用chrome浏览器打开网页生成配置文件(请在浏览器 设置-无障碍 缩小网页),长按内容,全选,分享到代码编辑器里,检查编辑器是否显示内容完整。👉🏻编辑器安装

注意点击保存后,尽快去生成配置文件,不然你填的内容会一直保留在网页上,别人打开网站也可以浏览到。目前想不到解决办法

how-to-use

🎬 功能演示视频

网页解析通用订阅链接 网页批量解析URI链接
video-1.mp4
video-2.mp4
谷歌浏览器页面缩小点 网页直接解析base64
video-3.mp4
video-4.mp4
本地解析通用订阅链接 本地批量解析URI链接
pc-sub.mp4
pc-uri.mp4

二、本地安装

PC安装3.10及以上的python版本,注意安装步骤里把python添加到系统环境变量(google安装步骤)

install

在终端输入下面指令安装依赖(Mac把pip改为pip3):

pip install requests paramiko scp chardet Flask PyYAML ruamel.yaml
install

下载这个 sing-box-subscribe 项目,打开终端进入当前项目路径(可以直接在文件路径输入cmd

run

把订阅链接放到 providers.json ,编辑好 config_template_groups_tun.json 模板使用下面的命令运行脚本:

python main.py

使用过程中提示python没有模块就安装对应的模块,例如下面提示就输入指令(Mac把pip改为pip3):

pip install chardet
install

windows系统建议将命令添加到批处理程序运行。

使用前先编辑 providers.json 文件以及 config_template 目录下的 .json 模板文件。

已内置懒人 config_template_groups_tun 文件,请在模板里修改筛选节点

  • 实现 Openai 分流
  • 实现 Google 分流
  • 实现 Telegram 分流
  • 实现 Twitter 分流
  • 实现 Facebook 分流
  • 实现 Amazon 分流
  • 实现 Apple 分流
  • 实现 Microsoft 分流
  • 实现 Game 分流
  • 实现 Bilibili 分流
  • 实现 Youtube 分流
  • 实现 Netflix 分流
  • 实现 Hbo 分流
  • 实现 Disney 分流
  • 实现 Prime Video 分流

providers.json文件

在这个文件中添加订阅链接,以及基础设置。

{
    "subscribes":[
        {
            "url": "订阅地址",
            "tag": "机场1", //保持默认,除非你知道这是干什么的
            "enabled": true,
            "emoji": 1, //节点名前添加国家emoji
            "prefix": "", //节点名前加自定义前缀
            "User-Agent":"clashmeta" //自定义获取订阅链接的UA,比如:"v2rayNG","Shadowrocket/1900 CFNetwork/1331.0.7 Darwin/21.4.0"
        },
        {
            "url": "订阅地址",
            "tag": "机场2",
            "enabled": false, //不启用
            "emoji": 0,
            "prefix": "❤️机场前缀 - ",
            "User-Agent":"clashmeta"
        }
    ],
    "auto_set_outbounds_dns":{
        "proxy": "",
        "direct": ""
    },
    "save_config_path": "./config.json",
    "auto_backup": false,
    "exclude_protocol": "ssr" //排除订阅链接里ssr协议节点
    "config_template": "", //自定义正确的网页json配置模板链接
    "Only-nodes": false //开启时,只输出节点内容(不是完整sing-box配置)
}
  • url:必须。

支持机场普通的v2订阅链接(内容为base64编码

支持机场clash订阅链接

支持机场sing-box订阅链接

本地文件路径(内容为标准URI链接或者clash字段

  本地文件以 `.txt` 后缀,需要在文件中每行一个添加单节点分享链接,比如 `ss://` 开头(非订阅链接)。

  本地文件以 `.yaml` 后缀,填写正确的 clash proxies 字段。
  
  本地文件需要保存到相同盘符,本地路径格式: `/Desktop/sing-box-subscribe/xx.txt` 或者是与 `main.py` 相同文件夹里相对路径格式: `./xx.txt`。
  • tag:必须。

config 模板里填上此处写的tag才能添加此订阅。此处的 "机场1" 对应 config 模板中的 "{机场1}" 具体使用方法可以查看下方的 config 模板部分。

tag截图参考
download
  • enabled:非必需。将其设置为 false 时,此订阅会被忽略

  • emoji:非必需。将其设置为 false 或 0 时,节点名称不会添加国旗emoji

  • prefix:非必需。设置自定义前缀,前缀会添加到对应节点名称前。如果没有设置,则不添加前缀。

  • User-Agent:非必需。可以自定义UA,比如设置UA为"clash.meta",或者"sing-box"

prefix效果参考

Snipaste_2023-05-02_12-53-27

  • auto_set_outbounds_dns:非必需。

包含 proxydirect 设置项。

proxydirect 应该设置为 config 模板文件中存在的 dns servertag

设置此项后,脚本会自动适配 路由规则 到 dns 规则。

将路由规则中 direct 出站 的 dns server 设置为选项中指定的 direct 出站。

将路由规则中需要代理的 出站 设置为对应的 proxy 出站,脚本会自动创建对应出站的 dns server,以 proxy 设置项指定的 dns server 为模板。

  • save_config_path:必需。设置生成的配置文件路径。

  • auto_backup:非必需。

设置为 true 时,脚本会将当前使用的sing-box配置文件更名为 原文件名称.当前时间.bak 进行备份,避免生成错误的配置文件后无法挽回。

  • exclude_protocol:非必需。

设置不解析的协议,多个使用英文逗号分隔,比如ssr,vmess。

使用此设置中的协议的分享链接会被忽略。

sing-box release中的程序没有支持ssr(需要自己添加参数构建),所以此设置可能有用。

  • config_template:非必需。输入一个正确的网页json配置模板链接,以此模板生成sing-box配置。

  • Only-nodes:非必需。

将其设置为 true 或 1 时,只输出订阅链接 sing-box 格式的节点信息

config模板文件

脚本会在 config_template 目录下查找 json 模板文件,脚本运行时可以选择使用的模板文件。

比如目录下存在 tun.jsonsocks.json 两个模板文件。

Snipaste_2023-03-24_22-16-49

脚本不会检查模板文件的正确性,模板文件不正确会出现错误并无法运行脚本。目录下自带有模板,根据需要修改。

模板文件基本等同于 sing-box config,不过有一些新的参数,比如 {all}{机场tag}filter,所有参数仅在 clash_mode 的出站方式下才会生效,出站类型为 urltestselector

{
  "tag":"proxy",
  "type":"selector",
  "outbounds":[
    "auto",
    "{all}"//所有订阅所有节点添加到此标记所在位置
  ],
  "filter":[
    //此条过滤将会删除 机场1 中包含 ˣ² 的节点
    {"action":"exclude","keywords":["ˣ²"],"for":["机场1"]}
  ]
},
{
  "tag":"netflix",
  "type":"selector",
  "outbounds":[
    "{机场1}",//订阅tag为 机场1 的节点将添加到此标记所在位置
    "{机场2}"//订阅tag为 机场2 的节点将添加到此标记所在位置
  ],
  "filter":[
    //如果机场1,机场2有节点 sg、新加坡、tw、台湾,他们共同组成 netflix 组
    {"action":"include","keywords":["sg|新加坡|tw|台湾"]},
    //for里面设置为机场1,代表此条规则只对机场1起作用
    {"action":"exclude","keywords":["ˣ²"],"for":["机场1"]}
    //执行完第二个规则后 netflix 组将机场1 中包含 ˣ² 的节点删掉
  ]
}
  • {all}:表示所有订阅中的所有节点。脚本会将所有节点添加到有此标识的 outbounds 中。

  • {机场tag}:在 providers.json 中设置的机场 tag 可以用于此处,代表此订阅中的所有节点。

  • filter:非必需。节点过滤,为一个数组对象,可以添加任意条规则,格式为:

"filter":[
    {"action":"include","keywords":["保留关键字1|保留关键字2"]},
    {"action":"exclude","keywords":["排除关键字1|排除关键字2"],"for":["机场1tag","机场2tag"]}
  ]
  • 关键字大小写敏感

  • include:后面添加要保留的关键字,用 '|' 连接多个关键字,名称中包含这些关键字的节点都将被保留,其他节点会被删除。

  • exclude:后面添加要排除的关键字,用 '|' 连接多个关键字,名称中包含这些关键字的节点都将被删除,其他节点会被保留。

  • for:非必需。设置机场 tag,可以多个,表示此规则只对指定的机场起作用,其他机场会忽略这个规则。

多个规则会按顺序执行过滤。

Windows sing-box 使用方法

  1. 下载Windows客户端程序sing-box-windows-amd64.zip
  2. 新建一个 .bat 批处理文件,内容为 start /min sing-box.exe run
  3. 参考客户端配置示例,按需修改后将文件名改为 config.json,与 sing-box.exe,批处理文件放在同一文件夹里。
  4. 右键点击 sing-box.exe 选择属性,选择兼容性,选择以管理员身份运行此程序,确定。
  5. 运行批处理文件,在弹出的用户账户控制对话框中,选择是。

隐藏Windows运行sing-box弹出的cmd窗口

使用WinSW把sing-box.exe设置成Windows服务,WinSW教程

XML配置文件修改

<service>
  <id>sing-box</id>
  <name>sing-box</name>
  <description>sing-box Service</description>
  <executable>./sing-box.exe</executable>
  <log mode="reset"></log>
  <arguments>run</arguments>
</service>
Windows sing-box 文件夹内容
download

在非图形化客户端,不使用tun的话的操作

比如在windows上用内核跑 sing-box,在入站inbounds里删掉tun字段:

"inbounds": [
    {
      "type": "mixed",
      "listen": "127.0.0.1",
      "listen_port": 2080, //此端口要和windows代理端口一致
      "sniff": true,
      "set_system_proxy": true,
      "sniff_override_destination": false,
      "domain_strategy": "ipv4_only"
    }
  ]
download
效果参考

具体效果根据个人的出站及规则设置决定。

download download download download

Star 历史

Star History Chart

感谢

部分协议解析参考了convert2clash

部分clash2v2ray参考了clash2base64

同步代码参考了ChatGPT-Next-Web

感谢@SayRad的越南翻译

Releases

No releases published

Packages

No packages published

Languages

  • Python 88.4%
  • HTML 11.6%