feat: 优化 SOCKS5 地址解析逻辑,增强用户认证处理

This commit is contained in:
cmliu
2025-07-11 19:12:57 +08:00
parent d08cdaf16f
commit 93eabe13a3
2 changed files with 10 additions and 9 deletions

View File

@@ -187,7 +187,7 @@ export default {
const usage = await getUsage(env.CF_ID, env.CF_EMAIL, env.CF_APIKEY, env.CF_ALL);
pagesSum = usage[1];
workersSum = usage[2];
total = 1024 * 100; // 100K
total = env.CF_ALL ? Number(env.CF_ALL) : (1024 * 100); // 100K
}
if (userAgent && userAgent.includes('mozilla')) {
return new Response(维列斯Config, {
@@ -223,12 +223,13 @@ export default {
enableHttp = url.pathname.includes('http://');
socks5Address = url.pathname.split('://')[1].split('#')[0];
if (socks5Address.includes('@')) {
let userPassword = socks5Address.split('@')[0].replaceAll('%3D', '=');
const lastAtIndex = socks5Address.lastIndexOf('@');
let userPassword = socks5Address.substring(0, lastAtIndex).replaceAll('%3D', '=');
const base64Regex = /^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i;
if (base64Regex.test(userPassword) && !userPassword.includes(':')) userPassword = atob(userPassword);
socks5Address = `${userPassword}@${socks5Address.split('@')[1]}`;
socks5Address = `${userPassword}@${socks5Address.substring(lastAtIndex + 1)}`;
}
go2Socks5s = ['all in'];
go2Socks5s = ['all in'];//开启全局SOCKS5
}
if (socks5Address) {
@@ -1201,8 +1202,8 @@ async function httpConnect(addressRemote, portRemote, log) {
*/
function socks5AddressParser(address) {
// 使用 "@" 分割地址,分为认证部分和服务器地址部分
// reverse() 是为了处理没有认证信息的情况,确保 latter 总是包含服务器地址
let [latter, former] = address.split("@").reverse();
const lastAtIndex = address.lastIndexOf("@");
let [latter, former] = lastAtIndex === -1 ? [address, undefined] : [address.substring(lastAtIndex + 1), address.substring(0, lastAtIndex)];
let username, password, hostname, port;
// 如果存在 former 部分,说明提供了认证信息
@@ -1217,7 +1218,7 @@ function socks5AddressParser(address) {
// 解析服务器地址部分
const latters = latter.split(":");
// 从末尾提取端口号(因为 IPv6 地址中也包含冒号)
port = Number(latters.pop());
port = Number(latters.pop().replace(/[^\d]/g, ''));
if (isNaN(port)) {
throw new Error('无效的 SOCKS 地址格式:端口号必须是数字');
}

View File

@@ -1,4 +1,4 @@
name = "v20250706"
name = "v20250711"
main = "_worker.js"
compatibility_date = "2025-07-06"
compatibility_date = "2025-07-11"
keep_vars = true