mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2025-12-27 13:10:30 +08:00
add more sniff settings
This commit is contained in:
parent
04aad7fd40
commit
09921d984a
@ -90,12 +90,23 @@ export const defaultControledMihomoConfig: Partial<IMihomoConfig> = {
|
|||||||
},
|
},
|
||||||
TLS: {
|
TLS: {
|
||||||
ports: [443]
|
ports: [443]
|
||||||
},
|
|
||||||
QUIC: {
|
|
||||||
ports: [443]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'skip-domain': ['+.push.apple.com']
|
'skip-domain': ['+.push.apple.com'],
|
||||||
|
'skip-dst-address': [
|
||||||
|
'91.105.192.0/23',
|
||||||
|
'91.108.4.0/22',
|
||||||
|
'91.108.8.0/21',
|
||||||
|
'91.108.16.0/21',
|
||||||
|
'91.108.56.0/22',
|
||||||
|
'95.161.64.0/20',
|
||||||
|
'149.154.160.0/20',
|
||||||
|
'185.76.151.0/24',
|
||||||
|
'2001:67c:4e8::/48',
|
||||||
|
'2001:b28:f23c::/47',
|
||||||
|
'2001:b28:f23f::/48',
|
||||||
|
'2a0a:f280:203::/48'
|
||||||
|
]
|
||||||
},
|
},
|
||||||
profile: {
|
profile: {
|
||||||
'store-selected': true,
|
'store-selected': true,
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import SettingCard from '@renderer/components/base/base-setting-card'
|
|||||||
import SettingItem from '@renderer/components/base/base-setting-item'
|
import SettingItem from '@renderer/components/base/base-setting-item'
|
||||||
import { useControledMihomoConfig } from '@renderer/hooks/use-controled-mihomo-config'
|
import { useControledMihomoConfig } from '@renderer/hooks/use-controled-mihomo-config'
|
||||||
import { restartCore } from '@renderer/utils/ipc'
|
import { restartCore } from '@renderer/utils/ipc'
|
||||||
import React, { useState } from 'react'
|
import React, { ReactNode, useState } from 'react'
|
||||||
import { MdDeleteForever } from 'react-icons/md'
|
import { MdDeleteForever } from 'react-icons/md'
|
||||||
|
|
||||||
const Sniffer: React.FC = () => {
|
const Sniffer: React.FC = () => {
|
||||||
@ -17,10 +17,25 @@ const Sniffer: React.FC = () => {
|
|||||||
sniff = {
|
sniff = {
|
||||||
HTTP: { ports: [80, 443], 'override-destination': false },
|
HTTP: { ports: [80, 443], 'override-destination': false },
|
||||||
TLS: { ports: [443] },
|
TLS: { ports: [443] },
|
||||||
QUIC: { ports: [443] }
|
QUIC: { ports: [] }
|
||||||
},
|
},
|
||||||
'skip-domain': skipDomain = ['+.push.apple.com'],
|
'skip-domain': skipDomain = ['+.push.apple.com'],
|
||||||
'force-domain': forceDomain = []
|
'force-domain': forceDomain = [],
|
||||||
|
'skip-dst-address': skipDstAddress = [
|
||||||
|
'91.105.192.0/23',
|
||||||
|
'91.108.4.0/22',
|
||||||
|
'91.108.8.0/21',
|
||||||
|
'91.108.16.0/21',
|
||||||
|
'91.108.56.0/22',
|
||||||
|
'95.161.64.0/20',
|
||||||
|
'149.154.160.0/20',
|
||||||
|
'185.76.151.0/24',
|
||||||
|
'2001:67c:4e8::/48',
|
||||||
|
'2001:b28:f23c::/47',
|
||||||
|
'2001:b28:f23f::/48',
|
||||||
|
'2a0a:f280:203::/48'
|
||||||
|
],
|
||||||
|
'skip-src-address': skipSrcAddress = []
|
||||||
} = sniffer || {}
|
} = sniffer || {}
|
||||||
const [changed, setChanged] = useState(false)
|
const [changed, setChanged] = useState(false)
|
||||||
const [values, originSetValues] = useState({
|
const [values, originSetValues] = useState({
|
||||||
@ -29,7 +44,9 @@ const Sniffer: React.FC = () => {
|
|||||||
overrideDestination,
|
overrideDestination,
|
||||||
sniff,
|
sniff,
|
||||||
skipDomain,
|
skipDomain,
|
||||||
forceDomain
|
forceDomain,
|
||||||
|
skipDstAddress,
|
||||||
|
skipSrcAddress
|
||||||
})
|
})
|
||||||
const setValues = (v: typeof values): void => {
|
const setValues = (v: typeof values): void => {
|
||||||
originSetValues(v)
|
originSetValues(v)
|
||||||
@ -58,20 +75,45 @@ const Sniffer: React.FC = () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const handleDomainChange = (type: string, value: string, index: number): void => {
|
const handleListChange = (type: string, value: string, index: number): void => {
|
||||||
const newDomains = [...values[type]]
|
const list = [...values[type]]
|
||||||
if (index === newDomains.length) {
|
if (value.trim()) {
|
||||||
if (value.trim() !== '') {
|
if (index < list.length) {
|
||||||
newDomains.push(value)
|
list[index] = value
|
||||||
|
} else {
|
||||||
|
list.push(value)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (value.trim() === '') {
|
list.splice(index, 1)
|
||||||
newDomains.splice(index, 1)
|
|
||||||
} else {
|
|
||||||
newDomains[index] = value
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
setValues({ ...values, [type]: newDomains })
|
setValues({ ...values, [type]: list })
|
||||||
|
}
|
||||||
|
const renderListInputs = (type: string, placeholder: string): ReactNode => {
|
||||||
|
const currentItems = values[type]
|
||||||
|
const showNewLine = currentItems.every((item: string) => item.trim() !== '')
|
||||||
|
|
||||||
|
return [...currentItems, ...(showNewLine ? [''] : [])].map((item, index) => (
|
||||||
|
<div key={index} className="mt-2 flex">
|
||||||
|
<Input
|
||||||
|
fullWidth
|
||||||
|
size="sm"
|
||||||
|
placeholder={placeholder}
|
||||||
|
value={typeof item === 'string' ? item : item.domain}
|
||||||
|
onValueChange={(v) => handleListChange(type, v, index)}
|
||||||
|
/>
|
||||||
|
{index < values[type].length && (
|
||||||
|
<Button
|
||||||
|
className="ml-2"
|
||||||
|
size="sm"
|
||||||
|
variant="flat"
|
||||||
|
color="warning"
|
||||||
|
onClick={() => handleListChange(type, '', index)}
|
||||||
|
>
|
||||||
|
<MdDeleteForever className="text-lg" />
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -144,6 +186,7 @@ const Sniffer: React.FC = () => {
|
|||||||
<Input
|
<Input
|
||||||
size="sm"
|
size="sm"
|
||||||
className="w-[50%]"
|
className="w-[50%]"
|
||||||
|
placeholder="端口号,使用英文逗号分割"
|
||||||
value={values.sniff.HTTP?.ports.join(',')}
|
value={values.sniff.HTTP?.ports.join(',')}
|
||||||
onValueChange={(v) => handleSniffPortChange('HTTP', v)}
|
onValueChange={(v) => handleSniffPortChange('HTTP', v)}
|
||||||
/>
|
/>
|
||||||
@ -152,6 +195,7 @@ const Sniffer: React.FC = () => {
|
|||||||
<Input
|
<Input
|
||||||
size="sm"
|
size="sm"
|
||||||
className="w-[50%]"
|
className="w-[50%]"
|
||||||
|
placeholder="端口号,使用英文逗号分割"
|
||||||
value={values.sniff.TLS?.ports.join(',')}
|
value={values.sniff.TLS?.ports.join(',')}
|
||||||
onValueChange={(v) => handleSniffPortChange('TLS', v)}
|
onValueChange={(v) => handleSniffPortChange('TLS', v)}
|
||||||
/>
|
/>
|
||||||
@ -160,60 +204,29 @@ const Sniffer: React.FC = () => {
|
|||||||
<Input
|
<Input
|
||||||
size="sm"
|
size="sm"
|
||||||
className="w-[50%]"
|
className="w-[50%]"
|
||||||
|
placeholder="端口号,使用英文逗号分割"
|
||||||
value={values.sniff.QUIC?.ports.join(',')}
|
value={values.sniff.QUIC?.ports.join(',')}
|
||||||
onValueChange={(v) => handleSniffPortChange('QUIC', v)}
|
onValueChange={(v) => handleSniffPortChange('QUIC', v)}
|
||||||
/>
|
/>
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
<div className="flex flex-col items-stretch">
|
<div className="flex flex-col items-stretch">
|
||||||
<h3>跳过嗅探域名</h3>
|
<h3>跳过域名嗅探</h3>
|
||||||
{[...values.skipDomain, ''].map((d, index) => (
|
{renderListInputs('skipDomain', '例:+.push.apple.com')}
|
||||||
<div key={index} className="flex mt-2">
|
|
||||||
<Input
|
|
||||||
size="sm"
|
|
||||||
fullWidth
|
|
||||||
placeholder="例: push.apple.com"
|
|
||||||
value={d}
|
|
||||||
onValueChange={(v) => handleDomainChange('skipDomain', v, index)}
|
|
||||||
/>
|
|
||||||
{index < values.skipDomain.length && (
|
|
||||||
<Button
|
|
||||||
size="sm"
|
|
||||||
color="warning"
|
|
||||||
variant="flat"
|
|
||||||
className="ml-2"
|
|
||||||
onClick={() => handleDomainChange('skipDomain', '', index)}
|
|
||||||
>
|
|
||||||
<MdDeleteForever className="text-lg" />
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
</div>
|
</div>
|
||||||
<Divider className="my-2" />
|
<Divider className="my-2" />
|
||||||
<div className="flex flex-col items-stretch">
|
<div className="flex flex-col items-stretch">
|
||||||
<h3 className="mb-2">强制嗅探域名</h3>
|
<h3 className="mb-2">强制域名嗅探</h3>
|
||||||
{[...values.forceDomain, ''].map((d, index) => (
|
{renderListInputs('forceDomain', '例:v2ex.com')}
|
||||||
<div key={index} className="flex mb-2">
|
</div>
|
||||||
<Input
|
<Divider className="my-2" />
|
||||||
size="sm"
|
<div className="flex flex-col items-stretch">
|
||||||
fullWidth
|
<h3 className="mb-2">跳过目标地址嗅探</h3>
|
||||||
placeholder="例: v2ex.com"
|
{renderListInputs('skipDstAddress', '例:1.1.1.1/32')}
|
||||||
value={d}
|
</div>
|
||||||
onValueChange={(v) => handleDomainChange('forceDomain', v, index)}
|
<Divider className="my-2" />
|
||||||
/>
|
<div className="flex flex-col items-stretch">
|
||||||
{index < values.forceDomain.length && (
|
<h3 className="mb-2">跳过来源地址嗅探</h3>
|
||||||
<Button
|
{renderListInputs('skipSrcAddress', '例:192.168.1.1/24')}
|
||||||
size="sm"
|
|
||||||
color="warning"
|
|
||||||
variant="flat"
|
|
||||||
className="ml-2"
|
|
||||||
onClick={() => handleDomainChange('forceDomain', '', index)}
|
|
||||||
>
|
|
||||||
<MdDeleteForever className="text-lg" />
|
|
||||||
</Button>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
</div>
|
</div>
|
||||||
</SettingCard>
|
</SettingCard>
|
||||||
</BasePage>
|
</BasePage>
|
||||||
|
|||||||
2
src/shared/types.d.ts
vendored
2
src/shared/types.d.ts
vendored
@ -352,6 +352,8 @@ interface IMihomoSnifferConfig {
|
|||||||
'force-dns-mapping'?: boolean
|
'force-dns-mapping'?: boolean
|
||||||
'force-domain'?: string[]
|
'force-domain'?: string[]
|
||||||
'skip-domain'?: string[]
|
'skip-domain'?: string[]
|
||||||
|
'skip-dst-address'?: string[]
|
||||||
|
'skip-src-address'?: string[]
|
||||||
sniff?: {
|
sniff?: {
|
||||||
HTTP?: {
|
HTTP?: {
|
||||||
ports: (number | string)[]
|
ports: (number | string)[]
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user