mirror of
https://github.com/v2board/v2board.git
synced 2025-03-14 06:34:43 +08:00
完善Singbox订阅,修复一些订阅下发的BUG
This commit is contained in:
parent
a961bfff53
commit
b84b5f67b8
@ -130,7 +130,7 @@ class Clash
|
||||
if ($server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['networkSettings'];
|
||||
if (isset($tcpSettings['header']['type'])) $array['network'] = $tcpSettings['header']['type'];
|
||||
if (isset($tcpSettings['header']['request']['path'][0])) $array['http-opts']['path'] = $tcpSettings['header']['request']['path'][0];
|
||||
if (isset($tcpSettings['header']['request']['path'])) $array['http-opts']['path'] = $tcpSettings['header']['request']['path'];
|
||||
}
|
||||
if ($server['network'] === 'ws') {
|
||||
$array['network'] = 'ws';
|
||||
@ -141,10 +141,6 @@ class Clash
|
||||
$array['ws-opts']['path'] = $wsSettings['path'];
|
||||
if (isset($wsSettings['headers']['Host']) && !empty($wsSettings['headers']['Host']))
|
||||
$array['ws-opts']['headers'] = ['Host' => $wsSettings['headers']['Host']];
|
||||
if (isset($wsSettings['path']) && !empty($wsSettings['path']))
|
||||
$array['ws-path'] = $wsSettings['path'];
|
||||
if (isset($wsSettings['headers']['Host']) && !empty($wsSettings['headers']['Host']))
|
||||
$array['ws-headers'] = ['Host' => $wsSettings['headers']['Host']];
|
||||
}
|
||||
}
|
||||
if ($server['network'] === 'grpc') {
|
||||
@ -226,6 +222,22 @@ class Clash
|
||||
$array['port'] = $server['port'];
|
||||
$array['password'] = $password;
|
||||
$array['udp'] = true;
|
||||
if(in_array($server['network'], ["grpc", "ws"])){
|
||||
$array['network'] = $server['network'];
|
||||
// grpc配置
|
||||
if($server['network'] === "grpc" && isset($server['networkSettings']['serviceName'])) {
|
||||
$array['grpc-opts']['grpc-service-name'] = $server['networkSettings']['serviceName'];
|
||||
}
|
||||
// ws配置
|
||||
if($server['network'] === "ws") {
|
||||
if(isset($server['networkSettings']['path'])) {
|
||||
$array['ws-opts']['path'] = $server['networkSettings']['path'];
|
||||
}
|
||||
if(isset($server['networkSettings']['headers']['Host'])){
|
||||
$array['ws-opts']['headers']['Host'] = $server['networkSettings']['headers']['Host'];
|
||||
}
|
||||
}
|
||||
};
|
||||
if (!empty($server['server_name'])) $array['sni'] = $server['server_name'];
|
||||
if (!empty($server['allow_insecure'])) $array['skip-cert-verify'] = ($server['allow_insecure'] ? true : false);
|
||||
return $array;
|
||||
|
@ -104,7 +104,7 @@ class ClashMeta
|
||||
$password = "{$serverKey}:{$userKey}";
|
||||
}
|
||||
$array = [];
|
||||
$array['name'] = $server['name'];
|
||||
$array['name'] = rawurlencode($server['name']);
|
||||
$array['type'] = 'ss';
|
||||
$array['server'] = $server['host'];
|
||||
$array['port'] = $server['port'];
|
||||
@ -139,7 +139,7 @@ class ClashMeta
|
||||
if ($server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['networkSettings'];
|
||||
if (isset($tcpSettings['header']['type'])) $array['network'] = $tcpSettings['header']['type'];
|
||||
if (isset($tcpSettings['header']['request']['path'][0])) $array['http-opts']['path'] = $tcpSettings['header']['request']['path'][0];
|
||||
if (isset($tcpSettings['header']['request']['path'])) $array['http-opts']['path'] = $tcpSettings['header']['request']['path'];
|
||||
}
|
||||
if ($server['network'] === 'ws') {
|
||||
$array['network'] = 'ws';
|
||||
@ -150,10 +150,6 @@ class ClashMeta
|
||||
$array['ws-opts']['path'] = $wsSettings['path'];
|
||||
if (isset($wsSettings['headers']['Host']) && !empty($wsSettings['headers']['Host']))
|
||||
$array['ws-opts']['headers'] = ['Host' => $wsSettings['headers']['Host']];
|
||||
if (isset($wsSettings['path']) && !empty($wsSettings['path']))
|
||||
$array['ws-path'] = $wsSettings['path'];
|
||||
if (isset($wsSettings['headers']['Host']) && !empty($wsSettings['headers']['Host']))
|
||||
$array['ws-headers'] = ['Host' => $wsSettings['headers']['Host']];
|
||||
}
|
||||
}
|
||||
if ($server['network'] === 'grpc') {
|
||||
@ -176,12 +172,13 @@ class ClashMeta
|
||||
$array['server'] = $server['host'];
|
||||
$array['port'] = $server['port'];
|
||||
$array['uuid'] = $uuid;
|
||||
$array['flow'] = !empty($server['flow']) ? $server['flow']: "";
|
||||
$array['client-fingerprint'] = 'chrome';
|
||||
$array['udp'] = true;
|
||||
|
||||
if ($server['tls']) {
|
||||
$array['tls'] = true;
|
||||
$array['skip-cert-verify'] = isset($server['tls_settings']['allow_insecure']) && $server['tls_settings']['allow_insecure'] == 1 ? true : false;
|
||||
$array['flow'] = !empty($server['flow']) ? $server['flow']: "";
|
||||
$array['client-fingerprint'] = !empty($server['fingerprint']) ? $server['fingerprint'] : 'chrome';
|
||||
if ($server['tls_settings']) {
|
||||
$tlsSettings = $server['tls_settings'];
|
||||
if (isset($tlsSettings['server_name']) && !empty($tlsSettings['server_name']))
|
||||
@ -196,6 +193,8 @@ class ClashMeta
|
||||
|
||||
if ($server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['network_settings'];
|
||||
if (isset($tcpSettings['header']['type']) && $tcpSettings['header']['type'] == 'http') $array['network'] = $tcpSettings['header']['type'];
|
||||
if (isset($tcpSettings['header']['request']['path'])) $array['http-opts']['path'] = $tcpSettings['header']['request']['path'];
|
||||
}
|
||||
|
||||
if ($server['network'] === 'ws') {
|
||||
@ -207,10 +206,6 @@ class ClashMeta
|
||||
$array['ws-opts']['path'] = $wsSettings['path'];
|
||||
if (isset($wsSettings['headers']['Host']) && !empty($wsSettings['headers']['Host']))
|
||||
$array['ws-opts']['headers'] = ['Host' => $wsSettings['headers']['Host']];
|
||||
if (isset($wsSettings['path']) && !empty($wsSettings['path']))
|
||||
$array['ws-path'] = $wsSettings['path'];
|
||||
if (isset($wsSettings['headers']['Host']) && !empty($wsSettings['headers']['Host']))
|
||||
$array['ws-headers'] = ['Host' => $wsSettings['headers']['Host']];
|
||||
}
|
||||
}
|
||||
if ($server['network'] === 'grpc') {
|
||||
@ -243,6 +238,22 @@ class ClashMeta
|
||||
$array['port'] = $server['port'];
|
||||
$array['password'] = $password;
|
||||
$array['udp'] = true;
|
||||
if(in_array($server['network'], ["grpc", "ws"])){
|
||||
$array['network'] = $server['network'];
|
||||
// grpc配置
|
||||
if($server['network'] === "grpc" && isset($server['networkSettings']['serviceName'])) {
|
||||
$array['grpc-opts']['grpc-service-name'] = $server['networkSettings']['serviceName'];
|
||||
}
|
||||
// ws配置
|
||||
if($server['network'] === "ws") {
|
||||
if(isset($server['networkSettings']['path'])) {
|
||||
$array['ws-opts']['path'] = $server['networkSettings']['path'];
|
||||
}
|
||||
if(isset($server['networkSettings']['headers']['Host'])){
|
||||
$array['ws-opts']['headers']['Host'] = $server['networkSettings']['headers']['Host'];
|
||||
}
|
||||
}
|
||||
};
|
||||
if (!empty($server['server_name'])) $array['sni'] = $server['server_name'];
|
||||
if (!empty($server['allow_insecure'])) $array['skip-cert-verify'] = ($server['allow_insecure'] ? true : false);
|
||||
return $array;
|
||||
@ -255,6 +266,7 @@ class ClashMeta
|
||||
$array['server'] = $server['host'];
|
||||
$array['port'] = $server['port'];
|
||||
$array['udp'] = true;
|
||||
$array['skip-cert-verify'] = $server['insecure'] == 1 ? true : false;
|
||||
|
||||
if (isset($server['server_name'])) $array['sni'] = $server['server_name'];
|
||||
|
||||
@ -272,8 +284,8 @@ class ClashMeta
|
||||
$array['obfs'] = $server['obfs_password'];
|
||||
}
|
||||
//Todo:完善客户端上下行
|
||||
$array['up'] = $server['up_mbps'];
|
||||
$array['down'] = $server['down_mbps'];
|
||||
$array['up'] = $server['down_mbps'];
|
||||
$array['down'] = $server['up_mbps'];
|
||||
$array['protocol'] = 'udp';
|
||||
}
|
||||
|
||||
|
@ -139,7 +139,7 @@ class ClashVerge
|
||||
if ($server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['networkSettings'];
|
||||
if (isset($tcpSettings['header']['type'])) $array['network'] = $tcpSettings['header']['type'];
|
||||
if (isset($tcpSettings['header']['request']['path'][0])) $array['http-opts']['path'] = $tcpSettings['header']['request']['path'][0];
|
||||
if (isset($tcpSettings['header']['request']['path'])) $array['http-opts']['path'] = $tcpSettings['header']['request']['path'];
|
||||
}
|
||||
if ($server['network'] === 'ws') {
|
||||
$array['network'] = 'ws';
|
||||
@ -150,10 +150,7 @@ class ClashVerge
|
||||
$array['ws-opts']['path'] = $wsSettings['path'];
|
||||
if (isset($wsSettings['headers']['Host']) && !empty($wsSettings['headers']['Host']))
|
||||
$array['ws-opts']['headers'] = ['Host' => $wsSettings['headers']['Host']];
|
||||
if (isset($wsSettings['path']) && !empty($wsSettings['path']))
|
||||
$array['ws-path'] = $wsSettings['path'];
|
||||
if (isset($wsSettings['headers']['Host']) && !empty($wsSettings['headers']['Host']))
|
||||
$array['ws-headers'] = ['Host' => $wsSettings['headers']['Host']];
|
||||
|
||||
}
|
||||
}
|
||||
if ($server['network'] === 'grpc') {
|
||||
@ -176,12 +173,13 @@ class ClashVerge
|
||||
$array['server'] = $server['host'];
|
||||
$array['port'] = $server['port'];
|
||||
$array['uuid'] = $uuid;
|
||||
$array['flow'] = !empty($server['flow']) ? $server['flow']: "";
|
||||
$array['client-fingerprint'] = 'chrome';
|
||||
$array['udp'] = true;
|
||||
|
||||
if ($server['tls']) {
|
||||
$array['tls'] = true;
|
||||
$array['skip-cert-verify'] = isset($server['tls_settings']['allow_insecure']) && $server['tls_settings']['allow_insecure'] == 1 ? true : false;
|
||||
$array['flow'] = !empty($server['flow']) ? $server['flow']: "";
|
||||
$array['client-fingerprint'] = !empty($server['fingerprint']) ? $server['fingerprint'] : 'chrome';
|
||||
if ($server['tls_settings']) {
|
||||
$tlsSettings = $server['tls_settings'];
|
||||
if (isset($tlsSettings['server_name']) && !empty($tlsSettings['server_name']))
|
||||
@ -196,6 +194,8 @@ class ClashVerge
|
||||
|
||||
if ($server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['network_settings'];
|
||||
if (isset($tcpSettings['header']['type']) && $tcpSettings['header']['type'] == 'http') $array['network'] = $tcpSettings['header']['type'];
|
||||
if (isset($tcpSettings['header']['request']['path'])) $array['http-opts']['path'] = $tcpSettings['header']['request']['path'];
|
||||
}
|
||||
|
||||
if ($server['network'] === 'ws') {
|
||||
@ -207,10 +207,6 @@ class ClashVerge
|
||||
$array['ws-opts']['path'] = $wsSettings['path'];
|
||||
if (isset($wsSettings['headers']['Host']) && !empty($wsSettings['headers']['Host']))
|
||||
$array['ws-opts']['headers'] = ['Host' => $wsSettings['headers']['Host']];
|
||||
if (isset($wsSettings['path']) && !empty($wsSettings['path']))
|
||||
$array['ws-path'] = $wsSettings['path'];
|
||||
if (isset($wsSettings['headers']['Host']) && !empty($wsSettings['headers']['Host']))
|
||||
$array['ws-headers'] = ['Host' => $wsSettings['headers']['Host']];
|
||||
}
|
||||
}
|
||||
if ($server['network'] === 'grpc') {
|
||||
@ -242,6 +238,22 @@ class ClashVerge
|
||||
$array['port'] = $server['port'];
|
||||
$array['password'] = $password;
|
||||
$array['udp'] = true;
|
||||
if(in_array($server['network'], ["grpc", "ws"])){
|
||||
$array['network'] = $server['network'];
|
||||
// grpc配置
|
||||
if($server['network'] === "grpc" && isset($server['networkSettings']['serviceName'])) {
|
||||
$array['grpc-opts']['grpc-service-name'] = $server['networkSettings']['serviceName'];
|
||||
}
|
||||
// ws配置
|
||||
if($server['network'] === "ws") {
|
||||
if(isset($server['networkSettings']['path'])) {
|
||||
$array['ws-opts']['path'] = $server['networkSettings']['path'];
|
||||
}
|
||||
if(isset($server['networkSettings']['headers']['Host'])){
|
||||
$array['ws-opts']['headers']['Host'] = $server['networkSettings']['headers']['Host'];
|
||||
}
|
||||
}
|
||||
};
|
||||
if (!empty($server['server_name'])) $array['sni'] = $server['server_name'];
|
||||
if (!empty($server['allow_insecure'])) $array['skip-cert-verify'] = ($server['allow_insecure'] ? true : false);
|
||||
return $array;
|
||||
@ -254,6 +266,7 @@ class ClashVerge
|
||||
$array['server'] = $server['host'];
|
||||
$array['port'] = $server['port'];
|
||||
$array['udp'] = true;
|
||||
$array['skip-cert-verify'] = $server['insecure'] == 1 ? true : false;
|
||||
|
||||
if (isset($server['server_name'])) $array['sni'] = $server['server_name'];
|
||||
|
||||
@ -271,8 +284,8 @@ class ClashVerge
|
||||
$array['obfs'] = $server['obfs_password'];
|
||||
}
|
||||
//Todo:完善客户端上下行
|
||||
$array['up'] = $user->speed_limit ? min($server['down_mbps'], $user->speed_limit) : $server['down_mbps'];
|
||||
$array['down'] = $user->speed_limit ? min($server['up_mbps'], $user->speed_limit) : $server['up_mbps'];
|
||||
$array['up'] = $server['down_mbps'];
|
||||
$array['down'] = $server['up_mbps'];
|
||||
$array['protocol'] = 'udp';
|
||||
}
|
||||
|
||||
|
@ -119,6 +119,7 @@ class General
|
||||
"mode" => "gun",
|
||||
"security" => $server['tls'] !=0 ? ($server['tls'] == 2 ? "reality":"tls") : "",
|
||||
"flow" => $server['flow'],
|
||||
"fp" => isset($server['fingerprint']) ? $server['fingerprint'] : 'chrome',
|
||||
"sni" => "",
|
||||
"pbk" => "",
|
||||
"sid" =>"",
|
||||
@ -128,7 +129,7 @@ class General
|
||||
$output .= "?" . "type={$config['type']}" . "&encryption={$config['encryption']}" . "&security={$config['security']}";
|
||||
|
||||
if ($server['tls']) {
|
||||
if ($config['flow'] !="") $output .= "&flow={$config['flow']}";
|
||||
if ($config['flow'] != "") $output .= "&flow={$config['flow']}";
|
||||
if ($server['tls_settings']) {
|
||||
$tlsSettings = $server['tls_settings'];
|
||||
if (isset($tlsSettings['server_name']) && !empty($tlsSettings['server_name'])) $config['sni'] = $tlsSettings['server_name'];
|
||||
@ -143,7 +144,8 @@ class General
|
||||
if ((string)$server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['network_settings'];
|
||||
if (isset($tcpSettings['header']['type'])) $config['headerType'] = $tcpSettings['header']['type'];
|
||||
$output .= "&headerType={$config['headerType']}";
|
||||
if (isset($tcpSettings['header']['request']['path'])) $config['path'] = $tcpSettings['header']['request']['path'];
|
||||
$output .= "&headerType={$config['headerType']}" . "&seed={$config['path']}";
|
||||
}
|
||||
if ((string)$server['network'] === 'kcp') {
|
||||
$kcpSettings = $server['network_settings'];
|
||||
@ -180,7 +182,8 @@ class General
|
||||
if (isset($grpcSettings['multiMode'])) $config['mode'] = $grpcSettings['multiMode'] ? "multi" : "gun";
|
||||
$output .= "&serviceName={$config['serviceName']}" . "&mode={$config['mode']}";
|
||||
}
|
||||
$output .= "&fp=chrome" . "#" . $config['name'];
|
||||
|
||||
$output .= "&fp={$config['fp']}" . "#" . $config['name'];
|
||||
|
||||
return $output . "\r\n";
|
||||
}
|
||||
@ -193,8 +196,23 @@ class General
|
||||
'peer' => $server['server_name'],
|
||||
'sni' => $server['server_name']
|
||||
]);
|
||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}#{$name}";
|
||||
$uri .= "\r\n";
|
||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}";
|
||||
if(in_array($server['network'], ["grpc", "ws"])){
|
||||
$uri .= "&type={$server['network']}";
|
||||
if($server['network'] === "grpc" && isset($server['networkSettings']['serviceName'])) {
|
||||
$uri .= "&path={$server['networkSettings']['serviceName']}";
|
||||
}
|
||||
if($server['network'] === "ws") {
|
||||
if(isset($server['networkSettings']['path'])) {
|
||||
$uri .= "&path={$server['networkSettings']['path']}";
|
||||
}
|
||||
if(isset($server['networkSettings']['headers']['Host'])) {
|
||||
$uri .= "&host={$server['networkSettings']['headers']['Host']}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$uri .= "#{$name}\r\n";
|
||||
return $uri;
|
||||
}
|
||||
|
||||
@ -215,7 +233,7 @@ class General
|
||||
'auth' => $password,
|
||||
'insecure' => $server['insecure'],
|
||||
'peer' => $server['server_name'],
|
||||
'upmbps' => $server['up_mbps'],
|
||||
'upmbps' => $server['down_mbps'],
|
||||
'downmbps' => $server['up_mbps']
|
||||
]);
|
||||
$uri .= $query;
|
||||
|
@ -41,6 +41,16 @@ class Passwall
|
||||
|
||||
public static function buildShadowsocks($password, $server)
|
||||
{
|
||||
if ($server['cipher'] === '2022-blake3-aes-128-gcm') {
|
||||
$serverKey = Helper::getServerKey($server['created_at'], 16);
|
||||
$userKey = Helper::uuidToBase64($password, 16);
|
||||
$password = "{$serverKey}:{$userKey}";
|
||||
}
|
||||
if ($server['cipher'] === '2022-blake3-aes-256-gcm') {
|
||||
$serverKey = Helper::getServerKey($server['created_at'], 32);
|
||||
$userKey = Helper::uuidToBase64($password, 32);
|
||||
$password = "{$serverKey}:{$userKey}";
|
||||
}
|
||||
$name = rawurlencode($server['name']);
|
||||
$str = str_replace(
|
||||
['+', '/', '='],
|
||||
@ -105,6 +115,7 @@ class Passwall
|
||||
"mode" => "gun",
|
||||
"security" => $server['tls'] !=0 ? ($server['tls'] == 2 ? "reality":"tls") : "",
|
||||
"flow" => $server['flow'],
|
||||
"fp" => isset($server['fingerprint']) ? $server['fingerprint'] : 'chrome',
|
||||
"sni" => "",
|
||||
"pbk" => "",
|
||||
"sid" =>"",
|
||||
@ -114,7 +125,7 @@ class Passwall
|
||||
$output .= "?" . "type={$config['type']}" . "&encryption={$config['encryption']}" . "&security={$config['security']}";
|
||||
|
||||
if ($server['tls']) {
|
||||
if ($config['flow'] !="") $output .= "&flow={$config['flow']}";
|
||||
if ($config['flow'] != "") $output .= "&flow={$config['flow']}";
|
||||
if ($server['tls_settings']) {
|
||||
$tlsSettings = $server['tls_settings'];
|
||||
if (isset($tlsSettings['server_name']) && !empty($tlsSettings['server_name'])) $config['sni'] = $tlsSettings['server_name'];
|
||||
@ -129,7 +140,8 @@ class Passwall
|
||||
if ((string)$server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['network_settings'];
|
||||
if (isset($tcpSettings['header']['type'])) $config['headerType'] = $tcpSettings['header']['type'];
|
||||
$output .= "&headerType={$config['headerType']}";
|
||||
if (isset($tcpSettings['header']['request']['path'])) $config['path'] = $tcpSettings['header']['request']['path'];
|
||||
$output .= "&headerType={$config['headerType']}" . "&seed={$config['path']}";
|
||||
}
|
||||
if ((string)$server['network'] === 'kcp') {
|
||||
$kcpSettings = $server['network_settings'];
|
||||
@ -166,7 +178,8 @@ class Passwall
|
||||
if (isset($grpcSettings['multiMode'])) $config['mode'] = $grpcSettings['multiMode'] ? "multi" : "gun";
|
||||
$output .= "&serviceName={$config['serviceName']}" . "&mode={$config['mode']}";
|
||||
}
|
||||
$output .= "&fp=chrome" . "#" . $config['name'];
|
||||
|
||||
$output .= "&fp={$config['fp']}" . "#" . $config['name'];
|
||||
|
||||
return $output . "\r\n";
|
||||
}
|
||||
@ -179,8 +192,23 @@ class Passwall
|
||||
'peer' => $server['server_name'],
|
||||
'sni' => $server['server_name']
|
||||
]);
|
||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}#{$name}";
|
||||
$uri .= "\r\n";
|
||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}";
|
||||
if(in_array($server['network'], ["grpc", "ws"])){
|
||||
$uri .= "&type={$server['network']}";
|
||||
if($server['network'] === "grpc" && isset($server['networkSettings']['serviceName'])) {
|
||||
$uri .= "&path={$server['networkSettings']['serviceName']}";
|
||||
}
|
||||
if($server['network'] === "ws") {
|
||||
if(isset($server['networkSettings']['path'])) {
|
||||
$uri .= "&path={$server['networkSettings']['path']}";
|
||||
}
|
||||
if(isset($server['networkSettings']['headers']['Host'])) {
|
||||
$uri .= "&host={$server['networkSettings']['headers']['Host']}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$uri .= "#{$name}\r\n";
|
||||
return $uri;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace App\Protocols;
|
||||
|
||||
use App\Utils\Helper;
|
||||
|
||||
class SSRPlus
|
||||
{
|
||||
@ -99,6 +99,7 @@ class SSRPlus
|
||||
"mode" => "gun",
|
||||
"security" => $server['tls'] !=0 ? ($server['tls'] == 2 ? "reality":"tls") : "",
|
||||
"flow" => $server['flow'],
|
||||
"fp" => isset($server['fingerprint']) ? $server['fingerprint'] : 'chrome',
|
||||
"sni" => "",
|
||||
"pbk" => "",
|
||||
"sid" =>"",
|
||||
@ -108,7 +109,7 @@ class SSRPlus
|
||||
$output .= "?" . "type={$config['type']}" . "&encryption={$config['encryption']}" . "&security={$config['security']}";
|
||||
|
||||
if ($server['tls']) {
|
||||
if ($config['flow'] !="") $output .= "&flow={$config['flow']}";
|
||||
if ($config['flow'] != "") $output .= "&flow={$config['flow']}";
|
||||
if ($server['tls_settings']) {
|
||||
$tlsSettings = $server['tls_settings'];
|
||||
if (isset($tlsSettings['server_name']) && !empty($tlsSettings['server_name'])) $config['sni'] = $tlsSettings['server_name'];
|
||||
@ -123,7 +124,8 @@ class SSRPlus
|
||||
if ((string)$server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['network_settings'];
|
||||
if (isset($tcpSettings['header']['type'])) $config['headerType'] = $tcpSettings['header']['type'];
|
||||
$output .= "&headerType={$config['headerType']}";
|
||||
if (isset($tcpSettings['header']['request']['path'])) $config['path'] = $tcpSettings['header']['request']['path'];
|
||||
$output .= "&headerType={$config['headerType']}" . "&seed={$config['path']}";
|
||||
}
|
||||
if ((string)$server['network'] === 'kcp') {
|
||||
$kcpSettings = $server['network_settings'];
|
||||
@ -160,7 +162,8 @@ class SSRPlus
|
||||
if (isset($grpcSettings['multiMode'])) $config['mode'] = $grpcSettings['multiMode'] ? "multi" : "gun";
|
||||
$output .= "&serviceName={$config['serviceName']}" . "&mode={$config['mode']}";
|
||||
}
|
||||
$output .= "&fp=chrome" . "#" . $config['name'];
|
||||
|
||||
$output .= "&fp={$config['fp']}" . "#" . $config['name'];
|
||||
|
||||
return $output . "\r\n";
|
||||
}
|
||||
@ -173,8 +176,23 @@ class SSRPlus
|
||||
'peer' => $server['server_name'],
|
||||
'sni' => $server['server_name']
|
||||
]);
|
||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}#{$name}";
|
||||
$uri .= "\r\n";
|
||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}";
|
||||
if(in_array($server['network'], ["grpc", "ws"])){
|
||||
$uri .= "&type={$server['network']}";
|
||||
if($server['network'] === "grpc" && isset($server['networkSettings']['serviceName'])) {
|
||||
$uri .= "&path={$server['networkSettings']['serviceName']}";
|
||||
}
|
||||
if($server['network'] === "ws") {
|
||||
if(isset($server['networkSettings']['path'])) {
|
||||
$uri .= "&path={$server['networkSettings']['path']}";
|
||||
}
|
||||
if(isset($server['networkSettings']['headers']['Host'])) {
|
||||
$uri .= "&host={$server['networkSettings']['headers']['Host']}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$uri .= "#{$name}\r\n";
|
||||
return $uri;
|
||||
}
|
||||
|
||||
|
@ -40,30 +40,27 @@ class SagerNet
|
||||
return base64_encode($uri);
|
||||
}
|
||||
|
||||
public static function buildShadowsocks($uuid, $server)
|
||||
public static function buildShadowsocks($password, $server)
|
||||
{
|
||||
if ($server['cipher'] === '2022-blake3-aes-128-gcm') {
|
||||
$serverKey = Helper::getServerKey($server['created_at'], 16);
|
||||
$userKey = Helper::uuidToBase64($password, 16);
|
||||
$password = "{$serverKey}:{$userKey}";
|
||||
}
|
||||
if ($server['cipher'] === '2022-blake3-aes-256-gcm') {
|
||||
$serverKey = Helper::getServerKey($server['created_at'], 32);
|
||||
$userKey = Helper::uuidToBase64($password, 32);
|
||||
$password = "{$serverKey}:{$userKey}";
|
||||
}
|
||||
$name = rawurlencode($server['name']);
|
||||
$str = str_replace(
|
||||
['+', '/', '='],
|
||||
['-', '_', ''],
|
||||
base64_encode("{$server['cipher']}:{$uuid}")
|
||||
base64_encode("{$server['cipher']}:{$password}")
|
||||
);
|
||||
return "ss://{$str}@{$server['host']}:{$server['port']}#{$name}\r\n";
|
||||
}
|
||||
|
||||
public static function buildShadowsocksSIP008($uuid, $server)
|
||||
{
|
||||
$config = [
|
||||
"id" => $server['id'],
|
||||
"remarks" => $server['name'],
|
||||
"server" => $server['host'],
|
||||
"server_port" => $server['port'],
|
||||
"password" => $uuid,
|
||||
"method" => $server['cipher']
|
||||
];
|
||||
return $config;
|
||||
}
|
||||
|
||||
public static function buildVmess($uuid, $server)
|
||||
{
|
||||
$config = [
|
||||
@ -111,6 +108,7 @@ class SagerNet
|
||||
"mode" => "gun",
|
||||
"security" => $server['tls'] !=0 ? ($server['tls'] == 2 ? "reality":"tls") : "",
|
||||
"flow" => $server['flow'],
|
||||
"fp" => isset($server['fingerprint']) ? $server['fingerprint'] : 'chrome',
|
||||
"sni" => "",
|
||||
"pbk" => "",
|
||||
"sid" =>"",
|
||||
@ -120,7 +118,7 @@ class SagerNet
|
||||
$output .= "?" . "type={$config['type']}" . "&encryption={$config['encryption']}" . "&security={$config['security']}";
|
||||
|
||||
if ($server['tls']) {
|
||||
if ($config['flow'] !="") $output .= "&flow={$config['flow']}";
|
||||
if ($config['flow'] != "") $output .= "&flow={$config['flow']}";
|
||||
if ($server['tls_settings']) {
|
||||
$tlsSettings = $server['tls_settings'];
|
||||
if (isset($tlsSettings['server_name']) && !empty($tlsSettings['server_name'])) $config['sni'] = $tlsSettings['server_name'];
|
||||
@ -135,7 +133,8 @@ class SagerNet
|
||||
if ((string)$server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['network_settings'];
|
||||
if (isset($tcpSettings['header']['type'])) $config['headerType'] = $tcpSettings['header']['type'];
|
||||
$output .= "&headerType={$config['headerType']}";
|
||||
if (isset($tcpSettings['header']['request']['path'])) $config['path'] = $tcpSettings['header']['request']['path'];
|
||||
$output .= "&headerType={$config['headerType']}" . "&seed={$config['path']}";
|
||||
}
|
||||
if ((string)$server['network'] === 'kcp') {
|
||||
$kcpSettings = $server['network_settings'];
|
||||
@ -172,12 +171,13 @@ class SagerNet
|
||||
if (isset($grpcSettings['multiMode'])) $config['mode'] = $grpcSettings['multiMode'] ? "multi" : "gun";
|
||||
$output .= "&serviceName={$config['serviceName']}" . "&mode={$config['mode']}";
|
||||
}
|
||||
$output .= "&fp=chrome" . "#" . $config['name'];
|
||||
|
||||
$output .= "&fp={$config['fp']}" . "#" . $config['name'];
|
||||
|
||||
return $output . "\r\n";
|
||||
}
|
||||
|
||||
public static function buildTrojan($uuid, $server)
|
||||
public static function buildTrojan($password, $server)
|
||||
{
|
||||
$name = rawurlencode($server['name']);
|
||||
$query = http_build_query([
|
||||
@ -185,8 +185,23 @@ class SagerNet
|
||||
'peer' => $server['server_name'],
|
||||
'sni' => $server['server_name']
|
||||
]);
|
||||
$uri = "trojan://{$uuid}@{$server['host']}:{$server['port']}?{$query}#{$name}";
|
||||
$uri .= "\r\n";
|
||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}";
|
||||
if(in_array($server['network'], ["grpc", "ws"])){
|
||||
$uri .= "&type={$server['network']}";
|
||||
if($server['network'] === "grpc" && isset($server['networkSettings']['serviceName'])) {
|
||||
$uri .= "&path={$server['networkSettings']['serviceName']}";
|
||||
}
|
||||
if($server['network'] === "ws") {
|
||||
if(isset($server['networkSettings']['path'])) {
|
||||
$uri .= "&path={$server['networkSettings']['path']}";
|
||||
}
|
||||
if(isset($server['networkSettings']['headers']['Host'])) {
|
||||
$uri .= "&host={$server['networkSettings']['headers']['Host']}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$uri .= "#{$name}\r\n";
|
||||
return $uri;
|
||||
}
|
||||
}
|
||||
|
@ -142,6 +142,7 @@ class Shadowrocket
|
||||
"mode" => "gun",
|
||||
"security" => $server['tls'] !=0 ? ($server['tls'] == 2 ? "reality":"tls") : "",
|
||||
"flow" => $server['flow'],
|
||||
"fp" => isset($server['fingerprint']) ? $server['fingerprint'] : 'chrome',
|
||||
"sni" => "",
|
||||
"pbk" => "",
|
||||
"sid" =>"",
|
||||
@ -151,7 +152,7 @@ class Shadowrocket
|
||||
$output .= "?" . "type={$config['type']}" . "&encryption={$config['encryption']}" . "&security={$config['security']}";
|
||||
|
||||
if ($server['tls']) {
|
||||
if ($config['flow'] !="") $output .= "&flow={$config['flow']}";
|
||||
if ($config['flow'] != "") $output .= "&flow={$config['flow']}";
|
||||
if ($server['tls_settings']) {
|
||||
$tlsSettings = $server['tls_settings'];
|
||||
if (isset($tlsSettings['server_name']) && !empty($tlsSettings['server_name'])) $config['sni'] = $tlsSettings['server_name'];
|
||||
@ -166,7 +167,8 @@ class Shadowrocket
|
||||
if ((string)$server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['network_settings'];
|
||||
if (isset($tcpSettings['header']['type'])) $config['headerType'] = $tcpSettings['header']['type'];
|
||||
$output .= "&headerType={$config['headerType']}";
|
||||
if (isset($tcpSettings['header']['request']['path'])) $config['path'] = $tcpSettings['header']['request']['path'];
|
||||
$output .= "&headerType={$config['headerType']}" . "&seed={$config['path']}";
|
||||
}
|
||||
if ((string)$server['network'] === 'kcp') {
|
||||
$kcpSettings = $server['network_settings'];
|
||||
@ -203,7 +205,8 @@ class Shadowrocket
|
||||
if (isset($grpcSettings['multiMode'])) $config['mode'] = $grpcSettings['multiMode'] ? "multi" : "gun";
|
||||
$output .= "&serviceName={$config['serviceName']}" . "&mode={$config['mode']}";
|
||||
}
|
||||
$output .= "&fp=chrome" . "#" . $config['name'];
|
||||
|
||||
$output .= "&fp={$config['fp']}" . "#" . $config['name'];
|
||||
|
||||
return $output . "\r\n";
|
||||
}
|
||||
@ -213,10 +216,26 @@ class Shadowrocket
|
||||
$name = rawurlencode($server['name']);
|
||||
$query = http_build_query([
|
||||
'allowInsecure' => $server['allow_insecure'],
|
||||
'peer' => $server['server_name']
|
||||
'peer' => $server['server_name'],
|
||||
'sni' => $server['server_name']
|
||||
]);
|
||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}&tfo=1#{$name}";
|
||||
$uri .= "\r\n";
|
||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}";
|
||||
if(in_array($server['network'], ["grpc", "ws"])){
|
||||
$uri .= "&type={$server['network']}";
|
||||
if($server['network'] === "grpc" && isset($server['networkSettings']['serviceName'])) {
|
||||
$uri .= "&path={$server['networkSettings']['serviceName']}";
|
||||
}
|
||||
if($server['network'] === "ws") {
|
||||
if(isset($server['networkSettings']['path'])) {
|
||||
$uri .= "&path={$server['networkSettings']['path']}";
|
||||
}
|
||||
if(isset($server['networkSettings']['headers']['Host'])) {
|
||||
$uri .= "&host={$server['networkSettings']['headers']['Host']}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$uri .= "#{$name}\r\n";
|
||||
return $uri;
|
||||
}
|
||||
|
||||
@ -237,7 +256,7 @@ class Shadowrocket
|
||||
'auth' => $password,
|
||||
'insecure' => $server['insecure'],
|
||||
'peer' => $server['server_name'],
|
||||
'upmbps' => $server['up_mbps'],
|
||||
'upmbps' => $server['down_mbps'],
|
||||
'downmbps' => $server['up_mbps']
|
||||
]);
|
||||
$uri .= $query;
|
||||
|
@ -3,6 +3,7 @@ namespace App\Protocols;
|
||||
|
||||
use App\Models\ServerHysteria;
|
||||
use App\Models\User;
|
||||
use App\Utils\Helper;
|
||||
|
||||
class SingBox
|
||||
{
|
||||
@ -56,17 +57,35 @@ class SingBox
|
||||
$outbounds[] = &$selector;
|
||||
|
||||
foreach ($this->servers as $item) {
|
||||
if ($item['type'] === 'shadowsocks') {
|
||||
$ssConfig = $this->buildShadowsocks($this->user['uuid'], $item);
|
||||
$outbounds[] = $ssConfig;
|
||||
$selector['outbounds'][] = $item['name'];
|
||||
$urltest['outbounds'][] = $item['name'];
|
||||
}
|
||||
if ($item['type'] === 'trojan') {
|
||||
$trojanConfig = $this->buildTrojan($this->user['uuid'], $item);
|
||||
$outbounds[] = $trojanConfig;
|
||||
$selector['outbounds'][] = $item['name'];
|
||||
$urltest['outbounds'][] = $item['name'];
|
||||
}
|
||||
if ($item['type'] === 'vmess') {
|
||||
$vmessConfig = $this->buildVmess($this->user['uuid'], $item);
|
||||
$outbounds[] = $vmessConfig;
|
||||
$selector['outbounds'][] = $item['name'];
|
||||
$urltest['outbounds'][] = $item['name'];
|
||||
}
|
||||
if ($item['type'] === 'vless') {
|
||||
$vlessConfig = $this->buildVless($this->user['uuid'], $item);
|
||||
$outbounds[] = $vlessConfig;
|
||||
$selector['outbounds'][] = $item['name'];
|
||||
$urltest['outbounds'][] = $item['name'];
|
||||
} elseif ($item['type'] === 'hysteria') {
|
||||
}
|
||||
if ($item['type'] === 'hysteria') {
|
||||
$hysteriaConfig = $this->buildHysteria($this->user['uuid'], $item, $this->user);
|
||||
$outbounds[] = $hysteriaConfig;
|
||||
$tag = $item['version'] == 2 ? "Hy2" : "Hy";
|
||||
$selector['outbounds'][] = "[$tag]{$item['name']}";
|
||||
$urltest['outbounds'][] = "[$tag]{$item['name']}";
|
||||
$selector['outbounds'][] = $item['name'];
|
||||
$urltest['outbounds'][] = $item['name'];
|
||||
}
|
||||
}
|
||||
|
||||
@ -78,58 +97,184 @@ class SingBox
|
||||
return $outbounds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Vless订阅
|
||||
*/
|
||||
protected function buildShadowsocks($password, $server)
|
||||
{
|
||||
if ($server['cipher'] === '2022-blake3-aes-128-gcm') {
|
||||
$serverKey = Helper::getServerKey($server['created_at'], 16);
|
||||
$userKey = Helper::uuidToBase64($password, 16);
|
||||
$password = "{$serverKey}:{$userKey}";
|
||||
}
|
||||
if ($server['cipher'] === '2022-blake3-aes-256-gcm') {
|
||||
$serverKey = Helper::getServerKey($server['created_at'], 32);
|
||||
$userKey = Helper::uuidToBase64($password, 32);
|
||||
$password = "{$serverKey}:{$userKey}";
|
||||
}
|
||||
$array = [];
|
||||
$array['tag'] = $server['name'];
|
||||
$array['type'] = 'shadowsocks';
|
||||
$array['server'] = $server['host'];
|
||||
$array['server_port'] = $server['port'];
|
||||
$array['method'] = $server['cipher'];
|
||||
$array['password'] = $password;
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
|
||||
protected function buildVmess($uuid, $server)
|
||||
{
|
||||
$array = [];
|
||||
$array['tag'] = $server['name'];
|
||||
$array['type'] = 'vmess';
|
||||
$array['server'] = $server['host'];
|
||||
$array['server_port'] = $server['port'];
|
||||
$array['uuid'] = $uuid;
|
||||
$array['security'] = 'auto';
|
||||
$array['alterId'] = 0;
|
||||
$array['transport']= [];
|
||||
|
||||
if ($server['tls']) {
|
||||
$tlsConfig = [];
|
||||
$tlsConfig['enabled'] = true;
|
||||
if ($server['tlsSettings']) {
|
||||
$tlsSettings = $server['tlsSettings'] ?? [];
|
||||
$tlsConfig['insecure'] = $tlsSettings['allowInsecure'] ? true : false;
|
||||
$tlsConfig['server_name'] = $tlsSettings['serverName'] ?? null;
|
||||
}
|
||||
$array['tls'] = $tlsConfig;
|
||||
}
|
||||
if ($server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['networkSettings'];
|
||||
if (isset($tcpSettings['header']['type']) && $tcpSettings['header']['type'] == 'http') $array['transport']['type'] = $tcpSettings['header']['type'];
|
||||
if (isset($tcpSettings['header']['request']['path'])) $array['transport']['path'] = $tcpSettings['header']['request']['path'];
|
||||
}
|
||||
if ($server['network'] === 'ws') {
|
||||
$array['transport']['type'] ='ws';
|
||||
if ($server['networkSettings']) {
|
||||
$wsSettings = $server['networkSettings'];
|
||||
if (isset($wsSettings['path']) && !empty($wsSettings['path'])) $array['transport']['path'] = $wsSettings['path'];
|
||||
if (isset($wsSettings['headers']['Host']) && !empty($wsSettings['headers']['Host'])) $array['transport']['headers'] = ['Host' => array($wsSettings['headers']['Host'])];
|
||||
$array['transport']['max_early_data'] = 2048;
|
||||
$array['transport']['early_data_header_name'] = 'Sec-WebSocket-Protocol';
|
||||
}
|
||||
}
|
||||
if ($server['network'] === 'grpc') {
|
||||
$array['transport']['type'] ='grpc';
|
||||
if ($server['networkSettings']) {
|
||||
$grpcSettings = $server['networkSettings'];
|
||||
if (isset($grpcSettings['serviceName'])) $array['transport']['service_name'] = $grpcSettings['serviceName'];
|
||||
}
|
||||
}
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
protected function buildVless($password, $server)
|
||||
{
|
||||
$array = [
|
||||
"type" => "vless",
|
||||
"tag" => $server['name'],
|
||||
"server" => $server['host'],
|
||||
"server_port" => $server['port'],
|
||||
"uuid" => $password,
|
||||
"packet_encoding" => "xudp"
|
||||
];
|
||||
|
||||
$tlsSettings = $server['tls_settings'] ?? [];
|
||||
$tlsConfig = [];
|
||||
|
||||
if ($server['tls']) {
|
||||
$tlsConfig = [];
|
||||
$tlsConfig['enabled'] = true;
|
||||
|
||||
switch ($server['tls']) {
|
||||
case 1:
|
||||
$tlsConfig['insecure'] = (bool) ($tlsSettings['allowInsecure'] ?? false);
|
||||
$tlsConfig['server_name'] = $tlsSettings['serverName'] ?? null;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
$tlsConfig['insecure'] = (bool) ($tlsSettings['allowInsecure'] ?? false);
|
||||
$array['flow'] = !empty($server['flow']) ? $server['flow'] : "";
|
||||
$tlsSettings = $server['tls_settings'] ?? [];
|
||||
if ($server['tls_settings']) {
|
||||
$tlsConfig['insecure'] = isset($tlsSettings['allow_insecure']) && $tlsSettings['allow_insecure'] == 1 ? true : false;
|
||||
$tlsConfig['server_name'] = $tlsSettings['server_name'] ?? null;
|
||||
|
||||
if (
|
||||
isset($tlsSettings['public_key'], $tlsSettings['short_id']) &&
|
||||
!empty($tlsSettings['server_name'])
|
||||
) {
|
||||
if ($server['tls'] == 2) {
|
||||
$tlsConfig['reality'] = [
|
||||
'enabled' => true,
|
||||
'public_key' => $tlsSettings['public_key'],
|
||||
'short_id' => $tlsSettings['short_id']
|
||||
];
|
||||
|
||||
}
|
||||
$fingerprints = ['chrome', 'firefox', 'safari', 'ios', 'edge', 'qq'];
|
||||
$tlsConfig['utls'] = [
|
||||
"enabled" => true,
|
||||
"fingerprint" => $fingerprints[array_rand($fingerprints)]
|
||||
];
|
||||
}
|
||||
break;
|
||||
$array['tls'] = $tlsConfig;
|
||||
}
|
||||
|
||||
if ($server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['network_settings'];
|
||||
if (isset($tcpSettings['header']['type']) && $tcpSettings['header']['type'] == 'http') $array['transport']['type'] = $tcpSettings['header']['type'];
|
||||
if (isset($tcpSettings['header']['request']['path'])) $array['transport']['path'] = $tcpSettings['header']['request']['path'];
|
||||
}
|
||||
if ($server['network'] === 'ws') {
|
||||
$array['transport']['type'] ='ws';
|
||||
if ($server['network_settings']) {
|
||||
$wsSettings = $server['network_settings'];
|
||||
if (isset($wsSettings['path']) && !empty($wsSettings['path'])) $array['transport']['path'] = $wsSettings['path'];
|
||||
if (isset($wsSettings['headers']['Host']) && !empty($wsSettings['headers']['Host'])) $array['transport']['headers'] = ['Host' => array($wsSettings['headers']['Host'])];
|
||||
$array['transport']['max_early_data'] = 2048;
|
||||
$array['transport']['early_data_header_name'] = 'Sec-WebSocket-Protocol';
|
||||
}
|
||||
}
|
||||
if ($server['network'] === 'grpc') {
|
||||
$array['transport']['type'] ='grpc';
|
||||
if ($server['network_settings']) {
|
||||
$grpcSettings = $server['network_settings'];
|
||||
if (isset($grpcSettings['serviceName'])) $array['transport']['service_name'] = $grpcSettings['serviceName'];
|
||||
}
|
||||
}
|
||||
if ($server['network'] === 'h2') {
|
||||
$array['transport']['type'] = 'http';
|
||||
if ($server['network_settings']) {
|
||||
$h2Settings = $server['network_settings'];
|
||||
if (isset($h2Settings['host'])) $array['transport']['host'] = array($h2Settings['host']);
|
||||
if (isset($h2Settings['path'])) $array['transport']['path'] = $h2Settings['path'];
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
"type" => "vless",
|
||||
"tag" => $server['name'],
|
||||
"server" => $server['host'],
|
||||
"server_port" => $server['port'],
|
||||
"uuid" => $password,
|
||||
"flow" => $server['flow'],
|
||||
"packet_encoding" => "xudp",
|
||||
"tls" => $tlsConfig
|
||||
return $array;
|
||||
}
|
||||
|
||||
protected function buildTrojan($password, $server)
|
||||
{
|
||||
$array = [];
|
||||
$array['tag'] = $server['name'];
|
||||
$array['type'] = 'trojan';
|
||||
$array['server'] = $server['host'];
|
||||
$array['server_port'] = $server['port'];
|
||||
$array['password'] = $password;
|
||||
|
||||
$array['tls'] = [
|
||||
'enabled' => true,
|
||||
'insecure' => $server['allow_insecure'] ? true : false,
|
||||
'server_name' => $server['server_name']
|
||||
];
|
||||
|
||||
if(in_array($server['network'], ["grpc", "ws"])){
|
||||
$array['transport']['type'] = $server['network'];
|
||||
// grpc配置
|
||||
if($server['network'] === "grpc" && isset($server['networkSettings']['serviceName'])) {
|
||||
$array['transport']['service_name'] = $server['networkSettings']['serviceName'];
|
||||
}
|
||||
// ws配置
|
||||
if($server['network'] === "ws") {
|
||||
if(isset($server['networkSettings']['path'])) {
|
||||
$array['transport']['path'] = $server['networkSettings']['path'];
|
||||
}
|
||||
if(isset($server['networkSettings']['headers']['Host'])){
|
||||
$array['transport']['headers'] = ['Host' => array($server['networkSettings']['headers']['Host'])];
|
||||
}
|
||||
$array['transport']['max_early_data'] = 2048;
|
||||
$array['transport']['early_data_header_name'] = 'Sec-WebSocket-Protocol';
|
||||
}
|
||||
};
|
||||
|
||||
return $array;
|
||||
}
|
||||
|
||||
protected function buildHysteria($password, $server, $user)
|
||||
@ -137,8 +282,6 @@ class SingBox
|
||||
$array = [
|
||||
'server' => $server['host'],
|
||||
'server_port' => $server['port'],
|
||||
//'up_mbps' => $user->speed_limit ? min($server['up_mbps'], $user->speed_limit) : $server['up_mbps'],
|
||||
//'down_mbps' => $user->speed_limit ? min($server['down_mbps'], $user->speed_limit) : $server['down_mbps'],
|
||||
'tls' => [
|
||||
'enabled' => true,
|
||||
'insecure' => $server['insecure'] ? true : false,
|
||||
@ -148,19 +291,19 @@ class SingBox
|
||||
|
||||
if ($server['version'] == 1) {
|
||||
$array['auth_str'] = $password;
|
||||
$array['tag'] = "[Hy]" . $server['name'];
|
||||
$array['tag'] = $server['name'];
|
||||
$array['type'] = 'hysteria';
|
||||
$array['up_mbps'] = $user->speed_limit ? min($server['down_mbps'], $user->speed_limit) : $server['down_mbps'];
|
||||
$array['down_mbps'] = $user->speed_limit ? min($server['up_mbps'], $user->speed_limit) : $server['up_mbps'];
|
||||
if ($server['is_obfs']) {
|
||||
$array['obfs'] = $server['server_key'];
|
||||
if (isset($server['obfs']) && isset($server['obfs_password'])) {
|
||||
$array['obfs'] = $server['obfs_password'];
|
||||
}
|
||||
|
||||
$array['disable_mtu_discovery'] = true;
|
||||
$array['tls']['alpn'] = [ServerHysteria::$alpnMap[$server['alpn']]];
|
||||
|
||||
} elseif ($server['version'] == 2) {
|
||||
$array['password'] = $password;
|
||||
$array['tag'] = "[Hy2]" . $server['name'];
|
||||
$array['tag'] = $server['name'];
|
||||
$array['type'] = 'hysteria2';
|
||||
$array['password'] = $password;
|
||||
|
||||
|
@ -116,6 +116,7 @@ class V2rayN
|
||||
"mode" => "gun",
|
||||
"security" => $server['tls'] !=0 ? ($server['tls'] == 2 ? "reality":"tls") : "",
|
||||
"flow" => $server['flow'],
|
||||
"fp" => isset($server['fingerprint']) ? $server['fingerprint'] : 'chrome',
|
||||
"sni" => "",
|
||||
"pbk" => "",
|
||||
"sid" =>"",
|
||||
@ -125,7 +126,7 @@ class V2rayN
|
||||
$output .= "?" . "type={$config['type']}" . "&encryption={$config['encryption']}" . "&security={$config['security']}";
|
||||
|
||||
if ($server['tls']) {
|
||||
if ($config['flow'] !="") $output .= "&flow={$config['flow']}";
|
||||
if ($config['flow'] != "") $output .= "&flow={$config['flow']}";
|
||||
if ($server['tls_settings']) {
|
||||
$tlsSettings = $server['tls_settings'];
|
||||
if (isset($tlsSettings['server_name']) && !empty($tlsSettings['server_name'])) $config['sni'] = $tlsSettings['server_name'];
|
||||
@ -140,7 +141,8 @@ class V2rayN
|
||||
if ((string)$server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['network_settings'];
|
||||
if (isset($tcpSettings['header']['type'])) $config['headerType'] = $tcpSettings['header']['type'];
|
||||
$output .= "&headerType={$config['headerType']}";
|
||||
if (isset($tcpSettings['header']['request']['path'])) $config['path'] = $tcpSettings['header']['request']['path'];
|
||||
$output .= "&headerType={$config['headerType']}" . "&seed={$config['path']}";
|
||||
}
|
||||
if ((string)$server['network'] === 'kcp') {
|
||||
$kcpSettings = $server['network_settings'];
|
||||
@ -177,7 +179,8 @@ class V2rayN
|
||||
if (isset($grpcSettings['multiMode'])) $config['mode'] = $grpcSettings['multiMode'] ? "multi" : "gun";
|
||||
$output .= "&serviceName={$config['serviceName']}" . "&mode={$config['mode']}";
|
||||
}
|
||||
$output .= "&fp=chrome" . "#" . $config['name'];
|
||||
|
||||
$output .= "&fp={$config['fp']}" . "#" . $config['name'];
|
||||
|
||||
return $output . "\r\n";
|
||||
}
|
||||
@ -190,8 +193,23 @@ class V2rayN
|
||||
'peer' => $server['server_name'],
|
||||
'sni' => $server['server_name']
|
||||
]);
|
||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}#{$name}";
|
||||
$uri .= "\r\n";
|
||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}";
|
||||
if(in_array($server['network'], ["grpc", "ws"])){
|
||||
$uri .= "&type={$server['network']}";
|
||||
if($server['network'] === "grpc" && isset($server['networkSettings']['serviceName'])) {
|
||||
$uri .= "&path={$server['networkSettings']['serviceName']}";
|
||||
}
|
||||
if($server['network'] === "ws") {
|
||||
if(isset($server['networkSettings']['path'])) {
|
||||
$uri .= "&path={$server['networkSettings']['path']}";
|
||||
}
|
||||
if(isset($server['networkSettings']['headers']['Host'])) {
|
||||
$uri .= "&host={$server['networkSettings']['headers']['Host']}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$uri .= "#{$name}\r\n";
|
||||
return $uri;
|
||||
}
|
||||
|
||||
|
@ -115,6 +115,7 @@ class V2rayNG
|
||||
"mode" => "gun",
|
||||
"security" => $server['tls'] !=0 ? ($server['tls'] == 2 ? "reality":"tls") : "",
|
||||
"flow" => $server['flow'],
|
||||
"fp" => isset($server['fingerprint']) ? $server['fingerprint'] : 'chrome',
|
||||
"sni" => "",
|
||||
"pbk" => "",
|
||||
"sid" =>"",
|
||||
@ -124,7 +125,7 @@ class V2rayNG
|
||||
$output .= "?" . "type={$config['type']}" . "&encryption={$config['encryption']}" . "&security={$config['security']}";
|
||||
|
||||
if ($server['tls']) {
|
||||
if ($config['flow'] !="") $output .= "&flow={$config['flow']}";
|
||||
if ($config['flow'] != "") $output .= "&flow={$config['flow']}";
|
||||
if ($server['tls_settings']) {
|
||||
$tlsSettings = $server['tls_settings'];
|
||||
if (isset($tlsSettings['server_name']) && !empty($tlsSettings['server_name'])) $config['sni'] = $tlsSettings['server_name'];
|
||||
@ -139,7 +140,8 @@ class V2rayNG
|
||||
if ((string)$server['network'] === 'tcp') {
|
||||
$tcpSettings = $server['network_settings'];
|
||||
if (isset($tcpSettings['header']['type'])) $config['headerType'] = $tcpSettings['header']['type'];
|
||||
$output .= "&headerType={$config['headerType']}";
|
||||
if (isset($tcpSettings['header']['request']['path'])) $config['path'] = $tcpSettings['header']['request']['path'];
|
||||
$output .= "&headerType={$config['headerType']}" . "&seed={$config['path']}";
|
||||
}
|
||||
if ((string)$server['network'] === 'kcp') {
|
||||
$kcpSettings = $server['network_settings'];
|
||||
@ -176,7 +178,8 @@ class V2rayNG
|
||||
if (isset($grpcSettings['multiMode'])) $config['mode'] = $grpcSettings['multiMode'] ? "multi" : "gun";
|
||||
$output .= "&serviceName={$config['serviceName']}" . "&mode={$config['mode']}";
|
||||
}
|
||||
$output .= "&fp=chrome" . "#" . $config['name'];
|
||||
|
||||
$output .= "&fp={$config['fp']}" . "#" . $config['name'];
|
||||
|
||||
return $output . "\r\n";
|
||||
}
|
||||
@ -189,8 +192,23 @@ class V2rayNG
|
||||
'peer' => $server['server_name'],
|
||||
'sni' => $server['server_name']
|
||||
]);
|
||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}#{$name}";
|
||||
$uri .= "\r\n";
|
||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}";
|
||||
if(in_array($server['network'], ["grpc", "ws"])){
|
||||
$uri .= "&type={$server['network']}";
|
||||
if($server['network'] === "grpc" && isset($server['networkSettings']['serviceName'])) {
|
||||
$uri .= "&path={$server['networkSettings']['serviceName']}";
|
||||
}
|
||||
if($server['network'] === "ws") {
|
||||
if(isset($server['networkSettings']['path'])) {
|
||||
$uri .= "&path={$server['networkSettings']['path']}";
|
||||
}
|
||||
if(isset($server['networkSettings']['headers']['Host'])) {
|
||||
$uri .= "&host={$server['networkSettings']['headers']['Host']}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$uri .= "#{$name}\r\n";
|
||||
return $uri;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user