mirror of
				https://git.mirrors.martin98.com/https://github.com/sub-store-org/Sub-Store.git
				synced 2025-10-31 08:51:04 +08:00 
			
		
		
		
	feat: 支持 Loon SOCKS5/SOCKS5-TLS
This commit is contained in:
		
							parent
							
								
									89ab72e46c
								
							
						
					
					
						commit
						3ab21b0e26
					
				| @ -30,7 +30,7 @@ Core functionalities: | |||||||
| - [x] Clash Proxies YAML | - [x] Clash Proxies YAML | ||||||
| - [x] Clash Proxy JSON(single line) | - [x] Clash Proxy JSON(single line) | ||||||
| - [x] QX (SS, SSR, VMess, Trojan, HTTP, SOCKS5, VLESS) | - [x] QX (SS, SSR, VMess, Trojan, HTTP, SOCKS5, VLESS) | ||||||
| - [x] Loon (SS, SSR, VMess, Trojan, HTTP, SOCKS5, WireGuard, VLESS, Hysteria 2) | - [x] Loon (SS, SSR, VMess, Trojan, HTTP, SOCKS5, SOCKS5-TLS, WireGuard, VLESS, Hysteria 2) | ||||||
| - [x] Surge (SS, VMess, Trojan, HTTP, SOCKS5, SOCKS5-TLS, TUIC, Snell, Hysteria 2, SSH(Password authentication only), SSR(external, only for macOS), External Proxy Program(only for macOS), WireGuard(Surge to Surge)) | - [x] Surge (SS, VMess, Trojan, HTTP, SOCKS5, SOCKS5-TLS, TUIC, Snell, Hysteria 2, SSH(Password authentication only), SSR(external, only for macOS), External Proxy Program(only for macOS), WireGuard(Surge to Surge)) | ||||||
| - [x] Surfboard (SS, VMess, Trojan, HTTP, SOCKS5, SOCKS5-TLS, WireGuard(Surfboard to Surfboard)) | - [x] Surfboard (SS, VMess, Trojan, HTTP, SOCKS5, SOCKS5-TLS, WireGuard(Surfboard to Surfboard)) | ||||||
| - [x] Shadowrocket (SS, SSR, VMess, Trojan, HTTP, SOCKS5, Snell, VLESS, WireGuard, Hysteria, Hysteria 2, TUIC) | - [x] Shadowrocket (SS, SSR, VMess, Trojan, HTTP, SOCKS5, Snell, VLESS, WireGuard, Hysteria, Hysteria 2, TUIC) | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "sub-store", |   "name": "sub-store", | ||||||
|   "version": "2.14.291", |   "version": "2.14.292", | ||||||
|   "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", |   "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", | ||||||
|   "main": "src/main.js", |   "main": "src/main.js", | ||||||
|   "scripts": { |   "scripts": { | ||||||
|  | |||||||
| @ -996,6 +996,15 @@ function Loon_Http() { | |||||||
|     const parse = (line) => getLoonParser().parse(line); |     const parse = (line) => getLoonParser().parse(line); | ||||||
|     return { name, test, parse }; |     return { name, test, parse }; | ||||||
| } | } | ||||||
|  | function Loon_Socks5() { | ||||||
|  |     const name = 'Loon SOCKS5 Parser'; | ||||||
|  |     const test = (line) => { | ||||||
|  |         return /^.*=\s*socks5/i.test(line.split(',')[0]); | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     const parse = (line) => getLoonParser().parse(line); | ||||||
|  |     return { name, test, parse }; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| function Loon_WireGuard() { | function Loon_WireGuard() { | ||||||
|     const name = 'Loon WireGuard Parser'; |     const name = 'Loon WireGuard Parser'; | ||||||
| @ -1302,6 +1311,7 @@ export default [ | |||||||
|     Loon_Hysteria2(), |     Loon_Hysteria2(), | ||||||
|     Loon_Trojan(), |     Loon_Trojan(), | ||||||
|     Loon_Http(), |     Loon_Http(), | ||||||
|  |     Loon_Socks5(), | ||||||
|     Loon_WireGuard(), |     Loon_WireGuard(), | ||||||
|     QX_SS(), |     QX_SS(), | ||||||
|     QX_SSR(), |     QX_SSR(), | ||||||
|  | |||||||
| @ -35,7 +35,7 @@ const grammars = String.raw` | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| start = (shadowsocksr/shadowsocks/vmess/vless/trojan/https/http/hysteria2) { | start = (shadowsocksr/shadowsocks/vmess/vless/trojan/https/http/socks5/hysteria2) { | ||||||
|     return proxy; |     return proxy; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -78,6 +78,9 @@ https = tag equals "https"i address (username password)? (tls_host/tls_verificat | |||||||
| http = tag equals "http"i address (username password)? (fast_open/udp_relay/others)* { | http = tag equals "http"i address (username password)? (fast_open/udp_relay/others)* { | ||||||
|     proxy.type = "http"; |     proxy.type = "http"; | ||||||
| } | } | ||||||
|  | socks5 = tag equals "socks5"i address (username password)? (over_tls/tls_host/tls_verification/fast_open/udp_relay/others)* { | ||||||
|  |     proxy.type = "socks5"; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| address = comma server:server comma port:port { | address = comma server:server comma port:port { | ||||||
|     proxy.server = server; |     proxy.server = server; | ||||||
| @ -167,7 +170,7 @@ ssr_protocol_param = comma "protocol-param" equals param:$[^=,]+ { proxy["protoc | |||||||
| vmess_alterId = comma "alterId" equals alterId:$[0-9]+ { proxy.alterId = parseInt(alterId); }  | vmess_alterId = comma "alterId" equals alterId:$[0-9]+ { proxy.alterId = parseInt(alterId); }  | ||||||
| 
 | 
 | ||||||
| over_tls = comma "over-tls" equals flag:bool { proxy.tls = flag; } | over_tls = comma "over-tls" equals flag:bool { proxy.tls = flag; } | ||||||
| tls_host = comma "tls-name" equals host:domain { proxy.sni = host; } | tls_host = comma sni:("tls-name"/"sni") equals host:domain { proxy.sni = host; } | ||||||
| tls_verification = comma "skip-cert-verify" equals flag:bool { proxy["skip-cert-verify"] = flag; } | tls_verification = comma "skip-cert-verify" equals flag:bool { proxy["skip-cert-verify"] = flag; } | ||||||
| 
 | 
 | ||||||
| fast_open = comma "fast-open" equals flag:bool { proxy.tfo = flag; } | fast_open = comma "fast-open" equals flag:bool { proxy.tfo = flag; } | ||||||
|  | |||||||
| @ -33,7 +33,7 @@ | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| start = (shadowsocksr/shadowsocks/vmess/vless/trojan/https/http/hysteria2) { | start = (shadowsocksr/shadowsocks/vmess/vless/trojan/https/http/socks5/hysteria2) { | ||||||
|     return proxy; |     return proxy; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -76,6 +76,9 @@ https = tag equals "https"i address (username password)? (tls_host/tls_verificat | |||||||
| http = tag equals "http"i address (username password)? (fast_open/udp_relay/others)* { | http = tag equals "http"i address (username password)? (fast_open/udp_relay/others)* { | ||||||
|     proxy.type = "http"; |     proxy.type = "http"; | ||||||
| } | } | ||||||
|  | socks5 = tag equals "socks5"i address (username password)? (over_tls/tls_host/tls_verification/fast_open/udp_relay/others)* { | ||||||
|  |     proxy.type = "socks5"; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| address = comma server:server comma port:port { | address = comma server:server comma port:port { | ||||||
|     proxy.server = server; |     proxy.server = server; | ||||||
| @ -165,7 +168,7 @@ ssr_protocol_param = comma "protocol-param" equals param:$[^=,]+ { proxy["protoc | |||||||
| vmess_alterId = comma "alterId" equals alterId:$[0-9]+ { proxy.alterId = parseInt(alterId); }  | vmess_alterId = comma "alterId" equals alterId:$[0-9]+ { proxy.alterId = parseInt(alterId); }  | ||||||
| 
 | 
 | ||||||
| over_tls = comma "over-tls" equals flag:bool { proxy.tls = flag; } | over_tls = comma "over-tls" equals flag:bool { proxy.tls = flag; } | ||||||
| tls_host = comma "tls-name" equals host:domain { proxy.sni = host; } | tls_host = comma sni:("tls-name"/"sni") equals host:domain { proxy.sni = host; } | ||||||
| tls_verification = comma "skip-cert-verify" equals flag:bool { proxy["skip-cert-verify"] = flag; } | tls_verification = comma "skip-cert-verify" equals flag:bool { proxy["skip-cert-verify"] = flag; } | ||||||
| 
 | 
 | ||||||
| fast_open = comma "fast-open" equals flag:bool { proxy.tfo = flag; } | fast_open = comma "fast-open" equals flag:bool { proxy.tfo = flag; } | ||||||
|  | |||||||
| @ -18,6 +18,8 @@ export default function Loon_Producer() { | |||||||
|                 return vless(proxy); |                 return vless(proxy); | ||||||
|             case 'http': |             case 'http': | ||||||
|                 return http(proxy); |                 return http(proxy); | ||||||
|  |             case 'socks5': | ||||||
|  |                 return socks5(proxy); | ||||||
|             case 'wireguard': |             case 'wireguard': | ||||||
|                 return wireguard(proxy); |                 return wireguard(proxy); | ||||||
|             case 'hysteria2': |             case 'hysteria2': | ||||||
| @ -316,6 +318,29 @@ function http(proxy) { | |||||||
| 
 | 
 | ||||||
|     return result.toString(); |     return result.toString(); | ||||||
| } | } | ||||||
|  | function socks5(proxy) { | ||||||
|  |     const result = new Result(proxy); | ||||||
|  |     result.append(`${proxy.name}=socks5,${proxy.server},${proxy.port}`); | ||||||
|  |     result.appendIfPresent(`,${proxy.username}`, 'username'); | ||||||
|  |     result.appendIfPresent(`,"${proxy.password}"`, 'password'); | ||||||
|  | 
 | ||||||
|  |     // tls
 | ||||||
|  |     result.appendIfPresent(`,over-tls=${proxy.tls}`, 'tls'); | ||||||
|  | 
 | ||||||
|  |     // sni
 | ||||||
|  |     result.appendIfPresent(`,sni=${proxy.sni}`, 'sni'); | ||||||
|  | 
 | ||||||
|  |     // tls verification
 | ||||||
|  |     result.appendIfPresent( | ||||||
|  |         `,skip-cert-verify=${proxy['skip-cert-verify']}`, | ||||||
|  |         'skip-cert-verify', | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  |     // tfo
 | ||||||
|  |     result.appendIfPresent(`,tfo=${proxy.tfo}`, 'tfo'); | ||||||
|  | 
 | ||||||
|  |     return result.toString(); | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| function wireguard(proxy) { | function wireguard(proxy) { | ||||||
|     if (Array.isArray(proxy.peers) && proxy.peers.length > 0) { |     if (Array.isArray(proxy.peers) && proxy.peers.length > 0) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 xream
						xream