Skip to content

Commit 0bb3c17

Browse files
committed
feat: 优化 SOCKS5 地址解析,支持 IPv6 地址带端口格式
1 parent 93eabe1 commit 0bb3c17

1 file changed

Lines changed: 14 additions & 5 deletions

File tree

_worker.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,15 +1217,24 @@ function socks5AddressParser(address) {
12171217

12181218
// 解析服务器地址部分
12191219
const latters = latter.split(":");
1220-
// 从末尾提取端口号(因为 IPv6 地址中也包含冒号)
1221-
port = Number(latters.pop().replace(/[^\d]/g, ''));
1220+
// 检查是否是IPv6地址带端口格式 [xxx]:port
1221+
if (latters.length > 2 && latter.includes("]:")) {
1222+
// IPv6地址带端口格式:[2001:db8::1]:8080
1223+
port = Number(latter.split("]:")[1].replace(/[^\d]/g, ''));
1224+
hostname = latter.split("]:")[0] + "]"; // 正确提取hostname部分
1225+
} else if (latters.length === 2) {
1226+
// IPv4地址带端口或域名带端口
1227+
port = Number(latters.pop().replace(/[^\d]/g, ''));
1228+
hostname = latters.join(":");
1229+
} else {
1230+
port = 80;
1231+
hostname = latter;
1232+
}
1233+
12221234
if (isNaN(port)) {
12231235
throw new Error('无效的 SOCKS 地址格式:端口号必须是数字');
12241236
}
12251237

1226-
// 剩余部分就是主机名(可能是域名、IPv4 或 IPv6 地址)
1227-
hostname = latters.join(":");
1228-
12291238
// 处理 IPv6 地址的特殊情况
12301239
// IPv6 地址包含多个冒号,所以必须用方括号括起来,如 [2001:db8::1]
12311240
const regex = /^\[.*\]$/;

0 commit comments

Comments
 (0)