From 8e1004f82d627973c97a1fea6d0c08459c01f824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=90=E6=AE=87?= <95160953+xishang0128@users.noreply.github.com> Date: Thu, 8 Aug 2024 09:02:14 +0800 Subject: [PATCH] make hosts support multiple IPs and modify sniff (#5) --- src/main/utils/template.ts | 3 ++- src/renderer/src/pages/dns.tsx | 26 ++++++++++++++------------ src/renderer/src/pages/sniffer.tsx | 24 ++++++++++++++++++------ 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/main/utils/template.ts b/src/main/utils/template.ts index 8527937..7684a4b 100644 --- a/src/main/utils/template.ts +++ b/src/main/utils/template.ts @@ -42,7 +42,8 @@ export const defaultControledMihomoConfig: Partial = { }, sniffer: { enable: true, - 'parse-pure-ip': false, + 'parse-pure-ip': true, + 'force-dns-mapping': true, 'override-destination': false, sniff: { HTTP: { diff --git a/src/renderer/src/pages/dns.tsx b/src/renderer/src/pages/dns.tsx index 05526d7..162a38a 100644 --- a/src/renderer/src/pages/dns.tsx +++ b/src/renderer/src/pages/dns.tsx @@ -54,18 +54,20 @@ const DNS: React.FC = () => { setValues({ ...values, [type]: newValues }) } const handleHostsChange = (domain: string, value: string, index: number): void => { - const newHosts = [...values.hosts] + const processValue = (val: string): string | string[] => + val.includes(',') ? val.split(',').map(s => s.trim()) : val.trim() + const isEmpty = (d: string, v: string | string[]): boolean => + d === '' && (Array.isArray(v) ? v.every(item => item === '') : v === '') - if (index === newHosts.length) { - if (domain.trim() !== '' || value.trim() !== '') { - newHosts.push({ domain: domain.trim(), value: value.trim() }) - } - } else { - if (domain.trim() === '' && value.trim() === '') { - newHosts.splice(index, 1) + const newHosts = [...values.hosts] + if (!isEmpty(domain.trim(), processValue(value))) { + if (index === newHosts.length) { + newHosts.push({ domain: domain.trim(), value: processValue(value) }) } else { - newHosts[index] = { domain: domain.trim(), value: value.trim() } + newHosts[index] = { domain: domain.trim(), value: processValue(value) } } + } else if (index < newHosts.length) { + newHosts.splice(index, 1) } setValues({ ...values, hosts: newHosts }) } @@ -225,7 +227,7 @@ const DNS: React.FC = () => { placeholder="域名" value={domain} onValueChange={(v) => - handleHostsChange(v, Array.isArray(value) ? value.join(', ') : value, index) + handleHostsChange(v, Array.isArray(value) ? value.join(',') : value, index) } /> @@ -234,8 +236,8 @@ const DNS: React.FC = () => { handleHostsChange(domain, v, index)} /> {index < values.hosts.length && ( diff --git a/src/renderer/src/pages/sniffer.tsx b/src/renderer/src/pages/sniffer.tsx index 3c1dd32..c73c8de 100644 --- a/src/renderer/src/pages/sniffer.tsx +++ b/src/renderer/src/pages/sniffer.tsx @@ -12,6 +12,7 @@ const Sniffer: React.FC = () => { const { sniffer } = controledMihomoConfig || {} const { 'parse-pure-ip': parsePureIP = true, + 'force-dns-mapping': forceDNSMapping = true, 'override-destination': overrideDestination = false, sniff = { HTTP: { ports: [80, 443], 'override-destination': false }, @@ -24,6 +25,7 @@ const Sniffer: React.FC = () => { const [values, setValues] = useState({ parsePureIP, + forceDNSMapping, overrideDestination, sniff, skipDomain, @@ -74,6 +76,7 @@ const Sniffer: React.FC = () => { onSave({ sniffer: { 'parse-pure-ip': values.parsePureIP, + 'force-dns-mapping': values.forceDNSMapping, 'override-destination': values.overrideDestination, sniff: values.sniff, 'skip-domain': values.skipDomain, @@ -107,7 +110,16 @@ const Sniffer: React.FC = () => { }} /> - + + { + setValues({ ...values, forceDNSMapping: v }) + }} + /> + + { }} /> - + { onValueChange={(v) => handleSniffPortChange('HTTP', v)} /> - + { onValueChange={(v) => handleSniffPortChange('TLS', v)} /> - + { />
-

跳过嗅探

+

跳过嗅探域名

{[...values.skipDomain, ''].map((d, index) => (
{
-

强制嗅探

+

强制嗅探域名

{[...values.forceDomain, ''].map((d, index) => (