mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-04-22 15:35:52 +00:00
Sniffing: Add ipsExcluded, domainsExcluded (supports IP, CIDR, "geoip:", "ext:")
This commit is contained in:
parent
094ea9faaa
commit
2b3b2770b4
2 changed files with 55 additions and 16 deletions
|
|
@ -1252,28 +1252,43 @@ class Sniffing extends XrayCommonClass {
|
||||||
enabled = false,
|
enabled = false,
|
||||||
destOverride = ['http', 'tls', 'quic', 'fakedns'],
|
destOverride = ['http', 'tls', 'quic', 'fakedns'],
|
||||||
metadataOnly = false,
|
metadataOnly = false,
|
||||||
routeOnly = false) {
|
routeOnly = false,
|
||||||
|
ipsExcluded = [],
|
||||||
|
domainsExcluded = []) {
|
||||||
super();
|
super();
|
||||||
this.enabled = enabled;
|
this.enabled = enabled;
|
||||||
this.destOverride = destOverride;
|
this.destOverride = Array.isArray(destOverride) && destOverride.length > 0 ? destOverride : ['http', 'tls', 'quic', 'fakedns'];
|
||||||
this.metadataOnly = metadataOnly;
|
this.metadataOnly = metadataOnly;
|
||||||
this.routeOnly = routeOnly;
|
this.routeOnly = routeOnly;
|
||||||
|
this.ipsExcluded = Array.isArray(ipsExcluded) ? ipsExcluded : [];
|
||||||
|
this.domainsExcluded = Array.isArray(domainsExcluded) ? domainsExcluded : [];
|
||||||
}
|
}
|
||||||
|
|
||||||
static fromJson(json = {}) {
|
static fromJson(json = {}) {
|
||||||
let destOverride = ObjectUtil.clone(json.destOverride);
|
let destOverride = ObjectUtil.clone(json.destOverride);
|
||||||
if (!ObjectUtil.isEmpty(destOverride) && !ObjectUtil.isArrEmpty(destOverride)) {
|
if (ObjectUtil.isEmpty(destOverride) || ObjectUtil.isArrEmpty(destOverride) || ObjectUtil.isEmpty(destOverride[0])) {
|
||||||
if (ObjectUtil.isEmpty(destOverride[0])) {
|
destOverride = ['http', 'tls', 'quic', 'fakedns'];
|
||||||
destOverride = ['http', 'tls', 'quic', 'fakedns'];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return new Sniffing(
|
return new Sniffing(
|
||||||
!!json.enabled,
|
!!json.enabled,
|
||||||
destOverride,
|
destOverride,
|
||||||
json.metadataOnly,
|
json.metadataOnly,
|
||||||
json.routeOnly,
|
json.routeOnly,
|
||||||
|
json.ipsExcluded || [],
|
||||||
|
json.domainsExcluded || [],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toJson() {
|
||||||
|
return {
|
||||||
|
enabled: this.enabled,
|
||||||
|
destOverride: this.destOverride,
|
||||||
|
metadataOnly: this.metadataOnly,
|
||||||
|
routeOnly: this.routeOnly,
|
||||||
|
ipsExcluded: this.ipsExcluded.length > 0 ? this.ipsExcluded : undefined,
|
||||||
|
domainsExcluded: this.domainsExcluded.length > 0 ? this.domainsExcluded : undefined,
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Inbound extends XrayCommonClass {
|
class Inbound extends XrayCommonClass {
|
||||||
|
|
|
||||||
|
|
@ -1,29 +1,53 @@
|
||||||
{{define "form/sniffing"}}
|
{{define "form/sniffing"}}
|
||||||
<a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
|
<a-form
|
||||||
|
:colon="false"
|
||||||
|
:label-col="{ md: {span:8} }"
|
||||||
|
:wrapper-col="{ md: {span:14} }"
|
||||||
|
>
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<span slot="label">
|
<span slot="label">
|
||||||
{{ i18n "enabled" }}
|
{{ i18n "enabled" }}
|
||||||
<a-tooltip>
|
<a-tooltip>
|
||||||
<template slot="title">
|
<template slot="title">
|
||||||
<span>{{ i18n "pages.inbounds.noRecommendKeepDefault" }}</span>
|
<span>{{ i18n "pages.inbounds.noRecommendKeepDefault" }}</span>
|
||||||
</template>
|
</template>
|
||||||
<a-icon type="question-circle"></a-icon>
|
<a-icon type="question-circle"></a-icon>
|
||||||
</a-tooltip>
|
</a-tooltip>
|
||||||
</span>
|
</span>
|
||||||
<a-switch v-model="inbound.sniffing.enabled"></a-switch>
|
<a-switch v-model="inbound.sniffing.enabled"></a-switch>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<template v-if="inbound.sniffing.enabled">
|
<template v-if="inbound.sniffing.enabled">
|
||||||
<a-form-item :wrapper-col="{span:24}">
|
<a-form-item :wrapper-col="{span:24}">
|
||||||
<a-checkbox-group v-model="inbound.sniffing.destOverride">
|
<a-checkbox-group v-model="inbound.sniffing.destOverride">
|
||||||
<a-checkbox v-for="key,value in SNIFFING_OPTION" :value="key">[[ value ]]</a-checkbox>
|
<a-checkbox v-for="key,value in SNIFFING_OPTION" :value="key"
|
||||||
|
>[[ value ]]</a-checkbox
|
||||||
|
>
|
||||||
</a-checkbox-group>
|
</a-checkbox-group>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label='Metadata Only'>
|
<a-form-item label="Metadata Only">
|
||||||
<a-switch v-model="inbound.sniffing.metadataOnly"></a-switch>
|
<a-switch v-model="inbound.sniffing.metadataOnly"></a-switch>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label='Route Only'>
|
<a-form-item label="Route Only">
|
||||||
<a-switch v-model="inbound.sniffing.routeOnly"></a-switch>
|
<a-switch v-model="inbound.sniffing.routeOnly"></a-switch>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
<a-form-item label="IPs Excluded">
|
||||||
|
<a-select
|
||||||
|
mode="tags"
|
||||||
|
v-model="inbound.sniffing.ipsExcluded"
|
||||||
|
:style="{ width: '100%' }"
|
||||||
|
:token-separators="[',']"
|
||||||
|
placeholder="IP/CIDR/geoip:*/ext:*"
|
||||||
|
></a-select>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="Domains Excluded">
|
||||||
|
<a-select
|
||||||
|
mode="tags"
|
||||||
|
v-model="inbound.sniffing.domainsExcluded"
|
||||||
|
:style="{ width: '100%' }"
|
||||||
|
:token-separators="[',']"
|
||||||
|
placeholder="domain:*/ext:*"
|
||||||
|
></a-select>
|
||||||
|
</a-form-item>
|
||||||
</template>
|
</template>
|
||||||
</a-form>
|
</a-form>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue