Selaa lähdekoodia

更新代理分组脚本

jack 10 kuukautta sitten
vanhempi
sitoutus
c0181a801c

+ 550 - 0
manual/clash/config.yaml

@@ -10,6 +10,30 @@ log-level: info
 mixed-port: 7890
 mode: rule
 proxies:
+- alterId: 0
+  cipher: auto
+  name: DE-Detour 01 AEAD
+  port: 15801
+  server: de-detour-01.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: DE-Detour 02 AEAD
+  port: 15802
+  server: de-detour-02.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: DE-Detour-03 AEAD
+  port: 15803
+  server: de-detour-03.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
 - alterId: 0
   cipher: auto
   name: HKT-Detour 01 AEAD
@@ -186,6 +210,70 @@ proxies:
   type: vmess
   uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
   ws-path: /
+- alterId: 0
+  cipher: auto
+  name: LA-Detour 02 AEAD
+  port: 15502
+  server: la-detour-02.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: LA-Detour 03 AEAD
+  port: 15503
+  server: la-detour-03.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: LA-Detour 05 AEAD
+  port: 15505
+  server: la-detour-05.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: LA-Detour 07 AEAD
+  port: 15507
+  server: la-detour-07.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: LA-Detour 09 AEAD
+  port: 15509
+  server: la-detour-09.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: LA-Detour 10 AEAD
+  port: 15510
+  server: la-detour-10.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: Oz-Detour 01 AEAD
+  port: 15811
+  server: oz-detour-01.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: Oz-Detour 02 AEAD
+  port: 15812
+  server: oz-detour-02.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
 - alterId: 0
   cipher: auto
   name: SG-Detour 01 AEAD
@@ -346,6 +434,119 @@ proxies:
   type: vmess
   uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
   ws-path: /
+- alterId: 0
+  cipher: auto
+  name: UK Detour-01 AEAD
+  port: 15711
+  server: uk-detour-01.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: UK Detour-02 AEAD
+  port: 15712
+  server: uk-detour-02.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: UK Detour-03 AEAD
+  port: 15713
+  server: uk-detour-03.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: UK Detour-04 AEAD
+  port: 15714
+  server: uk-detour-04.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: UK Detour-05 AEAD
+  port: 15715
+  server: uk-detour-05.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- alterId: 0
+  cipher: auto
+  name: UK Detour-06 AEAD
+  port: 15716
+  server: uk-detour-06.grabgo.pro
+  type: vmess
+  uuid: 22a14509-a8ab-46cb-bb26-d47d4d18e1d6
+  ws-path: /
+- name: 🇦🇶 南极-广东专线 WARP
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32041
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇦🇷 阿根廷 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12066
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇦🇷 阿根廷-广东专线 DonWeb
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32015
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇦🇺 澳大利亚 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12068
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇦🇺 澳大利亚-广东专线 GCore
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32023
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇦🇺 澳大利亚-广东专线 VUAU
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32012
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇧🇷 巴西-广东专线 GCore 1
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32016
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇧🇷 巴西-广东专线 GCore 2
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32025
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇨🇦 加拿大-广东专线 BGP
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32039
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
 - name: 🇨🇳 台湾 01
   password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
   port: 12011
@@ -362,6 +563,51 @@ proxies:
   sni: cdn.alibaba.com
   type: trojan
   udp: true
+- name: 🇩🇪 德国 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12070
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇩🇪 德国-广东专线 BGP
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32011
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇫🇷 法国 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12065
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇫🇷 法国-广东专线 BGP
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32009
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇬🇧 英国 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12069
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇬🇧 英国-广东专线 BGP
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32010
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
 - name: 🇭🇰 香港 01
   password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
   port: 12001
@@ -466,6 +712,44 @@ proxies:
   sni: cert.bitbyte.one
   type: trojan
   udp: true
+- name: 🇮🇩 印尼 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12061
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇮🇳 印度 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12072
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇮🇳 印度-广东专线 DOIN
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32017
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇮🇳 印度-广东专线 GCore
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32024
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇮🇹 意大利 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12062
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
 - name: 🇯🇵 日本 01
   password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
   port: 12031
@@ -527,6 +811,29 @@ proxies:
   sni: cert.bitbyte.one
   type: trojan
   udp: true
+- name: 🇰🇷 韩国 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12041
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇰🇷 韩国-广东专线 VUKR
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32005
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇲🇴 澳门 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12007
+  server: cn1.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
 - name: 🇲🇾 马来西亚 01
   password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
   port: 12067
@@ -542,6 +849,81 @@ proxies:
   sni: cert.bitbyte.one
   type: trojan
   udp: true
+- name: 🇳🇬 尼日利亚 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12073
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇳🇬 尼日利亚-广东专线 Melbicom
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32034
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇳🇱 荷兰 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12074
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇵🇭 菲律宾-广东专线 Comfac
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32030
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇵🇭 菲律宾-广东专线 Zenlayer
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32013
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇵🇰 巴基斯坦 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12077
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇷🇺 俄罗斯 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12075
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇷🇺 俄罗斯-广东专线 PQ
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32008
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇸🇦 沙特-广东专线 STC
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32035
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇸🇪 瑞典 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12071
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
 - name: 🇸🇬 新加坡 01
   password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
   port: 12021
@@ -589,6 +971,43 @@ proxies:
   sni: cert.bitbyte.one
   type: trojan
   udp: true
+- name: 🇹🇭 泰国 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12076
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇹🇭 泰国-广东专线 Bangmod
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32043
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇹🇷 土耳其 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12064
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇹🇷 土耳其-广东专线 GCore
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32026
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇹🇷 土耳其-广东专线 Kapteyan
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32014
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
 - name: 🇹🇼 台湾-广东专线 NeaRoute
   password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
   port: 32003
@@ -603,9 +1022,79 @@ proxies:
   sni: cert.bitbyte.one
   type: trojan
   udp: true
+- name: 🇺🇦 乌克兰-广东专线 Vik
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32019
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇺🇸 美国 01
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12051
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇺🇸 美国 02
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12052
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇺🇸 美国 03
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12053
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇺🇸 美国 04
+  password: d058a1cb-5dbd-4664-9d8b-ae26bc699ed4
+  port: 12054
+  server: cn2.cdn.xfltd-cdn.top
+  skip-cert-verify: true
+  sni: cdn.alibaba.com
+  type: trojan
+  udp: true
+- name: 🇺🇸 美国-广东专线 BGP 1
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32001
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇺🇸 美国-广东专线 BGP 2
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32028
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇺🇸 美国-广东专线 DAOport
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32031
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
+- name: 🇺🇸 美国-广东专线 GCore
+  password: f2e8e50c-ffb8-48a1-a460-2e72dfaf7845
+  port: 32021
+  server: lbso.bnnodeservice.com
+  sni: cert.bitbyte.one
+  type: trojan
+  udp: true
 proxy-groups:
 - name: GLOBAL
   proxies:
+  - DE-Detour 01 AEAD
+  - DE-Detour 02 AEAD
+  - DE-Detour-03 AEAD
   - HKT-Detour 01 AEAD
   - HKT-Detour 02 AEAD
   - HKT-Detour 05 AEAD
@@ -628,6 +1117,14 @@ proxy-groups:
   - JP-Detour 04 AEAD
   - JP-Detour 05 AEAD
   - JP-Detour 06 AEAD
+  - LA-Detour 02 AEAD
+  - LA-Detour 03 AEAD
+  - LA-Detour 05 AEAD
+  - LA-Detour 07 AEAD
+  - LA-Detour 09 AEAD
+  - LA-Detour 10 AEAD
+  - Oz-Detour 01 AEAD
+  - Oz-Detour 02 AEAD
   - SG-Detour 01 AEAD
   - SG-Detour 02 AEAD
   - SG-Detour 03 AEAD
@@ -648,8 +1145,29 @@ proxy-groups:
   - TW-Detour 20 AEAD
   - TW-Detour 22 AEAD
   - TW-Detour 23 AEAD
+  - UK Detour-01 AEAD
+  - UK Detour-02 AEAD
+  - UK Detour-03 AEAD
+  - UK Detour-04 AEAD
+  - UK Detour-05 AEAD
+  - UK Detour-06 AEAD
+  - 🇦🇶 南极-广东专线 WARP
+  - 🇦🇷 阿根廷 01
+  - 🇦🇷 阿根廷-广东专线 DonWeb
+  - 🇦🇺 澳大利亚 01
+  - 🇦🇺 澳大利亚-广东专线 GCore
+  - 🇦🇺 澳大利亚-广东专线 VUAU
+  - 🇧🇷 巴西-广东专线 GCore 1
+  - 🇧🇷 巴西-广东专线 GCore 2
+  - 🇨🇦 加拿大-广东专线 BGP
   - 🇨🇳 台湾 01
   - 🇨🇳 台湾 02
+  - 🇩🇪 德国 01
+  - 🇩🇪 德国-广东专线 BGP
+  - 🇫🇷 法国 01
+  - 🇫🇷 法国-广东专线 BGP
+  - 🇬🇧 英国 01
+  - 🇬🇧 英国-广东专线 BGP
   - 🇭🇰 香港 01
   - 🇭🇰 香港 02
   - 🇭🇰 香港 03
@@ -664,6 +1182,11 @@ proxy-groups:
   - 🇭🇰 香港-广东专线 HKBN
   - 🇭🇰 香港-广东专线 HKT
   - 🇭🇰 香港-广东专线 NeaRoute
+  - 🇮🇩 印尼 01
+  - 🇮🇳 印度 01
+  - 🇮🇳 印度-广东专线 DOIN
+  - 🇮🇳 印度-广东专线 GCore
+  - 🇮🇹 意大利 01
   - 🇯🇵 日本 01
   - 🇯🇵 日本 02
   - 🇯🇵 日本 03
@@ -672,15 +1195,42 @@ proxy-groups:
   - 🇯🇵 日本-广东专线 Akari
   - 🇯🇵 日本-广东专线 BGP
   - 🇯🇵 日本-广东专线 GCore
+  - 🇰🇷 韩国 01
+  - 🇰🇷 韩国-广东专线 VUKR
+  - 🇲🇴 澳门 01
   - 🇲🇾 马来西亚 01
   - 🇲🇾 马来西亚-广东专线 Shin
+  - 🇳🇬 尼日利亚 01
+  - 🇳🇬 尼日利亚-广东专线 Melbicom
+  - 🇳🇱 荷兰 01
+  - 🇵🇭 菲律宾-广东专线 Comfac
+  - 🇵🇭 菲律宾-广东专线 Zenlayer
+  - 🇵🇰 巴基斯坦 01
+  - 🇷🇺 俄罗斯 01
+  - 🇷🇺 俄罗斯-广东专线 PQ
+  - 🇸🇦 沙特-广东专线 STC
+  - 🇸🇪 瑞典 01
   - 🇸🇬 新加坡 01
   - 🇸🇬 新加坡 02
   - 🇸🇬 新加坡 03
   - 🇸🇬 新加坡 04
   - 🇸🇬 新加坡 05
   - 🇸🇬 新加坡-广东专线 BGP
+  - 🇹🇭 泰国 01
+  - 🇹🇭 泰国-广东专线 Bangmod
+  - 🇹🇷 土耳其 01
+  - 🇹🇷 土耳其-广东专线 GCore
+  - 🇹🇷 土耳其-广东专线 Kapteyan
   - 🇹🇼 台湾-广东专线 NeaRoute
   - 🇹🇼 台湾-广东专线 STUIX
+  - 🇺🇦 乌克兰-广东专线 Vik
+  - 🇺🇸 美国 01
+  - 🇺🇸 美国 02
+  - 🇺🇸 美国 03
+  - 🇺🇸 美国 04
+  - 🇺🇸 美国-广东专线 BGP 1
+  - 🇺🇸 美国-广东专线 BGP 2
+  - 🇺🇸 美国-广东专线 DAOport
+  - 🇺🇸 美国-广东专线 GCore
   type: select
 secret: ''

+ 16 - 16
manual/clash/merge2config.py

@@ -6,15 +6,15 @@ import yaml
 file_name = 'merge.yaml'
 
 # 过滤代理
-filter_proxy_group = ['HK',
-                      '香港',
-                      'TW',
-                      '台湾',
-                      'JP',
-                      '日本',
-                      '马来西亚',
-                      'SG',
-                      '新加坡']
+# filter_proxy_group = ['HK',
+#                       '香港',
+#                       'TW',
+#                       '台湾',
+#                       'JP',
+#                       '日本',
+#                       '马来西亚',
+#                       'SG',
+#                       '新加坡']
 
 # 创建 config.yaml 模版, 读出来的 proxies 和 proxy-groups 存到对应的地方, rules 不要了
 config_template = {
@@ -53,13 +53,13 @@ def process_yaml_file():
         if '套餐到期' in proxy['name']:
             continue
 
-        check_in_group = False
-        for keyword in filter_proxy_group:
-            if keyword in proxy['name']:
-                check_in_group = True
-
-        if not check_in_group:
-            continue
+        # check_in_group = False
+        # for keyword in filter_proxy_group:
+        #     if keyword in proxy['name']:
+        #         check_in_group = True
+        #
+        # if not check_in_group:
+        #     continue
         print('{}: {}'.format(file_name, proxy['name']))
         temp_data.append(proxy)
 

+ 0 - 168
manual/clash/set_global_switch_proxy_random.py

@@ -1,168 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-切换到随机代理
-'''
-import random
-
-import httpx
-import time
-import logging
-import subprocess
-from typing import Optional, List
-
-logging.basicConfig(level=logging.INFO)
-
-BASE_URL = "http://192.168.31.194"
-
-PORT_LIST = [
-    ["58001", "59001"],
-    ["58002", "59002"],
-    ["58003", "59003"],
-    ["58004", "59004"],
-    ["58005", "59005"],
-    ["58006", "59006"],
-    ["58007", "59007"],
-    ["58008", "59008"],
-    ["58009", "59009"],
-    ["58010", "59010"],
-]
-
-
-class ClashProxyManager:
-    def __init__(self, base_url, base_port):
-        self.key_group = 0
-        self.base_url = base_url
-        self.base_port = base_port
-        self.all_proxies = []
-
-    def get_all_proxies(self, clash_tool_url: str) -> List[str]:
-        url = f"{clash_tool_url}/api/proxies"
-        try:
-            response = httpx.get(url)
-            response.raise_for_status()
-            proxies = response.json()
-            logging.info("Available proxies:")
-            # 输出读取的所有代理信息
-            # for proxy_name, proxy_info in proxies['proxies'].items():
-            #     logging.info(f"Name: {proxy_name}, Type: {proxy_info.get('type', 'Unknown')}")
-            proxy_list = list(proxies['proxies'].keys())
-            filtered_list = [item for item in proxy_list if item not in {'REJECT', 'GLOBAL', 'DIRECT'}]
-            return filtered_list
-        except Exception as e:
-            logging.error(f"Failed to get proxies: {e}")
-            return []
-
-    def switch_proxy(self, proxy_name: str, url_and_port: str) -> None:
-        logging.info("switch proxy")
-        url = f"{url_and_port}/api/proxies/GLOBAL"
-        data = {"name": proxy_name}
-        try:
-            response = httpx.put(url, json=data)
-            if response.status_code == 204:
-                logging.info(f"Switched to proxy: {proxy_name}")
-            else:
-                logging.error(f"Failed to switch proxy: {response.status_code} - {proxy_name}")
-        except Exception as e:
-            logging.error(f"Failed to switch proxy: {e}")
-
-    def update_configs(self):
-        for base_port in self.base_port:
-            url_and_port = self.base_url + ":" + base_port[0]
-            key = "/api/configs"
-            url = url_and_port + key
-
-            headers = {
-                "accept": "application/json, text/plain, */*",
-                "accept-encoding": "gzip, deflate, br, zstd",
-                "accept-language": "zh-CN,zh",
-                "connection": "keep-alive",
-                "content-type": "application/json",
-                "origin": url_and_port,
-                "referer": url_and_port,
-                "sec-ch-ua": '"Not A(Brand";v="8", "Chromium";v="132", "Brave";v="132"',
-                "sec-ch-ua-mobile": "?0",
-                "sec-ch-ua-platform": '"macOS"',
-                "sec-fetch-dest": "empty",
-                "sec-fetch-mode": "cors",
-                "sec-fetch-site": "same-origin",
-                "sec-gpc": "1",
-                "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36",
-            }
-
-            # 请求体数据
-            data = {"mode": "Global"}  # 替换为实际的请求数据
-
-            # 使用 httpx 发送 PATCH 请求
-            try:
-                with httpx.Client() as client:
-                    response = client.patch(url, headers=headers, json=data)
-                    if response.status_code == 204:
-                        print(f"{url} OK")
-                    else:
-                        print("响应内容:", response.text)
-            except httpx.RequestError as exc:
-                print(f"请求失败: {exc}")
-
-    def check_proxy(self, proxy_url):
-        # proxy_url: 代理地址, 没有密码
-        # 测试目标地址:
-        command = ["curl", "-x", proxy_url, "ip.sb"]
-
-        # 执行命令并获取输出
-        try:
-            result = subprocess.run(command, capture_output=True, text=True, check=True)
-            # 打印命令的标准输出
-            print("Output:", result.stdout)
-            return True
-        except subprocess.CalledProcessError as e:
-            # 如果命令执行失败,打印错误信息
-            print("Error:", e.stderr)
-            return False
-
-    def main(self) -> None:
-        # 设置全局代理
-        self.update_configs()
-
-        # 读取所有代理
-        if not self.all_proxies:
-            for port_list in self.base_port:
-                base_url = self.base_url + ":" + port_list[0]
-                clash_tool_url = f"{base_url}"
-                proxies = self.get_all_proxies(clash_tool_url)
-                if proxies:
-                    self.all_proxies = proxies
-                    break
-
-        if not self.all_proxies:
-            logging.error("Failed to get all proxies")
-            return
-
-        # 遍历所有的线路api, 切换不重复代理
-        # 切换后, 检测代理, 如果检测返回失败, 再次切换
-        used_proxy = []
-        for base_port in self.base_port:
-            url_and_port = self.base_url + ":" + base_port[0]
-            proxy_url = self.base_url + ":" + base_port[1]
-            while True:
-                # 选一个代理
-                choose_proxy = random.choice(self.all_proxies)
-                # 如果已经选过就继续下一个
-                if choose_proxy in used_proxy:
-                    continue
-
-                # 切换代理
-                self.switch_proxy(choose_proxy, url_and_port)
-
-                # 切换后检测代理
-                if self.check_proxy(proxy_url):
-                    print(f"代理 {choose_proxy} 切换成功,检测通过!")
-                    used_proxy.append(choose_proxy)  # 标记为已使用
-                    break  # 成功后退出当前代理的重试循环
-                else:
-                    print(f"{url_and_port} 切换 {choose_proxy} 检测失败")
-                    time.sleep(1)
-
-
-if __name__ == "__main__":
-    manager = ClashProxyManager(BASE_URL, PORT_LIST)
-    manager.main()

+ 0 - 178
manual/clash/switch_proxy_group.py

@@ -1,178 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-切换到指定代理组
-'''
-import httpx
-import time
-import logging
-import subprocess
-from typing import Optional, List
-
-logging.basicConfig(level=logging.INFO)
-
-BASE_URL = "http://192.168.31.194"
-
-PORT_LIST = [
-    ["58001", "59001"],
-    ["58002", "59002"],
-    ["58003", "59003"],
-    ["58004", "59004"],
-    ["58005", "59005"],
-    ["58006", "59006"],
-    ["58007", "59007"],
-    ["58008", "59008"],
-    ["58009", "59009"],
-    ["58010", "59010"],
-]
-
-
-class ClashProxyManager:
-    def __init__(self, base_url, base_port):
-        self.key_group = 0
-        self.base_url = base_url
-        self.base_port = base_port
-        self.proxy_keyword = [
-            ['sg', 'SG', '新加坡', '马来西亚'],
-            ['jp', '日本'],
-        ]
-        self.all_proxies = []
-        self.selected_proxies = []
-
-    def get_all_proxies(self, clash_tool_url: str) -> List[str]:
-        url = f"{clash_tool_url}/api/proxies"
-        try:
-            response = httpx.get(url)
-            response.raise_for_status()
-            proxies = response.json()
-            logging.info("Available proxies:")
-            # 输出读取的所有代理信息
-            # for proxy_name, proxy_info in proxies['proxies'].items():
-            #     logging.info(f"Name: {proxy_name}, Type: {proxy_info.get('type', 'Unknown')}")
-            proxy_list = list(proxies['proxies'].keys())
-            filtered_list = [item for item in proxy_list if item not in {'REJECT', 'GLOBAL', 'DIRECT'}]
-            return filtered_list
-        except Exception as e:
-            logging.error(f"Failed to get proxies: {e}")
-            return []
-
-    def filter_proxy(self):
-        for keyword in self.proxy_keyword[self.key_group]:
-            for item in self.all_proxies:
-                if keyword.lower() in item.lower():
-                    self.selected_proxies.append(item)
-
-    def switch_proxy(self, proxy_name: str, url_and_port: str) -> None:
-        logging.info("switch proxy")
-        url = f"{url_and_port}/api/proxies/GLOBAL"
-        data = {"name": proxy_name}
-        try:
-            response = httpx.put(url, json=data)
-            if response.status_code == 204:
-                logging.info(f"Switched to proxy: {proxy_name}")
-            else:
-                logging.error(f"Failed to switch proxy: {response.status_code} - {proxy_name}")
-        except Exception as e:
-            logging.error(f"Failed to switch proxy: {e}")
-
-    def update_configs(self):
-        for base_port in self.base_port:
-            url_and_port = self.base_url + ":" + base_port[0]
-            key = "/api/configs"
-            url = url_and_port + key
-
-            headers = {
-                "accept": "application/json, text/plain, */*",
-                "accept-encoding": "gzip, deflate, br, zstd",
-                "accept-language": "zh-CN,zh",
-                "connection": "keep-alive",
-                "content-type": "application/json",
-                "origin": url_and_port,
-                "referer": url_and_port,
-                "sec-ch-ua": '"Not A(Brand";v="8", "Chromium";v="132", "Brave";v="132"',
-                "sec-ch-ua-mobile": "?0",
-                "sec-ch-ua-platform": '"macOS"',
-                "sec-fetch-dest": "empty",
-                "sec-fetch-mode": "cors",
-                "sec-fetch-site": "same-origin",
-                "sec-gpc": "1",
-                "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36",
-            }
-
-            # 请求体数据
-            data = {"mode": "Global"}  # 替换为实际的请求数据
-
-            # 使用 httpx 发送 PATCH 请求
-            try:
-                with httpx.Client() as client:
-                    response = client.patch(url, headers=headers, json=data)
-                    if response.status_code == 204:
-                        print(f"{url} OK")
-                    else:
-                        print("响应内容:", response.text)
-            except httpx.RequestError as exc:
-                print(f"请求失败: {exc}")
-
-    def check_proxy(self, proxy_url):
-        # proxy_url: 代理地址, 没有密码
-        # 测试目标地址:
-        command = ["curl", "-x", proxy_url, "ip.sb"]
-
-        # 执行命令并获取输出
-        try:
-            result = subprocess.run(command, capture_output=True, text=True, check=True)
-            # 打印命令的标准输出
-            print("Output:", result.stdout)
-            return True
-        except subprocess.CalledProcessError as e:
-            # 如果命令执行失败,打印错误信息
-            print("Error:", e.stderr)
-            return False
-
-    def main(self) -> None:
-        # 设置全局代理
-        self.update_configs()
-
-        # 读取所有代理
-        if not self.all_proxies:
-            for port_list in self.base_port:
-                base_url = self.base_url + ":" + port_list[0]
-                clash_tool_url = f"{base_url}"
-                proxies = self.get_all_proxies(clash_tool_url)
-                if proxies:
-                    self.all_proxies = proxies
-                    break
-
-        if not self.all_proxies:
-            logging.error("Failed to get all proxies")
-            return
-
-        # 通过关键词过滤出需要的代理
-        self.filter_proxy()
-        if not self.selected_proxies:
-            logging.error("Failed to filter proxies")
-            return
-
-        # 遍历所有的线路api, 切换不重复代理
-        # 切换后, 检测代理, 如果检测返回失败, 再次切换
-        used_proxy = []
-        for base_port in self.base_port:
-            url_and_port = self.base_url + ":" + base_port[0]
-            proxy_url = self.base_url + ":" + base_port[1]
-            for select_proxy in self.selected_proxies:
-                if select_proxy in used_proxy:
-                    continue
-
-                # 尝试切换代理并检测
-                self.switch_proxy(select_proxy, url_and_port)
-                if self.check_proxy(proxy_url):
-                    print(f"代理 {select_proxy} 切换成功,检测通过!")
-                    used_proxy.append(select_proxy)  # 标记为已使用
-                    break  # 成功后退出当前代理的重试循环
-                else:
-                    print(f"{url_and_port} 切换 {select_proxy} 检测失败")
-                    time.sleep(1)  # 等待一段时间后重试
-
-
-if __name__ == "__main__":
-    manager = ClashProxyManager(BASE_URL, PORT_LIST)
-    manager.main()

+ 163 - 0
manual/clash/switch_random_proxy_depin.py

@@ -0,0 +1,163 @@
+# -*- coding: utf-8 -*-
+'''
+切换到随机代理
+'''
+import random
+from urllib.parse import quote
+import httpx
+import time
+import subprocess
+from typing import List
+
+BASE_URL = "http://192.168.31.201"
+
+PORT_LIST = ['32001', '32002', '32003', '32004', '32005', '32006', '32007', '32008', '32009', '32010', '32011', '32012']
+
+PROXY_GROUP = ['香港', 'HK', '新加坡', 'SG', '台湾', 'TW', '日本', 'JP', '韩国', '澳门']
+
+GROUP = 2
+
+
+class ClashProxyManager:
+    def __init__(self, base_url, base_port):
+        self.key_group = 0
+        self.base_url = base_url
+        self.base_port = base_port
+        self.all_proxies = []
+        self.used_proxy = []
+
+    def get_all_proxies(self, clash_tool_url: str) -> List[str]:
+        # 连接其中一个代理服务器, 获取所有代理节点, 因为每个代理服务器的所有节点都是一样的, 所以获取一个就行了
+        url = f"{clash_tool_url}/api/proxies"
+        try:
+            response = httpx.get(url)
+            response.raise_for_status()
+            proxies = response.json()
+            # 输出读取的所有代理信息
+            # for proxy_name, proxy_info in proxies['proxies'].items():
+            #     logging.info(f"Name: {proxy_name}, Type: {proxy_info.get('type', 'Unknown')}")
+            proxy_list = list(proxies['proxies'].keys())
+
+            result_data = []
+
+            if GROUP == 1:
+                for filtered in proxy_list:
+                    for group in PROXY_GROUP:
+                        if group.lower() in filtered.lower() and filtered not in {'REJECT', 'GLOBAL', 'DIRECT'}:
+                            result_data.append(filtered)
+            elif GROUP == 2:
+                for filtered in proxy_list:
+                    if all(group.lower() not in filtered.lower() for group in PROXY_GROUP) and filtered not in {
+                        'REJECT', 'GLOBAL', 'DIRECT'}:
+                        result_data.append(filtered)
+            else:
+                print(f'选择代理组为 {GROUP}')
+                exit(1)
+            print(f'读取所有代理节点, 一共 {len(result_data)} 个节点')
+            return result_data
+        except Exception as e:
+            print(f"Failed to get proxies: {e}")
+            return []
+
+    def switch_proxy(self, proxy_name: str, url_and_port: str) -> None:
+        # 根据节点名称和代理服务器url, 切换到指定的代理节点
+        url = f"{url_and_port}/api/proxies/GLOBAL"
+        data = {"name": proxy_name}
+        try:
+            response = httpx.put(url, json=data)
+            if response.status_code == 204:
+                print(f"Switched to proxy: {proxy_name}")
+            else:
+                print(f"Failed to switch proxy: {response.status_code} - {proxy_name}")
+        except Exception as e:
+            print(f"Failed to switch proxy: {e}")
+
+    def update_configs(self):
+        for base_port in self.base_port:
+            url_and_port = self.base_url + ":" + base_port
+            key = "/api/configs"
+            url = url_and_port + key
+
+            # 构造 curl 命令
+            curl_cmd = [
+                "curl",
+                "-X", "PATCH",
+                url,
+                "-H", "Content-Type: application/json",
+                "-d", '{"mode": "Global"}'
+            ]
+
+            try:
+                # 使用 subprocess 运行 curl 命令
+                result = subprocess.run(curl_cmd, capture_output=True, text=True, check=True)
+
+                # 检查 curl 命令的返回状态
+                if result.returncode != 0:
+                    print(f"请求失败,状态码: {result.returncode}")
+                    print("错误信息:", result.stderr.strip())
+            except subprocess.CalledProcessError as exc:
+                print(f"请求失败: {exc}")
+                print("错误信息:", exc.stderr.strip())
+
+    def check_proxy(self, proxy_url, choose_proxy):
+        encode_proxy_name = quote(choose_proxy, safe="")
+        command = [
+            "curl",
+            "-X", "GET",
+            f"{proxy_url}/api/proxies/{encode_proxy_name}/delay?timeout=5000&url=http:%2F%2Fwww.gstatic.com%2Fgenerate_204"
+        ]
+
+        try:
+            result = subprocess.run(command, capture_output=True, text=True, check=True)
+            print("Output:", result.stdout)
+            if 'Timeout' in result.stdout:
+                return False
+            return True
+        except subprocess.CalledProcessError as e:
+            print("Error:", e.stderr)
+            return False
+
+    def main(self) -> None:
+        self.update_configs()
+
+        if not self.all_proxies:
+            for port_list in self.base_port:
+                base_url = self.base_url + ":" + port_list
+                clash_tool_url = f"{base_url}"
+                self.all_proxies = self.get_all_proxies(clash_tool_url)
+                if self.all_proxies:
+                    break
+
+        if not self.all_proxies:
+            return
+        else:
+            print(f'待切换节点一共 {len(self.all_proxies)} 个')
+
+        for base_port in self.base_port:
+            url_and_port = self.base_url + ":" + base_port
+            while True:
+                choose_proxy = random.choice(self.all_proxies)
+                if choose_proxy in self.used_proxy:
+                    if len(self.used_proxy) >= len(self.all_proxies):
+                        print('=' * 88)
+                        print(f'所有节点已尝试过, 退出')
+                        print('=' * 88)
+                        return
+                    continue
+
+                self.switch_proxy(choose_proxy, url_and_port)
+
+                self.used_proxy.append(choose_proxy)
+
+                if self.check_proxy(url_and_port, choose_proxy):
+                    print(f"代理 {choose_proxy} 切换成功,检测通过!")
+                    print('=' * 88)
+                    break
+                else:
+                    print(f"{url_and_port} 切换 xxxxxxxx {choose_proxy} xxxxxxxx 检测失败")
+                    time.sleep(1)
+
+
+if __name__ == "__main__":
+    manager = ClashProxyManager(BASE_URL, PORT_LIST)
+    manager.main()

+ 161 - 0
manual/clash/switch_random_proxy_web3.py

@@ -0,0 +1,161 @@
+# -*- coding: utf-8 -*-
+'''
+切换到随机代理
+'''
+import random
+from urllib.parse import quote
+import httpx
+import time
+import subprocess
+from typing import List
+
+BASE_URL = "http://192.168.31.194"
+
+PORT_LIST = ['58001', '58002', '58003', '58004', '58005', '58006', '58007', '58008', '58009', '58010']
+
+GROUP = 1
+
+
+class ClashProxyManager:
+    def __init__(self, base_url, base_port):
+        self.key_group = 0
+        self.base_url = base_url
+        self.base_port = base_port
+        self.all_proxies = []
+        self.used_proxy = []
+
+    def get_all_proxies(self, clash_tool_url: str) -> List[str]:
+        # 连接其中一个代理服务器, 获取所有代理节点, 因为每个代理服务器的所有节点都是一样的, 所以获取一个就行了
+        url = f"{clash_tool_url}/api/proxies"
+        try:
+            response = httpx.get(url)
+            response.raise_for_status()
+            proxies = response.json()
+            # 输出读取的所有代理信息
+            # for proxy_name, proxy_info in proxies['proxies'].items():
+            #     logging.info(f"Name: {proxy_name}, Type: {proxy_info.get('type', 'Unknown')}")
+            proxy_list = list(proxies['proxies'].keys())
+
+            result_data = []
+
+            if GROUP == 1:
+                for filtered in proxy_list:
+                    for group in PROXY_GROUP:
+                        if group.lower() in filtered.lower() and filtered not in {'REJECT', 'GLOBAL', 'DIRECT'}:
+                            result_data.append(filtered)
+            elif GROUP == 2:
+                for filtered in proxy_list:
+                    if all(group.lower() not in filtered.lower() for group in PROXY_GROUP) and filtered not in {
+                        'REJECT', 'GLOBAL', 'DIRECT'}:
+                        result_data.append(filtered)
+            else:
+                print(f'选择代理组为 {GROUP}')
+                exit(1)
+            print(f'读取所有代理节点, 一共 {len(result_data)} 个节点')
+            return result_data
+        except Exception as e:
+            print(f"Failed to get proxies: {e}")
+            return []
+
+    def switch_proxy(self, proxy_name: str, url_and_port: str) -> None:
+        # 根据节点名称和代理服务器url, 切换到指定的代理节点
+        url = f"{url_and_port}/api/proxies/GLOBAL"
+        data = {"name": proxy_name}
+        try:
+            response = httpx.put(url, json=data)
+            if response.status_code == 204:
+                print(f"Switched to proxy: {proxy_name}")
+            else:
+                print(f"Failed to switch proxy: {response.status_code} - {proxy_name}")
+        except Exception as e:
+            print(f"Failed to switch proxy: {e}")
+
+    def update_configs(self):
+        for base_port in self.base_port:
+            url_and_port = self.base_url + ":" + base_port
+            key = "/api/configs"
+            url = url_and_port + key
+
+            # 构造 curl 命令
+            curl_cmd = [
+                "curl",
+                "-X", "PATCH",
+                url,
+                "-H", "Content-Type: application/json",
+                "-d", '{"mode": "Global"}'
+            ]
+
+            try:
+                # 使用 subprocess 运行 curl 命令
+                result = subprocess.run(curl_cmd, capture_output=True, text=True, check=True)
+
+                # 检查 curl 命令的返回状态
+                if result.returncode != 0:
+                    print(f"请求失败,状态码: {result.returncode}")
+                    print("错误信息:", result.stderr.strip())
+            except subprocess.CalledProcessError as exc:
+                print(f"请求失败: {exc}")
+                print("错误信息:", exc.stderr.strip())
+
+    def check_proxy(self, proxy_url, choose_proxy):
+        encode_proxy_name = quote(choose_proxy, safe="")
+        command = [
+            "curl",
+            "-X", "GET",
+            f"{proxy_url}/api/proxies/{encode_proxy_name}/delay?timeout=5000&url=http:%2F%2Fwww.gstatic.com%2Fgenerate_204"
+        ]
+
+        try:
+            result = subprocess.run(command, capture_output=True, text=True, check=True)
+            print("Output:", result.stdout)
+            if 'Timeout' in result.stdout:
+                return False
+            return True
+        except subprocess.CalledProcessError as e:
+            print("Error:", e.stderr)
+            return False
+
+    def main(self) -> None:
+        self.update_configs()
+
+        if not self.all_proxies:
+            for port_list in self.base_port:
+                base_url = self.base_url + ":" + port_list
+                clash_tool_url = f"{base_url}"
+                self.all_proxies = self.get_all_proxies(clash_tool_url)
+                if self.all_proxies:
+                    break
+
+        if not self.all_proxies:
+            return
+        else:
+            print(f'待切换节点一共 {len(self.all_proxies)} 个')
+
+        for base_port in self.base_port:
+            url_and_port = self.base_url + ":" + base_port
+            while True:
+                choose_proxy = random.choice(self.all_proxies)
+                if choose_proxy in self.used_proxy:
+                    if len(self.used_proxy) >= len(self.all_proxies):
+                        print('=' * 88)
+                        print(f'所有节点已尝试过, 退出')
+                        print('=' * 88)
+                        return
+                    continue
+
+                self.switch_proxy(choose_proxy, url_and_port)
+
+                self.used_proxy.append(choose_proxy)
+
+                if self.check_proxy(url_and_port, choose_proxy):
+                    print(f"代理 {choose_proxy} 切换成功,检测通过!")
+                    print('=' * 88)
+                    break
+                else:
+                    print(f"{url_and_port} 切换 xxxxxxxx {choose_proxy} xxxxxxxx 检测失败")
+                    time.sleep(1)
+
+
+if __name__ == "__main__":
+    manager = ClashProxyManager(BASE_URL, PORT_LIST)
+    manager.main()

BIN
manual/dawn/aa.jpg


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1009 - 0
manual/dawn/main.f4627661.js


+ 4 - 2
manual/dawn/main.py

@@ -5,6 +5,7 @@ import logging
 import os.path
 import time
 import requests
+import ddddocr
 
 # 配置日志
 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
@@ -128,8 +129,9 @@ def get_puzzle_code(config):
 # 获取验证码
 def get_code_with_img(puzzle_id, img_data):
     print(puzzle_id)
-    print(img_data)
-    print()
+    with open(f'{str(int(time.time()))}.jpg', 'wb') as file:
+        file.write(img_data)
+    return False
 
 
 # 获取Token

+ 7 - 0
manual/dawn/test.py

@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+import ddddocr
+
+with open('aa.jpg', 'rb') as f:
+    img_bytes = f.read()
+res = ddddocr.DdddOcr(show_ad=False).classification(img_bytes)
+print(res)

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä