mirror of
https://github.com/bestnite/sub2clash.git
synced 2025-07-05 04:12:34 +08:00
Compare commits
3 Commits
v0.1.0-alp
...
v0.1.0-alp
Author | SHA1 | Date | |
---|---|---|---|
b73a02bdbf | |||
25e47453cb | |||
3330412243 |
2
.github/workflows/docker.yml
vendored
2
.github/workflows/docker.yml
vendored
@ -23,6 +23,7 @@ jobs:
|
|||||||
type=semver,pattern={{version}}
|
type=semver,pattern={{version}}
|
||||||
type=semver,pattern={{major}}.{{minor}}
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
type=semver,pattern={{major}}
|
type=semver,pattern={{major}}
|
||||||
|
type=match,pattern=(alpha|beta|rc),group=1
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v3
|
uses: docker/setup-qemu-action@v3
|
||||||
@ -51,3 +52,4 @@ jobs:
|
|||||||
push: true
|
push: true
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -5,3 +5,4 @@ logs
|
|||||||
data
|
data
|
||||||
.env
|
.env
|
||||||
.vscode/settings.json
|
.vscode/settings.json
|
||||||
|
test
|
42
README.md
42
README.md
@ -1,29 +1,31 @@
|
|||||||
# sub2clash
|
# sub2clash
|
||||||
|
|
||||||
|
> Sing-box 用户?看看另一个项目 [sub2sing-box](https://github.com/nitezs/sub2sing-box)
|
||||||
|
|
||||||
将订阅链接转换为 Clash、Clash.Meta 配置
|
将订阅链接转换为 Clash、Clash.Meta 配置
|
||||||
[预览](https://www.nite07.com/sub)
|
[预览](https://www.nite07.com/sub)
|
||||||
|
|
||||||
## 特性
|
## 特性
|
||||||
|
|
||||||
- 开箱即用的规则、策略组配置
|
- 开箱即用的规则、策略组配置
|
||||||
- 自动根据节点名称按国家划分策略组
|
- 自动根据节点名称按国家划分策略组
|
||||||
- 支持多订阅合并
|
- 多订阅合并
|
||||||
- 支持添加自定义 Rule Provider、Rule
|
- 自定义 Rule Provider、Rule
|
||||||
- 支持多种协议
|
- 支持多种协议
|
||||||
- Shadowsocks
|
- Shadowsocks
|
||||||
- ShadowsocksR
|
- ShadowsocksR
|
||||||
- Vmess
|
- Vmess
|
||||||
- Vless (Clash.Meta)
|
- Vless (Clash.Meta)
|
||||||
- Trojan
|
- Trojan
|
||||||
- Hysteria (Clash.Meta)
|
- Hysteria (Clash.Meta)
|
||||||
- Hysteria2 (Clash.Meta)
|
- Hysteria2 (Clash.Meta)
|
||||||
|
|
||||||
## 使用
|
## 使用
|
||||||
|
|
||||||
### 运行
|
### 部署
|
||||||
|
|
||||||
- [docker compose](./docker-compose.yml)
|
- [docker compose](./docker-compose.yml)
|
||||||
- 运行[二进制文件](https://github.com/nitezs/sub2clash/releases/latest)
|
- 运行[二进制文件](https://github.com/nitezs/sub2clash/releases/latest)
|
||||||
|
|
||||||
### 配置
|
### 配置
|
||||||
|
|
||||||
@ -49,11 +51,11 @@
|
|||||||
可以通过变量自定义模板中的策略组代理节点
|
可以通过变量自定义模板中的策略组代理节点
|
||||||
具体参考下方默认模板
|
具体参考下方默认模板
|
||||||
|
|
||||||
- `<all>` 为添加所有节点
|
- `<all>` 为添加所有节点
|
||||||
- `<countries>` 为添加所有国家策略组
|
- `<countries>` 为添加所有国家策略组
|
||||||
- `<地区二位字母代码>` 为添加指定地区所有节点,例如 `<hk>` 将添加所有香港节点
|
- `<地区二位字母代码>` 为添加指定地区所有节点,例如 `<hk>` 将添加所有香港节点
|
||||||
|
|
||||||
#### 默认模板
|
#### 默认模板
|
||||||
|
|
||||||
- [Clash](./templates/template_clash.yaml)
|
- [Clash](./templates/template_clash.yaml)
|
||||||
- [Clash.Meta](./templates/template_meta.yaml)
|
- [Clash.Meta](./templates/template_meta.yaml)
|
||||||
|
@ -18,7 +18,6 @@ var staticFiles embed.FS
|
|||||||
func SetRoute(r *gin.Engine) {
|
func SetRoute(r *gin.Engine) {
|
||||||
r.Use(middleware.ZapLogger())
|
r.Use(middleware.ZapLogger())
|
||||||
|
|
||||||
// 使用内嵌的模板文件
|
|
||||||
tpl, err := template.ParseFS(staticFiles, "static/*")
|
tpl, err := template.ParseFS(staticFiles, "static/*")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error parsing templates: %v", err)
|
log.Fatalf("Error parsing templates: %v", err)
|
||||||
@ -33,9 +32,6 @@ func SetRoute(r *gin.Engine) {
|
|||||||
r.GET(
|
r.GET(
|
||||||
"/", func(c *gin.Context) {
|
"/", func(c *gin.Context) {
|
||||||
version := constant.Version
|
version := constant.Version
|
||||||
if len(constant.Version) > 7 {
|
|
||||||
version = constant.Version[:7]
|
|
||||||
}
|
|
||||||
c.HTML(
|
c.HTML(
|
||||||
200, "index.html", gin.H{
|
200, "index.html", gin.H{
|
||||||
"Version": version,
|
"Version": version,
|
||||||
|
@ -110,6 +110,7 @@ func ParseVless(proxy string) (model.Proxy, error) {
|
|||||||
|
|
||||||
if security == "reality" {
|
if security == "reality" {
|
||||||
result.TLS = true
|
result.TLS = true
|
||||||
|
result.Servername = sni
|
||||||
result.RealityOpts = model.RealityOptions{
|
result.RealityOpts = model.RealityOptions{
|
||||||
PublicKey: pbk,
|
PublicKey: pbk,
|
||||||
ShortID: sid,
|
ShortID: sid,
|
||||||
@ -133,7 +134,9 @@ func ParseVless(proxy string) (model.Proxy, error) {
|
|||||||
|
|
||||||
if _type == "grpc" {
|
if _type == "grpc" {
|
||||||
result.Network = "grpc"
|
result.Network = "grpc"
|
||||||
result.Servername = serviceName
|
result.GrpcOpts = model.GrpcOptions{
|
||||||
|
GrpcServiceName: serviceName,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if _type == "http" {
|
if _type == "http" {
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
package test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestParser(t *testing.T) {
|
|
||||||
// res, err := parser.ParseTrojan("trojan://Abse64hhjewrs@test.com:8443?type=ws&path=%2Fx&host=test.com&security=tls&fp=&alpn=http%2F1.1&sni=test.com#test")
|
|
||||||
// if err != nil {
|
|
||||||
// t.Log(err.Error())
|
|
||||||
// t.Fail()
|
|
||||||
// }
|
|
||||||
// bytes, err := yaml.Marshal(res)
|
|
||||||
// if err != nil {
|
|
||||||
// t.Log(err.Error())
|
|
||||||
// t.Fail()
|
|
||||||
// }
|
|
||||||
// t.Log(string(bytes))
|
|
||||||
t.Log(strings.SplitN("123456", "/?", 2))
|
|
||||||
|
|
||||||
}
|
|
Reference in New Issue
Block a user