mirror of
https://github.com/lkddi/Xboard.git
synced 2026-04-24 12:07:28 +08:00
Fixed: IPv6 is not properly processed
This commit is contained in:
@@ -59,7 +59,8 @@ class General implements ProtocolInterface
|
|||||||
['-', '_', ''],
|
['-', '_', ''],
|
||||||
base64_encode("{$protocol_settings['cipher']}:{$password}")
|
base64_encode("{$protocol_settings['cipher']}:{$password}")
|
||||||
);
|
);
|
||||||
return "ss://{$str}@{$server['host']}:{$server['port']}#{$name}\r\n";
|
$addr = Helper::wrapIPv6($server['host']);
|
||||||
|
return "ss://{$str}@{$addr}:{$server['port']}#{$name}\r\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function buildVmess($uuid, $server)
|
public static function buildVmess($uuid, $server)
|
||||||
@@ -172,7 +173,7 @@ class General implements ProtocolInterface
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = $uuid . '@' . $host . ':' . $port;
|
$user = $uuid . '@' . Helper::wrapIPv6($host) . ':' . $port;
|
||||||
$query = http_build_query($config);
|
$query = http_build_query($config);
|
||||||
$fragment = urlencode($name);
|
$fragment = urlencode($name);
|
||||||
$link = sprintf("vless://%s?%s#%s\r\n", $user, $query, $fragment);
|
$link = sprintf("vless://%s?%s#%s\r\n", $user, $query, $fragment);
|
||||||
@@ -207,7 +208,9 @@ class General implements ProtocolInterface
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$query = http_build_query($array);
|
$query = http_build_query($array);
|
||||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}#{$name}";
|
$addr = Helper::wrapIPv6($server['host']);
|
||||||
|
|
||||||
|
$uri = "trojan://{$password}@{$addr}:{$server['port']}?{$query}#{$name}";
|
||||||
$uri .= "\r\n";
|
$uri .= "\r\n";
|
||||||
return $uri;
|
return $uri;
|
||||||
}
|
}
|
||||||
@@ -238,8 +241,9 @@ class General implements ProtocolInterface
|
|||||||
|
|
||||||
$query = http_build_query($params);
|
$query = http_build_query($params);
|
||||||
$name = rawurlencode($server['name']);
|
$name = rawurlencode($server['name']);
|
||||||
|
$addr = Helper::wrapIPv6($server['host']);
|
||||||
|
|
||||||
$uri = "hysteria2://{$password}@{$server['host']}:{$server['port']}?{$query}#{$name}";
|
$uri = "hysteria2://{$password}@{$addr}:{$server['port']}?{$query}#{$name}";
|
||||||
$uri .= "\r\n";
|
$uri .= "\r\n";
|
||||||
|
|
||||||
return $uri;
|
return $uri;
|
||||||
|
|||||||
@@ -66,7 +66,9 @@ class Shadowrocket implements ProtocolInterface
|
|||||||
['-', '_', ''],
|
['-', '_', ''],
|
||||||
base64_encode("{$protocol_settings['cipher']}:{$password}")
|
base64_encode("{$protocol_settings['cipher']}:{$password}")
|
||||||
);
|
);
|
||||||
$uri = "ss://{$str}@{$server['host']}:{$server['port']}";
|
$addr = Helper::wrapIPv6($server['host']);
|
||||||
|
|
||||||
|
$uri = "ss://{$str}@{$addr}:{$server['port']}";
|
||||||
if ($protocol_settings['obfs'] == 'http') {
|
if ($protocol_settings['obfs'] == 'http') {
|
||||||
$obfs_host = data_get($protocol_settings, 'obfs_settings.obfs-host');
|
$obfs_host = data_get($protocol_settings, 'obfs_settings.obfs-host');
|
||||||
$obfs_path = data_get($protocol_settings, 'obfs_settings.obfs-path');
|
$obfs_path = data_get($protocol_settings, 'obfs_settings.obfs-path');
|
||||||
@@ -78,7 +80,7 @@ class Shadowrocket implements ProtocolInterface
|
|||||||
public static function buildVmess($uuid, $server)
|
public static function buildVmess($uuid, $server)
|
||||||
{
|
{
|
||||||
$protocol_settings = $server['protocol_settings'];
|
$protocol_settings = $server['protocol_settings'];
|
||||||
$userinfo = base64_encode('auto:' . $uuid . '@' . $server['host'] . ':' . $server['port']);
|
$userinfo = base64_encode('auto:' . $uuid . '@' . Helper::wrapIPv6($server['host']) . ':' . $server['port']);
|
||||||
$config = [
|
$config = [
|
||||||
'tfo' => 1,
|
'tfo' => 1,
|
||||||
'remark' => $server['name'],
|
'remark' => $server['name'],
|
||||||
@@ -124,7 +126,7 @@ class Shadowrocket implements ProtocolInterface
|
|||||||
public static function buildVless($uuid, $server)
|
public static function buildVless($uuid, $server)
|
||||||
{
|
{
|
||||||
$protocol_settings = $server['protocol_settings'];
|
$protocol_settings = $server['protocol_settings'];
|
||||||
$userinfo = base64_encode('auto:' . $uuid . '@' . $server['host'] . ':' . $server['port']);
|
$userinfo = base64_encode('auto:' . $uuid . '@' . Helper::wrapIPv6($server['host']) . ':' . $server['port']);
|
||||||
$config = [
|
$config = [
|
||||||
'tfo' => 1,
|
'tfo' => 1,
|
||||||
'remark' => $server['name'],
|
'remark' => $server['name'],
|
||||||
@@ -213,7 +215,9 @@ class Shadowrocket implements ProtocolInterface
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$query = http_build_query($params);
|
$query = http_build_query($params);
|
||||||
$uri = "trojan://{$password}@{$server['host']}:{$server['port']}?{$query}&tfo=1#{$name}";
|
$addr = Helper::wrapIPv6($server['host']);
|
||||||
|
|
||||||
|
$uri = "trojan://{$password}@{$addr}:{$server['port']}?{$query}&tfo=1#{$name}";
|
||||||
$uri .= "\r\n";
|
$uri .= "\r\n";
|
||||||
return $uri;
|
return $uri;
|
||||||
}
|
}
|
||||||
@@ -241,7 +245,9 @@ class Shadowrocket implements ProtocolInterface
|
|||||||
if (isset($server['ports']))
|
if (isset($server['ports']))
|
||||||
$params['mport'] = $server['ports'];
|
$params['mport'] = $server['ports'];
|
||||||
$query = http_build_query($params);
|
$query = http_build_query($params);
|
||||||
$uri = "hysteria://{$server['host']}:{$server['port']}?{$query}#{$server['name']}";
|
$addr = Helper::wrapIPv6($server['host']);
|
||||||
|
|
||||||
|
$uri = "hysteria://{$addr}:{$server['port']}?{$query}#{$server['name']}";
|
||||||
$uri .= "\r\n";
|
$uri .= "\r\n";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
@@ -260,7 +266,9 @@ class Shadowrocket implements ProtocolInterface
|
|||||||
if (isset($server['ports']))
|
if (isset($server['ports']))
|
||||||
$params['mport'] = $server['ports'];
|
$params['mport'] = $server['ports'];
|
||||||
$query = http_build_query($params);
|
$query = http_build_query($params);
|
||||||
$uri = "hysteria2://{$password}@{$server['host']}:{$server['port']}?{$query}#{$server['name']}";
|
$addr = Helper::wrapIPv6($server['host']);
|
||||||
|
|
||||||
|
$uri = "hysteria2://{$password}@{$addr}:{$server['port']}?{$query}#{$server['name']}";
|
||||||
$uri .= "\r\n";
|
$uri .= "\r\n";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,6 +72,14 @@ class Helper
|
|||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function wrapIPv6($addr) {
|
||||||
|
if (filter_var($addr, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
|
||||||
|
return "[$addr]";
|
||||||
|
} else {
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static function multiPasswordVerify($algo, $salt, $password, $hash)
|
public static function multiPasswordVerify($algo, $salt, $password, $hash)
|
||||||
{
|
{
|
||||||
switch($algo) {
|
switch($algo) {
|
||||||
|
|||||||
Reference in New Issue
Block a user