mirror of
https://github.com/v2board/v2board.git
synced 2025-03-15 15:05:22 +08:00
完善VLESS对接和部分客户端订阅链接
This commit is contained in:
parent
24205f60f5
commit
437dbffe11
@ -23,6 +23,7 @@ class ManageController extends Controller
|
|||||||
$params = $request->only(
|
$params = $request->only(
|
||||||
'shadowsocks',
|
'shadowsocks',
|
||||||
'vmess',
|
'vmess',
|
||||||
|
'vless',
|
||||||
'trojan',
|
'trojan',
|
||||||
'hysteria'
|
'hysteria'
|
||||||
) ?? [];
|
) ?? [];
|
||||||
|
@ -8,6 +8,7 @@ use App\Models\Order;
|
|||||||
use App\Models\ServerShadowsocks;
|
use App\Models\ServerShadowsocks;
|
||||||
use App\Models\ServerTrojan;
|
use App\Models\ServerTrojan;
|
||||||
use App\Models\ServerVmess;
|
use App\Models\ServerVmess;
|
||||||
|
use App\Models\ServerVless;
|
||||||
use App\Models\Stat;
|
use App\Models\Stat;
|
||||||
use App\Models\StatServer;
|
use App\Models\StatServer;
|
||||||
use App\Models\StatUser;
|
use App\Models\StatUser;
|
||||||
@ -99,7 +100,8 @@ class StatController extends Controller
|
|||||||
'shadowsocks' => ServerShadowsocks::where('parent_id', null)->get()->toArray(),
|
'shadowsocks' => ServerShadowsocks::where('parent_id', null)->get()->toArray(),
|
||||||
'v2ray' => ServerVmess::where('parent_id', null)->get()->toArray(),
|
'v2ray' => ServerVmess::where('parent_id', null)->get()->toArray(),
|
||||||
'trojan' => ServerTrojan::where('parent_id', null)->get()->toArray(),
|
'trojan' => ServerTrojan::where('parent_id', null)->get()->toArray(),
|
||||||
'vmess' => ServerVmess::where('parent_id', null)->get()->toArray()
|
'vmess' => ServerVmess::where('parent_id', null)->get()->toArray(),
|
||||||
|
'vless' => ServerVless::where('parent_id', null)->get()->toArray()
|
||||||
];
|
];
|
||||||
$startAt = strtotime('-1 day', strtotime(date('Y-m-d')));
|
$startAt = strtotime('-1 day', strtotime(date('Y-m-d')));
|
||||||
$endAt = strtotime(date('Y-m-d'));
|
$endAt = strtotime(date('Y-m-d'));
|
||||||
|
@ -44,6 +44,10 @@ class ClashMeta
|
|||||||
array_push($proxy, self::buildVmess($user['uuid'], $item));
|
array_push($proxy, self::buildVmess($user['uuid'], $item));
|
||||||
array_push($proxies, $item['name']);
|
array_push($proxies, $item['name']);
|
||||||
}
|
}
|
||||||
|
if ($item['type'] === 'vless') {
|
||||||
|
array_push($proxy, self::buildVless($user['uuid'], $item));
|
||||||
|
array_push($proxies, $item['name']);
|
||||||
|
}
|
||||||
if ($item['type'] === 'trojan') {
|
if ($item['type'] === 'trojan') {
|
||||||
array_push($proxy, self::buildTrojan($user['uuid'], $item));
|
array_push($proxy, self::buildTrojan($user['uuid'], $item));
|
||||||
array_push($proxies, $item['name']);
|
array_push($proxies, $item['name']);
|
||||||
@ -160,6 +164,34 @@ class ClashMeta
|
|||||||
return $array;
|
return $array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function buildVless($uuid, $server)
|
||||||
|
{
|
||||||
|
$array = [];
|
||||||
|
$array['name'] = $server['name'];
|
||||||
|
$array['type'] = 'vless';
|
||||||
|
$array['server'] = $server['host'];
|
||||||
|
$array['port'] = $server['port'];
|
||||||
|
$array['uuid'] = $uuid;
|
||||||
|
$array['flow'] = $server['flow'];
|
||||||
|
$array['client-fingerprint'] = 'chrome';
|
||||||
|
$array['udp'] = true;
|
||||||
|
|
||||||
|
if ($server['tls']) {
|
||||||
|
$array['tls'] = true;
|
||||||
|
if ($server['tls_settings']) {
|
||||||
|
$tlsSettings = $server['tls_settings'];
|
||||||
|
if (isset($tlsSettings['server_name']) && !empty($tlsSettings['server_name']))
|
||||||
|
$array['servername'] = $tlsSettings['server_name'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($server['network'] === 'tcp') {
|
||||||
|
$tcpSettings = $server['network_settings'];
|
||||||
|
}
|
||||||
|
//ws和grpc需要继续修
|
||||||
|
return $array;
|
||||||
|
}
|
||||||
|
|
||||||
public static function buildTrojan($password, $server)
|
public static function buildTrojan($password, $server)
|
||||||
{
|
{
|
||||||
$array = [];
|
$array = [];
|
||||||
|
@ -27,6 +27,9 @@ class General
|
|||||||
if ($item['type'] === 'vmess') {
|
if ($item['type'] === 'vmess') {
|
||||||
$uri .= self::buildVmess($user['uuid'], $item);
|
$uri .= self::buildVmess($user['uuid'], $item);
|
||||||
}
|
}
|
||||||
|
if ($item['type'] === 'vless') {
|
||||||
|
$uri .= self::buildVless($user['uuid'], $item);
|
||||||
|
}
|
||||||
if ($item['type'] === 'shadowsocks') {
|
if ($item['type'] === 'shadowsocks') {
|
||||||
$uri .= self::buildShadowsocks($user['uuid'], $item);
|
$uri .= self::buildShadowsocks($user['uuid'], $item);
|
||||||
}
|
}
|
||||||
@ -97,6 +100,48 @@ class General
|
|||||||
return "vmess://" . base64_encode(json_encode($config)) . "\r\n";
|
return "vmess://" . base64_encode(json_encode($config)) . "\r\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function buildVless($uuid, $server)
|
||||||
|
{
|
||||||
|
$config = [
|
||||||
|
"v" => "2",
|
||||||
|
"ps" => $server['name'],
|
||||||
|
"add" => $server['host'],
|
||||||
|
"port" => (string)$server['port'],
|
||||||
|
"id" => $uuid,
|
||||||
|
"aid" => '0',
|
||||||
|
"net" => $server['network'],
|
||||||
|
"type" => "none",
|
||||||
|
"host" => "",
|
||||||
|
"path" => "",
|
||||||
|
"tls" => $server['tls'] ? "tls" : "",
|
||||||
|
"flow" => $server['flow'],
|
||||||
|
"sni" => "",
|
||||||
|
];
|
||||||
|
if ($server['tls']) {
|
||||||
|
if ($server['tls_settings']) {
|
||||||
|
$tlsSettings = $server['tls_settings'];
|
||||||
|
if (isset($tlsSettings['serverName']) && !empty($tlsSettings['serverName']))
|
||||||
|
$config['sni'] = $tlsSettings['serverName'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((string)$server['network'] === 'tcp') {
|
||||||
|
$tcpSettings = $server['network_settings'];
|
||||||
|
if (isset($tcpSettings['header']['type'])) $config['type'] = $tcpSettings['header']['type'];
|
||||||
|
if (isset($tcpSettings['header']['request']['path'][0])) $config['path'] = $tcpSettings['header']['request']['path'][0];
|
||||||
|
}
|
||||||
|
if ((string)$server['network'] === 'ws') {
|
||||||
|
$wsSettings = $server['network_settings'];
|
||||||
|
if (isset($wsSettings['path'])) $config['path'] = $wsSettings['path'];
|
||||||
|
if (isset($wsSettings['headers']['Host'])) $config['host'] = $wsSettings['headers']['Host'];
|
||||||
|
}
|
||||||
|
if ((string)$server['network'] === 'grpc') {
|
||||||
|
$grpcSettings = $server['network_settings'];
|
||||||
|
if (isset($grpcSettings['serviceName'])) $config['path'] = $grpcSettings['serviceName'];
|
||||||
|
}
|
||||||
|
//reality需要继续修
|
||||||
|
return "vless://{$uuid}@{$server['host']}:{$server['port']}?security={$config['tls']}&encryption=none&headerType={$config['type']}&type={$server['network']}&flow={$server['flow']}&fp=chrome#${server['name']}" . "\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
public static function buildTrojan($password, $server)
|
public static function buildTrojan($password, $server)
|
||||||
{
|
{
|
||||||
$name = rawurlencode($server['name']);
|
$name = rawurlencode($server['name']);
|
||||||
|
@ -35,6 +35,9 @@ class Shadowrocket
|
|||||||
if ($item['type'] === 'vmess') {
|
if ($item['type'] === 'vmess') {
|
||||||
$uri .= self::buildVmess($user['uuid'], $item);
|
$uri .= self::buildVmess($user['uuid'], $item);
|
||||||
}
|
}
|
||||||
|
if ($item['type'] === 'vless') {
|
||||||
|
$uri .= self::buildVless($user['uuid'], $item);
|
||||||
|
}
|
||||||
if ($item['type'] === 'trojan') {
|
if ($item['type'] === 'trojan') {
|
||||||
$uri .= self::buildTrojan($user['uuid'], $item);
|
$uri .= self::buildTrojan($user['uuid'], $item);
|
||||||
}
|
}
|
||||||
@ -120,6 +123,48 @@ class Shadowrocket
|
|||||||
return $uri;
|
return $uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function buildVless($uuid, $server)
|
||||||
|
{
|
||||||
|
$config = [
|
||||||
|
"v" => "2",
|
||||||
|
"ps" => $server['name'],
|
||||||
|
"add" => $server['host'],
|
||||||
|
"port" => (string)$server['port'],
|
||||||
|
"id" => $uuid,
|
||||||
|
"aid" => '0',
|
||||||
|
"net" => $server['network'],
|
||||||
|
"type" => "none",
|
||||||
|
"host" => "",
|
||||||
|
"path" => "",
|
||||||
|
"tls" => $server['tls'] ? "tls" : "",
|
||||||
|
"flow" => $server['flow'],
|
||||||
|
"sni" => "",
|
||||||
|
];
|
||||||
|
if ($server['tls']) {
|
||||||
|
if ($server['tls_settings']) {
|
||||||
|
$tlsSettings = $server['tls_settings'];
|
||||||
|
if (isset($tlsSettings['serverName']) && !empty($tlsSettings['serverName']))
|
||||||
|
$config['sni'] = $tlsSettings['serverName'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((string)$server['network'] === 'tcp') {
|
||||||
|
$tcpSettings = $server['network_settings'];
|
||||||
|
if (isset($tcpSettings['header']['type'])) $config['type'] = $tcpSettings['header']['type'];
|
||||||
|
if (isset($tcpSettings['header']['request']['path'][0])) $config['path'] = $tcpSettings['header']['request']['path'][0];
|
||||||
|
}
|
||||||
|
if ((string)$server['network'] === 'ws') {
|
||||||
|
$wsSettings = $server['network_settings'];
|
||||||
|
if (isset($wsSettings['path'])) $config['path'] = $wsSettings['path'];
|
||||||
|
if (isset($wsSettings['headers']['Host'])) $config['host'] = $wsSettings['headers']['Host'];
|
||||||
|
}
|
||||||
|
if ((string)$server['network'] === 'grpc') {
|
||||||
|
$grpcSettings = $server['network_settings'];
|
||||||
|
if (isset($grpcSettings['serviceName'])) $config['path'] = $grpcSettings['serviceName'];
|
||||||
|
}
|
||||||
|
//realit继续修
|
||||||
|
return "vless://{$uuid}@{$server['host']}:{$server['port']}?security={$config['tls']}&encryption=none&headerType={$config['type']}&type={$server['network']}&flow={$server['flow']}&fp=chrome#${server['name']}" . "\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
public static function buildTrojan($password, $server)
|
public static function buildTrojan($password, $server)
|
||||||
{
|
{
|
||||||
$name = rawurlencode($server['name']);
|
$name = rawurlencode($server['name']);
|
||||||
|
@ -30,6 +30,9 @@ class V2rayN
|
|||||||
if ($item['type'] === 'shadowsocks') {
|
if ($item['type'] === 'shadowsocks') {
|
||||||
$uri .= self::buildShadowsocks($user['uuid'], $item);
|
$uri .= self::buildShadowsocks($user['uuid'], $item);
|
||||||
}
|
}
|
||||||
|
if ($item['type'] === 'vless') {
|
||||||
|
$uri .= self::buildVless($user['uuid'], $item);
|
||||||
|
}
|
||||||
if ($item['type'] === 'trojan') {
|
if ($item['type'] === 'trojan') {
|
||||||
$uri .= self::buildTrojan($user['uuid'], $item);
|
$uri .= self::buildTrojan($user['uuid'], $item);
|
||||||
}
|
}
|
||||||
@ -97,6 +100,48 @@ class V2rayN
|
|||||||
return "vmess://" . base64_encode(json_encode($config)) . "\r\n";
|
return "vmess://" . base64_encode(json_encode($config)) . "\r\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function buildVless($uuid, $server)
|
||||||
|
{
|
||||||
|
$config = [
|
||||||
|
"v" => "2",
|
||||||
|
"ps" => $server['name'],
|
||||||
|
"add" => $server['host'],
|
||||||
|
"port" => (string)$server['port'],
|
||||||
|
"id" => $uuid,
|
||||||
|
"aid" => '0',
|
||||||
|
"net" => $server['network'],
|
||||||
|
"type" => "none",
|
||||||
|
"host" => "",
|
||||||
|
"path" => "",
|
||||||
|
"tls" => $server['tls'] ? "tls" : "",
|
||||||
|
"flow" => $server['flow'],
|
||||||
|
"sni" => "",
|
||||||
|
];
|
||||||
|
if ($server['tls']) {
|
||||||
|
if ($server['tls_settings']) {
|
||||||
|
$tlsSettings = $server['tls_settings'];
|
||||||
|
if (isset($tlsSettings['serverName']) && !empty($tlsSettings['serverName']))
|
||||||
|
$config['sni'] = $tlsSettings['serverName'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((string)$server['network'] === 'tcp') {
|
||||||
|
$tcpSettings = $server['network_settings'];
|
||||||
|
if (isset($tcpSettings['header']['type'])) $config['type'] = $tcpSettings['header']['type'];
|
||||||
|
if (isset($tcpSettings['header']['request']['path'][0])) $config['path'] = $tcpSettings['header']['request']['path'][0];
|
||||||
|
}
|
||||||
|
if ((string)$server['network'] === 'ws') {
|
||||||
|
$wsSettings = $server['network_settings'];
|
||||||
|
if (isset($wsSettings['path'])) $config['path'] = $wsSettings['path'];
|
||||||
|
if (isset($wsSettings['headers']['Host'])) $config['host'] = $wsSettings['headers']['Host'];
|
||||||
|
}
|
||||||
|
if ((string)$server['network'] === 'grpc') {
|
||||||
|
$grpcSettings = $server['network_settings'];
|
||||||
|
if (isset($grpcSettings['serviceName'])) $config['path'] = $grpcSettings['serviceName'];
|
||||||
|
}
|
||||||
|
//reality继续修
|
||||||
|
return "vless://{$uuid}@{$server['host']}:{$server['port']}?security={$config['tls']}&encryption=none&headerType={$config['type']}&type={$server['network']}&flow={$server['flow']}&fp=chrome#${server['name']}" . "\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
public static function buildTrojan($password, $server)
|
public static function buildTrojan($password, $server)
|
||||||
{
|
{
|
||||||
$name = rawurlencode($server['name']);
|
$name = rawurlencode($server['name']);
|
||||||
|
@ -25,6 +25,9 @@ class V2rayNG
|
|||||||
if ($item['type'] === 'vmess') {
|
if ($item['type'] === 'vmess') {
|
||||||
$uri .= self::buildVmess($user['uuid'], $item);
|
$uri .= self::buildVmess($user['uuid'], $item);
|
||||||
}
|
}
|
||||||
|
if ($item['type'] === 'vless') {
|
||||||
|
$uri .= self::buildVless($user['uuid'], $item);
|
||||||
|
}
|
||||||
if ($item['type'] === 'shadowsocks') {
|
if ($item['type'] === 'shadowsocks') {
|
||||||
$uri .= self::buildShadowsocks($user['uuid'], $item);
|
$uri .= self::buildShadowsocks($user['uuid'], $item);
|
||||||
}
|
}
|
||||||
@ -85,6 +88,49 @@ class V2rayNG
|
|||||||
return "vmess://" . base64_encode(json_encode($config)) . "\r\n";
|
return "vmess://" . base64_encode(json_encode($config)) . "\r\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function buildVless($uuid, $server)
|
||||||
|
{
|
||||||
|
$config = [
|
||||||
|
"v" => "2",
|
||||||
|
"ps" => $server['name'],
|
||||||
|
"add" => $server['host'],
|
||||||
|
"port" => (string)$server['port'],
|
||||||
|
"id" => $uuid,
|
||||||
|
"aid" => '0',
|
||||||
|
"net" => $server['network'],
|
||||||
|
"type" => "none",
|
||||||
|
"host" => "",
|
||||||
|
"path" => "",
|
||||||
|
"tls" => $server['tls'] ? "tls" : "",
|
||||||
|
"flow" => $server['flow'],
|
||||||
|
"sni" => "",
|
||||||
|
];
|
||||||
|
if ($server['tls']) {
|
||||||
|
if ($server['tls_settings']) {
|
||||||
|
$tlsSettings = $server['tls_settings'];
|
||||||
|
if (isset($tlsSettings['serverName']) && !empty($tlsSettings['serverName']))
|
||||||
|
$config['sni'] = $tlsSettings['serverName'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((string)$server['network'] === 'tcp') {
|
||||||
|
$tcpSettings = $server['network_settings'];
|
||||||
|
if (isset($tcpSettings['header']['type'])) $config['type'] = $tcpSettings['header']['type'];
|
||||||
|
if (isset($tcpSettings['header']['request']['path'][0])) $config['path'] = $tcpSettings['header']['request']['path'][0];
|
||||||
|
}
|
||||||
|
if ((string)$server['network'] === 'ws') {
|
||||||
|
$wsSettings = $server['network_settings'];
|
||||||
|
if (isset($wsSettings['path'])) $config['path'] = $wsSettings['path'];
|
||||||
|
if (isset($wsSettings['headers']['Host'])) $config['host'] = $wsSettings['headers']['Host'];
|
||||||
|
}
|
||||||
|
if ((string)$server['network'] === 'grpc') {
|
||||||
|
$grpcSettings = $server['network_settings'];
|
||||||
|
if (isset($grpcSettings['serviceName'])) $config['path'] = $grpcSettings['serviceName'];
|
||||||
|
}
|
||||||
|
//reality继续修
|
||||||
|
return "vless://{$uuid}@{$server['host']}:{$server['port']}?security={$config['tls']}&encryption=none&headerType={$config['type']}&type={$server['network']}&flow={$server['flow']}&fp=chrome#${server['name']}" . "\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static function buildTrojan($password, $server)
|
public static function buildTrojan($password, $server)
|
||||||
{
|
{
|
||||||
$name = rawurlencode($server['name']);
|
$name = rawurlencode($server['name']);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user