Fixed: IPv6 is not properly processed

This commit is contained in:
NekoCareLab
2025-03-16 14:23:58 +08:00
parent 3ccebfcff1
commit e10d10e4f1
3 changed files with 30 additions and 10 deletions
+8 -4
View File
@@ -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;
+14 -6
View File
@@ -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;
} }
+8
View File
@@ -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) {