mirror of
https://git.mirrors.martin98.com/https://github.com/sub-store-org/Sub-Store.git
synced 2025-08-11 01:29:00 +08:00
feat: 处理端口跳跃(感谢亚托莉佬)
This commit is contained in:
parent
317a804b36
commit
05bdf95a29
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "sub-store",
|
"name": "sub-store",
|
||||||
"version": "2.14.353",
|
"version": "2.14.357",
|
||||||
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.",
|
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.",
|
||||||
"main": "src/main.js",
|
"main": "src/main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -8,6 +8,7 @@ import {
|
|||||||
isValidPortNumber,
|
isValidPortNumber,
|
||||||
isNotBlank,
|
isNotBlank,
|
||||||
ipAddress,
|
ipAddress,
|
||||||
|
getRandomPort,
|
||||||
} from '@/utils';
|
} from '@/utils';
|
||||||
import PROXY_PROCESSORS, { ApplyProcessor } from './processors';
|
import PROXY_PROCESSORS, { ApplyProcessor } from './processors';
|
||||||
import PROXY_PREPROCESSORS from './preprocessors';
|
import PROXY_PREPROCESSORS from './preprocessors';
|
||||||
@ -220,6 +221,17 @@ function produce(proxies, targetPlatform, type, opts = {}) {
|
|||||||
delete proxy['tls-fingerprint'];
|
delete proxy['tls-fingerprint'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理 端口跳跃
|
||||||
|
if (proxy.ports) {
|
||||||
|
if (!['ClashMeta'].includes(targetPlatform)) {
|
||||||
|
proxy.ports = proxy.ports.replace(/\//g, ',');
|
||||||
|
}
|
||||||
|
if (!proxy.port) {
|
||||||
|
proxy.port = getRandomPort(proxy.ports);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return proxy;
|
return proxy;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -274,6 +286,7 @@ export const ProxyUtils = {
|
|||||||
process: processFn,
|
process: processFn,
|
||||||
produce,
|
produce,
|
||||||
ipAddress,
|
ipAddress,
|
||||||
|
getRandomPort,
|
||||||
isIPv4,
|
isIPv4,
|
||||||
isIPv6,
|
isIPv6,
|
||||||
isIP,
|
isIP,
|
||||||
|
@ -94,6 +94,23 @@ function getPolicyDescriptor(str) {
|
|||||||
// };
|
// };
|
||||||
// })();
|
// })();
|
||||||
|
|
||||||
|
function getRandomInt(min, max) {
|
||||||
|
min = Math.ceil(min);
|
||||||
|
max = Math.floor(max);
|
||||||
|
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRandomPort(portString) {
|
||||||
|
let portParts = portString.split(/,|\//);
|
||||||
|
let randomPart = portParts[Math.floor(Math.random() * portParts.length)];
|
||||||
|
if (randomPart.includes('-')) {
|
||||||
|
let [min, max] = randomPart.split('-').map(Number);
|
||||||
|
return getRandomInt(min, max);
|
||||||
|
} else {
|
||||||
|
return Number(randomPart);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
ipAddress,
|
ipAddress,
|
||||||
isIPv4,
|
isIPv4,
|
||||||
@ -105,4 +122,5 @@ export {
|
|||||||
getIfPresent,
|
getIfPresent,
|
||||||
// utf8ArrayToStr,
|
// utf8ArrayToStr,
|
||||||
getPolicyDescriptor,
|
getPolicyDescriptor,
|
||||||
|
getRandomPort,
|
||||||
};
|
};
|
||||||
|
@ -42,6 +42,7 @@ function operator(proxies = [], targetPlatform, context) {
|
|||||||
// parse, // 订阅解析
|
// parse, // 订阅解析
|
||||||
// process, // 节点操作/文件操作
|
// process, // 节点操作/文件操作
|
||||||
// produce, // 输出订阅
|
// produce, // 输出订阅
|
||||||
|
// getRandomPort, // 获取随机端口(参考 ports 端口跳跃的格式 443,8443,5000-6000)
|
||||||
// ipAddress, // https://github.com/beaugunderson/ip-address
|
// ipAddress, // https://github.com/beaugunderson/ip-address
|
||||||
// isIPv4,
|
// isIPv4,
|
||||||
// isIPv6,
|
// isIPv6,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user