From 3a0fda64838f9e81baecfe6f3b9e1e409ea05f38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E8=89=AF?= <841369634@qq.com> Date: Fri, 7 Feb 2025 11:18:19 +0800 Subject: [PATCH] =?UTF-8?q?feature:=20=E5=90=84JSON=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E4=B8=AD=EF=BC=8C=E5=9F=9F=E5=90=8D=E5=8C=B9=E9=85=8D=E4=B8=B2?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=A0=BC=E5=BC=8F=E5=A6=82=20`.xxx.com`=20?= =?UTF-8?q?=E7=9A=84=E9=85=8D=E7=BD=AE=EF=BC=8C=E6=95=88=E6=9E=9C=E5=90=8C?= =?UTF-8?q?=20`*.xxx.com`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/mitmproxy/src/utils/util.match.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/mitmproxy/src/utils/util.match.js b/packages/mitmproxy/src/utils/util.match.js index 4404ba0..14b2eb1 100644 --- a/packages/mitmproxy/src/utils/util.match.js +++ b/packages/mitmproxy/src/utils/util.match.js @@ -12,7 +12,7 @@ function isMatched (url, regexp) { urlRegexp = `.${regexp}` } return url.match(urlRegexp) - } catch (e) { + } catch { log.error('匹配串有问题:', regexp) return null } @@ -32,6 +32,11 @@ function domainMapRegexply (hostMap) { const regexpMap = {} const origin = {} // 用于快速匹配,见matchHostname、matchHostnameAll方法 lodash.each(hostMap, (value, domain) => { + // 将域名匹配串格式如 `.xxx.com` 转换为 `*.xxx.com` + if (domain[0] === '.' && lodash.isEmpty(hostMap[`*${domain}`])) { + domain = `*${domain}` + } + if (domain.includes('*') || domain[0] === '^') { const regDomain = domain[0] !== '^' ? domainRegexply(domain) : domain regexpMap[regDomain] = value @@ -59,22 +64,23 @@ function matchHostname (hostMap, hostname, action) { return null } - // 域名快速匹配:直接匹配 或者 两种前缀通配符匹配 + // 域名快速匹配:直接匹配(优先级最高) let value = hostMap.origin[hostname] if (value != null) { log.info(`matchHostname: ${action}: '${hostname}' -> { "${hostname}": ${JSON.stringify(value)} }`) return value // 快速匹配成功 } - value = hostMap.origin[`*${hostname}`] - if (value != null) { - log.info(`matchHostname: ${action}: '${hostname}' -> { "*${hostname}": ${JSON.stringify(value)} }`) - return value // 快速匹配成功 - } + // 域名快速匹配:三种前缀通配符匹配 value = hostMap.origin[`*.${hostname}`] if (value != null) { log.info(`matchHostname: ${action}: '${hostname}' -> { "*.${hostname}": ${JSON.stringify(value)} }`) return value // 快速匹配成功 } + value = hostMap.origin[`*${hostname}`] + if (value != null) { + log.info(`matchHostname: ${action}: '${hostname}' -> { "*${hostname}": ${JSON.stringify(value)} }`) + return value // 快速匹配成功 + } // 通配符匹配 或 正则表达式匹配 for (const regexp in hostMap) {