From 8a52e56aab05ac631f5482c911407e6ea095d58d Mon Sep 17 00:00:00 2001 From: xishang0128 Date: Wed, 7 Aug 2024 19:24:47 +0800 Subject: [PATCH] add fakeip settings and modify sniff --- src/main/utils/template.ts | 6 ++- src/renderer/src/pages/dns.tsx | 65 +++++++++++++++++++++++++----- src/renderer/src/pages/sniffer.tsx | 23 ++++++++--- src/shared/types.d.ts | 1 + 4 files changed, 77 insertions(+), 18 deletions(-) diff --git a/src/main/utils/template.ts b/src/main/utils/template.ts index 211de2fd..e3fd94e0 100644 --- a/src/main/utils/template.ts +++ b/src/main/utils/template.ts @@ -35,17 +35,19 @@ export const defaultControledMihomoConfig: Partial = { ipv6: false, 'enhanced-mode': 'fake-ip', 'fake-ip-range': '198.18.0.1/16', + 'fake-ip-filter': ['*', '+.lan', '+.local', '+.market.xiaomi.com'], 'use-hosts': false, 'use-system-hosts': false, nameserver: ['https://doh.pub/dns-query', 'https://dns.alidns.com/dns-query'] }, sniffer: { enable: true, - 'parse-pure-ip': true, + 'parse-pure-ip': false, 'override-destination': false, sniff: { HTTP: { - ports: [80, 443] + ports: [80, 443], + 'override-destination': false }, TLS: { ports: [443] diff --git a/src/renderer/src/pages/dns.tsx b/src/renderer/src/pages/dns.tsx index ed678b5f..a317fa8b 100644 --- a/src/renderer/src/pages/dns.tsx +++ b/src/renderer/src/pages/dns.tsx @@ -12,6 +12,13 @@ const DNS: React.FC = () => { const { dns, hosts } = controledMihomoConfig || {} const { ipv6 = false, + 'fake-ip-range': fakeIPRange = '198.18.0.1/16', + 'fake-ip-filter': fakeIPFilter = [ + '*', + '+.lan', + '+.local', + '+.market.xiaomi.com', + ], 'enhanced-mode': enhancedMode = 'fake-ip', 'use-hosts': useHosts = false, 'use-system-hosts': useSystemHosts = false, @@ -22,25 +29,27 @@ const DNS: React.FC = () => { ipv6, useHosts, enhancedMode, + fakeIPRange, + fakeIPFilter, useSystemHosts, nameserver, hosts: Object.entries(hosts || {}).map(([domain, value]) => ({ domain, value })) }) - const handleNameserverChange = (value: string, index: number): void => { - const newNameservers = [...values.nameserver] - if (index === newNameservers.length) { + const handleListChange = (type: string, value: string, index: number): void => { + const newValues = [...values[type]] + if (index === newValues.length) { if (value.trim() !== '') { - newNameservers.push(value) + newValues.push(value) } } else { if (value.trim() === '') { - newNameservers.splice(index, 1) + newValues.splice(index, 1) } else { - newNameservers[index] = value + newValues[index] = value } } - setValues({ ...values, nameserver: newNameservers }) + setValues({ ...values, [type]: newValues }) } const handleHostsChange = (domain: string, value: string, index: number): void => { const newHosts = [...values.hosts] @@ -81,6 +90,8 @@ const DNS: React.FC = () => { onSave({ dns: { ipv6: values.ipv6, + 'fake-ip-range': values.fakeIPRange, + 'fake-ip-filter': values.fakeIPFilter, 'enhanced-mode': values.enhancedMode, 'use-hosts': values.useHosts, 'use-system-hosts': values.useSystemHosts, @@ -107,6 +118,40 @@ const DNS: React.FC = () => { + {values.enhancedMode === 'fake-ip' ? ( + <> + { + setValues({ ...values, fakeIPRange: v }) + }} /> +
+

真实IP回应

+ {[...values.fakeIPFilter, ''].map((ns, index) => ( +
+ handleListChange('fakeIPFilter', v, index)} /> + {index < values.fakeIPFilter.length && ( + + )} +
+ ))} +
+ ) : null} { size="sm" placeholder="例: tls://223.5.5.5" value={ns} - onValueChange={(v) => handleNameserverChange(v, index)} + onValueChange={(v) => handleListChange('nameserver', v, index)} /> {index < values.nameserver.length && ( @@ -141,7 +186,7 @@ const DNS: React.FC = () => { ))} - + { 'parse-pure-ip': parsePureIP = true, 'override-destination': overrideDestination = false, sniff = { - HTTP: { ports: [80, 443] }, + HTTP: { ports: [80, 443], 'override-destination': false }, TLS: { ports: [443] }, QUIC: { ports: [443] } }, @@ -92,7 +92,18 @@ const Sniffer: React.FC = () => { size="sm" isSelected={values.overrideDestination} onValueChange={(v) => { - setValues({ ...values, overrideDestination: v }) + setValues({ + ...values, + overrideDestination: v, + sniff: { + ...values.sniff, + HTTP: { + ...values.sniff.HTTP, + 'override-destination': v, + ports: values.sniff.HTTP?.ports || [80, 443] + } + } + }); }} /> @@ -154,7 +165,7 @@ const Sniffer: React.FC = () => { ))} - +

强制嗅探

{[...values.forceDomain, ''].map((d, index) => ( @@ -182,7 +193,7 @@ const Sniffer: React.FC = () => {
- ) -} + ); +}; -export default Sniffer +export default Sniffer; diff --git a/src/shared/types.d.ts b/src/shared/types.d.ts index e0e7b0af..6fc6f3d7 100644 --- a/src/shared/types.d.ts +++ b/src/shared/types.d.ts @@ -199,6 +199,7 @@ interface IMihomoDNSConfig { ipv6?: boolean 'enhanced-mode'?: DnsMode 'fake-ip-range'?: string + 'fake-ip-filter'?: string[] 'use-hosts'?: boolean 'use-system-hosts'?: boolean 'respect-rules'?: boolean