feat: 规则中处理 GEOIP/GEOSITE, Loon 已支持 SRC-PORT/DEST-PORT/PROTOCOL

This commit is contained in:
xream 2024-03-15 08:49:36 +08:00
parent bbb9602f9f
commit 6ec8c29f6a
No known key found for this signature in database
GPG Key ID: 1D2C5225471789F9
3 changed files with 8 additions and 5 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "sub-store", "name": "sub-store",
"version": "2.14.256", "version": "2.14.257",
"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": {

View File

@ -39,8 +39,7 @@ function AllRuleParser() {
content: params[1], content: params[1],
}; };
if ( if (
rule.type === 'IP-CIDR' || ['IP-CIDR', 'IP-CIDR6', 'GEOIP'].includes(rule.type)
rule.type === 'IP-CIDR6'
) { ) {
rule.options = params.slice(2); rule.options = params.slice(2);
} }

View File

@ -10,6 +10,8 @@ function QXFilter() {
'SRC-IP', 'SRC-IP',
'IN-PORT', 'IN-PORT',
'PROTOCOL', 'PROTOCOL',
'GEOSITE',
'GEOIP',
]; ];
if (UNSUPPORTED.indexOf(rule.type) !== -1) return null; if (UNSUPPORTED.indexOf(rule.type) !== -1) return null;
@ -29,6 +31,8 @@ function QXFilter() {
function SurgeRuleSet() { function SurgeRuleSet() {
const type = 'SINGLE'; const type = 'SINGLE';
const func = (rule) => { const func = (rule) => {
const UNSUPPORTED = ['GEOSITE', 'GEOIP'];
if (UNSUPPORTED.indexOf(rule.type) !== -1) return null;
let output = `${rule.type},${rule.content}`; let output = `${rule.type},${rule.content}`;
if (['IP-CIDR', 'IP-CIDR6'].includes(rule.type)) { if (['IP-CIDR', 'IP-CIDR6'].includes(rule.type)) {
output += output +=
@ -43,7 +47,7 @@ function LoonRules() {
const type = 'SINGLE'; const type = 'SINGLE';
const func = (rule) => { const func = (rule) => {
// skip unsupported rules // skip unsupported rules
const UNSUPPORTED = ['DEST-PORT', 'SRC-IP', 'IN-PORT', 'PROTOCOL']; const UNSUPPORTED = ['SRC-IP', 'GEOSITE', 'GEOIP'];
if (UNSUPPORTED.indexOf(rule.type) !== -1) return null; if (UNSUPPORTED.indexOf(rule.type) !== -1) return null;
if (['IP-CIDR', 'IP-CIDR6'].includes(rule.type) && rule.options) { if (['IP-CIDR', 'IP-CIDR6'].includes(rule.type) && rule.options) {
// Loon only supports the no-resolve option // Loon only supports the no-resolve option
@ -69,7 +73,7 @@ function ClashRuleProvider() {
let output = `${TRANSFORM[rule.type] || rule.type},${ let output = `${TRANSFORM[rule.type] || rule.type},${
rule.content rule.content
}`; }`;
if (['IP-CIDR', 'IP-CIDR6'].includes(rule.type)) { if (['IP-CIDR', 'IP-CIDR6', 'GEOIP'].includes(rule.type)) {
if (rule.options) { if (rule.options) {
// Clash only supports the no-resolve option // Clash only supports the no-resolve option
rule.options = rule.options.filter((option) => rule.options = rule.options.filter((option) =>