mirror of
https://github.com/lush2020/edgetunnel.git
synced 2026-03-21 08:52:43 +08:00
feat: 优化 SOCKS5 地址解析,支持 IPv6 地址带端口格式
This commit is contained in:
19
_worker.js
19
_worker.js
@@ -1217,15 +1217,24 @@ function socks5AddressParser(address) {
|
||||
|
||||
// 解析服务器地址部分
|
||||
const latters = latter.split(":");
|
||||
// 从末尾提取端口号(因为 IPv6 地址中也包含冒号)
|
||||
port = Number(latters.pop().replace(/[^\d]/g, ''));
|
||||
// 检查是否是IPv6地址带端口格式 [xxx]:port
|
||||
if (latters.length > 2 && latter.includes("]:")) {
|
||||
// IPv6地址带端口格式:[2001:db8::1]:8080
|
||||
port = Number(latter.split("]:")[1].replace(/[^\d]/g, ''));
|
||||
hostname = latter.split("]:")[0] + "]"; // 正确提取hostname部分
|
||||
} else if (latters.length === 2) {
|
||||
// IPv4地址带端口或域名带端口
|
||||
port = Number(latters.pop().replace(/[^\d]/g, ''));
|
||||
hostname = latters.join(":");
|
||||
} else {
|
||||
port = 80;
|
||||
hostname = latter;
|
||||
}
|
||||
|
||||
if (isNaN(port)) {
|
||||
throw new Error('无效的 SOCKS 地址格式:端口号必须是数字');
|
||||
}
|
||||
|
||||
// 剩余部分就是主机名(可能是域名、IPv4 或 IPv6 地址)
|
||||
hostname = latters.join(":");
|
||||
|
||||
// 处理 IPv6 地址的特殊情况
|
||||
// IPv6 地址包含多个冒号,所以必须用方括号括起来,如 [2001:db8::1]
|
||||
const regex = /^\[.*\]$/;
|
||||
|
||||
Reference in New Issue
Block a user