From 2b3b2770b49cd56097d7cebdf279e267a77072f6 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Mon, 20 Apr 2026 18:22:43 +0200 Subject: [PATCH] Sniffing: Add ipsExcluded, domainsExcluded (supports IP, CIDR, "geoip:", "ext:") --- web/assets/js/model/inbound.js | 27 ++++++++++++++++----- web/html/form/sniffing.html | 44 ++++++++++++++++++++++++++-------- 2 files changed, 55 insertions(+), 16 deletions(-) diff --git a/web/assets/js/model/inbound.js b/web/assets/js/model/inbound.js index c94bd8d3..d4df6d36 100644 --- a/web/assets/js/model/inbound.js +++ b/web/assets/js/model/inbound.js @@ -1252,28 +1252,43 @@ class Sniffing extends XrayCommonClass { enabled = false, destOverride = ['http', 'tls', 'quic', 'fakedns'], metadataOnly = false, - routeOnly = false) { + routeOnly = false, + ipsExcluded = [], + domainsExcluded = []) { super(); this.enabled = enabled; - this.destOverride = destOverride; + this.destOverride = Array.isArray(destOverride) && destOverride.length > 0 ? destOverride : ['http', 'tls', 'quic', 'fakedns']; this.metadataOnly = metadataOnly; this.routeOnly = routeOnly; + this.ipsExcluded = Array.isArray(ipsExcluded) ? ipsExcluded : []; + this.domainsExcluded = Array.isArray(domainsExcluded) ? domainsExcluded : []; } static fromJson(json = {}) { let destOverride = ObjectUtil.clone(json.destOverride); - if (!ObjectUtil.isEmpty(destOverride) && !ObjectUtil.isArrEmpty(destOverride)) { - if (ObjectUtil.isEmpty(destOverride[0])) { - destOverride = ['http', 'tls', 'quic', 'fakedns']; - } + if (ObjectUtil.isEmpty(destOverride) || ObjectUtil.isArrEmpty(destOverride) || ObjectUtil.isEmpty(destOverride[0])) { + destOverride = ['http', 'tls', 'quic', 'fakedns']; } return new Sniffing( !!json.enabled, destOverride, json.metadataOnly, 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 { diff --git a/web/html/form/sniffing.html b/web/html/form/sniffing.html index d8a2e85a..f9cf6b9c 100644 --- a/web/html/form/sniffing.html +++ b/web/html/form/sniffing.html @@ -1,29 +1,53 @@ {{define "form/sniffing"}} - + {{ i18n "enabled" }} - - - - + + + + {{end}}