Skip to content

Commit abb6f2d

Browse files
committed
feat: 处理 sni off 的情况. 若出现问题, 麻烦大家及时反馈
1 parent 56870bb commit abb6f2d

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed

backend/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sub-store",
3-
"version": "2.14.266",
3+
"version": "2.14.270",
44
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.",
55
"main": "src/main.js",
66
"scripts": {

backend/src/core/proxy-utils/index.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,10 @@ function produce(proxies, targetPlatform, type, opts = {}) {
186186
throw new Error(`Target platform: ${targetPlatform} is not supported!`);
187187
}
188188

189+
const sni_off_supported = /Surge|SurgeMac|Shadowrocket/i.test(
190+
targetPlatform,
191+
);
192+
189193
// filter unsupported proxies
190194
proxies = proxies.filter(
191195
(proxy) =>
@@ -196,6 +200,18 @@ function produce(proxies, targetPlatform, type, opts = {}) {
196200
if (!isNotBlank(proxy.name)) {
197201
proxy.name = `${proxy.type} ${proxy.server}:${proxy.port}`;
198202
}
203+
if (proxy['disable-sni']) {
204+
if (sni_off_supported) {
205+
proxy.sni = 'off';
206+
} else if (!['tuic'].includes(proxy.type)) {
207+
$.error(
208+
`Target platform ${targetPlatform} does not support sni off. Proxy's fields (sni, tls-fingerprint and skip-cert-verify) will be modified.`,
209+
);
210+
proxy.sni = '';
211+
proxy['skip-cert-verify'] = true;
212+
delete proxy['tls-fingerprint'];
213+
}
214+
}
199215
return proxy;
200216
});
201217

@@ -396,6 +412,9 @@ function lastParse(proxy) {
396412
proxy.name = `${proxy.type} ${proxy.server}:${proxy.port}`;
397413
}
398414
}
415+
if (['', 'off'].includes(proxy.sni)) {
416+
proxy['disable-sni'] = true;
417+
}
399418
return proxy;
400419
}
401420

backend/src/core/proxy-utils/parsers/peggy/surge.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,13 @@ username = & {
177177
password = comma match:[^,]+ { proxy.password = match.join(""); }
178178
179179
tls = comma "tls" equals flag:bool { proxy.tls = flag; }
180-
sni = comma "sni" equals sni:domain { proxy.sni = sni; }
180+
sni = comma "sni" equals sni:("off"/domain) {
181+
if (sni === "off") {
182+
proxy["disable-sni"] = true;
183+
} else {
184+
proxy.sni = sni;
185+
}
186+
}
181187
tls_verification = comma "skip-cert-verify" equals flag:bool { proxy["skip-cert-verify"] = flag; }
182188
tls_fingerprint = comma "server-cert-fingerprint-sha256" equals tls_fingerprint:$[^,]+ { proxy["tls-fingerprint"] = tls_fingerprint.trim(); }
183189

backend/src/core/proxy-utils/parsers/peggy/surge.peg

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,13 @@ username = & {
175175
password = comma match:[^,]+ { proxy.password = match.join(""); }
176176

177177
tls = comma "tls" equals flag:bool { proxy.tls = flag; }
178-
sni = comma "sni" equals sni:domain { proxy.sni = sni; }
178+
sni = comma "sni" equals sni:("off"/domain) {
179+
if (sni === "off") {
180+
proxy["disable-sni"] = true;
181+
} else {
182+
proxy.sni = sni;
183+
}
184+
}
179185
tls_verification = comma "skip-cert-verify" equals flag:bool { proxy["skip-cert-verify"] = flag; }
180186
tls_fingerprint = comma "server-cert-fingerprint-sha256" equals tls_fingerprint:$[^,]+ { proxy["tls-fingerprint"] = tls_fingerprint.trim(); }
181187

0 commit comments

Comments
 (0)