123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- <?php
- namespace App\Components\Client;
- use App\Models\Server;
- class URLSchemes
- {
- public static function buildShadowsocks($server)
- {
- $name = rawurlencode($server['name']);
- $str = base64url_encode("{$server['method']}:{$server['passwd']}");
- return "ss://{$str}@{$server['host']}:{$server['port']}#{$name}".PHP_EOL;
- }
- public static function buildShadowsocksr($server)
- {
- $setting = "{$server['host']}:{$server['port']}:{$server['protocol']}:{$server['method']}:{$server['obfs']}:";
- return 'ssr://'.base64url_encode($setting.base64url_encode($server['passwd']).'/?obfsparam='.base64url_encode($server['obfs_param']).'&protoparam='.base64url_encode($server['protocol_param']).'&remarks='.base64url_encode($server['name']).'&group='.base64url_encode($server['group']).'&udpport='.$server['udp'].'&uot=0').PHP_EOL;
- }
- // TODO: More study required about id usage https://shadowsocks.org/en/wiki/SIP008-Online-Configuration-Delivery.html
- public static function buildShadowsocksSIP008($server)
- {
- $config = [
- 'id' => $server['id'],
- 'remark' => $server['name'],
- 'server' => $server['host'],
- 'server_port' => $server['port'],
- 'password' => $server['passwd'],
- 'method' => $server['method'],
- ];
- return $config;
- }
- public static function buildVmess($server)
- {
- $config = [
- 'v' => '2',
- 'ps' => $server['name'],
- 'add' => $server['host'],
- 'port' => $server['port'],
- 'id' => $server['uuid'],
- 'aid' => $server['v2_alter_id'],
- 'net' => $server['v2_net'],
- 'type' => $server['v2_type'],
- 'host' => $server['v2_host'],
- 'path' => $server['v2_path'],
- 'tls' => $server['v2_tls'],
- 'sni' => $server['v2_sni'],
- ];
- return 'vmess://'.base64_encode(json_encode($config)).PHP_EOL;
- }
- //vless://6478f959-c97c-43a2-a7de-256167db0f70@93.179.124.145:51510?encryption=none&flow=xtls-rprx-vision&security=reality&sni=www.amazon.com&fp=chrome&pbk=qhTzYYIgBzDLNYR79oxftqdo1kzL-1_hGJKfqrOliCY&type=tcp&headerType=none#93.179.124.145
- //vless://459b4a80-bd61-4ecd-a26b-e9c1809d9e45@shenzhou05.mysynology.net:50452?encryption=none&flow=xtls-rprx-vision&security=reality&sni=www.amazon.com&fp=chrome&pbk=qhTzYYIgBzDLNYR79oxftqdo1kzL-1_hGJKfqrOliCY&sid=0123456789abcdef&type=tcp&headerType=none#%E6%AF%94%E5%88%A9%E6%97%B601
- public static function buildVless($server)
- {
- $config = [
- 'v' => '2',
- 'ps' => urlencode($server['name']),
- 'add' => $server['host'],
- 'port' => $server['port'],
- 'id' => $server['uuid'],
- 'aid' => $server['v2_alter_id'],
- 'net' => $server['v2_net'],
- 'type' => $server['v2_type'],
- 'host' => $server['v2_host'],
- 'path' => $server['v2_path'],
- 'tls' => $server['v2_tls'],
- 'sni' => $server['v2_sni'],
- 'flow' => 'xtls-rprx-vision',
- 'security' => 'reality',
- 'fp' => 'chrome',
- 'pbk' => 'qhTzYYIgBzDLNYR79oxftqdo1kzL-1_hGJKfqrOliCY',
- 'sid' => '0123456789abcdef',
- 'spx' => "/",
- 'headerType' => 'none',
- 'mode'=>'multi'
- ];
- // 使用数组来生成 URL
- $url = "vless://{$config['id']}@{$config['add']}:{$config['port']}?"
- . "mode={$config['mode']}"
- . "&encryption=none"
- . "&flow={$config['flow']}"
- . "&security={$config['security']}"
- . "&sni={$config['sni']}"
- . "&fp={$config['fp']}"
- . "&pbk={$config['pbk']}"
- . "&type={$config['type']}"
- . "&headerType={$config['headerType']}"
- . "#{$config['ps']}".PHP_EOL;
- return $url;
- // return 'vless://'.base64_encode(json_encode($config)).PHP_EOL;
- }
- public static function buildTrojan($server)
- {
- $name = rawurlencode($server['name']);
- $query = "?sni={$server['sni']}";
- // if (array_key_exists('relay_server', $server)) {
- // $query = "?sni={$server['sni']}";
- // }
- return "trojan://{$server['passwd']}@{$server['host']}:{$server['port']}{$query}#{$name}".PHP_EOL;
- }
- }
|