Skip to content

Commit 67295ae

Browse files
committed
feat: 更新 SOCKS5 地址解析逻辑以支持 IPv6 格式
1 parent 8592714 commit 67295ae

2 files changed

Lines changed: 16 additions & 7 deletions

File tree

_worker.js

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

13421342
// 解析服务器地址部分
13431343
const latters = latter.split(":");
1344-
// 从末尾提取端口号(因为 IPv6 地址中也包含冒号)
1345-
port = Number(latters.pop().replace(/[^\d]/g, ''));
1344+
// 检查是否是IPv6地址带端口格式 [xxx]:port
1345+
if (latters.length > 2 && latter.includes("]:")) {
1346+
// IPv6地址带端口格式:[2001:db8::1]:8080
1347+
port = Number(latter.split("]:")[1].replace(/[^\d]/g, ''));
1348+
hostname = latter.split("]:")[0] + "]"; // 正确提取hostname部分
1349+
} else if (latters.length === 2) {
1350+
// IPv4地址带端口或域名带端口
1351+
port = Number(latters.pop().replace(/[^\d]/g, ''));
1352+
hostname = latters.join(":");
1353+
} else {
1354+
port = 80;
1355+
hostname = latter;
1356+
}
1357+
13461358
if (isNaN(port)) {
13471359
throw new Error('无效的 SOCKS 地址格式:端口号必须是数字');
13481360
}
13491361

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

wrangler.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name = "t20250711"
1+
name = "t20250712"
22
main = "_worker.js"
3-
compatibility_date = "2025-07-11"
3+
compatibility_date = "2025-07-12"
44
keep_vars = true

0 commit comments

Comments
 (0)