mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2025-12-27 13:10:30 +08:00
make hosts support multiple IPs and modify sniff (#5)
This commit is contained in:
parent
8093aa95bb
commit
8e1004f82d
@ -42,7 +42,8 @@ export const defaultControledMihomoConfig: Partial<IMihomoConfig> = {
|
|||||||
},
|
},
|
||||||
sniffer: {
|
sniffer: {
|
||||||
enable: true,
|
enable: true,
|
||||||
'parse-pure-ip': false,
|
'parse-pure-ip': true,
|
||||||
|
'force-dns-mapping': true,
|
||||||
'override-destination': false,
|
'override-destination': false,
|
||||||
sniff: {
|
sniff: {
|
||||||
HTTP: {
|
HTTP: {
|
||||||
|
|||||||
@ -54,18 +54,20 @@ const DNS: React.FC = () => {
|
|||||||
setValues({ ...values, [type]: newValues })
|
setValues({ ...values, [type]: newValues })
|
||||||
}
|
}
|
||||||
const handleHostsChange = (domain: string, value: string, index: number): void => {
|
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 === '')
|
||||||
|
|
||||||
|
const newHosts = [...values.hosts]
|
||||||
|
if (!isEmpty(domain.trim(), processValue(value))) {
|
||||||
if (index === newHosts.length) {
|
if (index === newHosts.length) {
|
||||||
if (domain.trim() !== '' || value.trim() !== '') {
|
newHosts.push({ domain: domain.trim(), value: processValue(value) })
|
||||||
newHosts.push({ domain: domain.trim(), value: value.trim() })
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (domain.trim() === '' && value.trim() === '') {
|
newHosts[index] = { domain: domain.trim(), value: processValue(value) }
|
||||||
|
}
|
||||||
|
} else if (index < newHosts.length) {
|
||||||
newHosts.splice(index, 1)
|
newHosts.splice(index, 1)
|
||||||
} else {
|
|
||||||
newHosts[index] = { domain: domain.trim(), value: value.trim() }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
setValues({ ...values, hosts: newHosts })
|
setValues({ ...values, hosts: newHosts })
|
||||||
}
|
}
|
||||||
@ -234,7 +236,7 @@ const DNS: React.FC = () => {
|
|||||||
<Input
|
<Input
|
||||||
size="sm"
|
size="sm"
|
||||||
fullWidth
|
fullWidth
|
||||||
placeholder="IP 或域名"
|
placeholder="域名或IP"
|
||||||
value={Array.isArray(value) ? value.join(',') : value}
|
value={Array.isArray(value) ? value.join(',') : value}
|
||||||
onValueChange={(v) => handleHostsChange(domain, v, index)}
|
onValueChange={(v) => handleHostsChange(domain, v, index)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -12,6 +12,7 @@ const Sniffer: React.FC = () => {
|
|||||||
const { sniffer } = controledMihomoConfig || {}
|
const { sniffer } = controledMihomoConfig || {}
|
||||||
const {
|
const {
|
||||||
'parse-pure-ip': parsePureIP = true,
|
'parse-pure-ip': parsePureIP = true,
|
||||||
|
'force-dns-mapping': forceDNSMapping = true,
|
||||||
'override-destination': overrideDestination = false,
|
'override-destination': overrideDestination = false,
|
||||||
sniff = {
|
sniff = {
|
||||||
HTTP: { ports: [80, 443], 'override-destination': false },
|
HTTP: { ports: [80, 443], 'override-destination': false },
|
||||||
@ -24,6 +25,7 @@ const Sniffer: React.FC = () => {
|
|||||||
|
|
||||||
const [values, setValues] = useState({
|
const [values, setValues] = useState({
|
||||||
parsePureIP,
|
parsePureIP,
|
||||||
|
forceDNSMapping,
|
||||||
overrideDestination,
|
overrideDestination,
|
||||||
sniff,
|
sniff,
|
||||||
skipDomain,
|
skipDomain,
|
||||||
@ -74,6 +76,7 @@ const Sniffer: React.FC = () => {
|
|||||||
onSave({
|
onSave({
|
||||||
sniffer: {
|
sniffer: {
|
||||||
'parse-pure-ip': values.parsePureIP,
|
'parse-pure-ip': values.parsePureIP,
|
||||||
|
'force-dns-mapping': values.forceDNSMapping,
|
||||||
'override-destination': values.overrideDestination,
|
'override-destination': values.overrideDestination,
|
||||||
sniff: values.sniff,
|
sniff: values.sniff,
|
||||||
'skip-domain': values.skipDomain,
|
'skip-domain': values.skipDomain,
|
||||||
@ -107,7 +110,16 @@ const Sniffer: React.FC = () => {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
<SettingItem title="强制嗅探IP地址" divider>
|
<SettingItem title="对真实IP映射嗅探" divider>
|
||||||
|
<Switch
|
||||||
|
size="sm"
|
||||||
|
isSelected={values.forceDNSMapping}
|
||||||
|
onValueChange={(v) => {
|
||||||
|
setValues({ ...values, forceDNSMapping: v })
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</SettingItem>
|
||||||
|
<SettingItem title="对未映射IP地址嗅探" divider>
|
||||||
<Switch
|
<Switch
|
||||||
size="sm"
|
size="sm"
|
||||||
isSelected={values.parsePureIP}
|
isSelected={values.parsePureIP}
|
||||||
@ -116,7 +128,7 @@ const Sniffer: React.FC = () => {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
<SettingItem title="嗅探 HTTP 端口" divider>
|
<SettingItem title="HTTP 端口嗅探" divider>
|
||||||
<Input
|
<Input
|
||||||
size="sm"
|
size="sm"
|
||||||
className="w-[50%]"
|
className="w-[50%]"
|
||||||
@ -124,7 +136,7 @@ const Sniffer: React.FC = () => {
|
|||||||
onValueChange={(v) => handleSniffPortChange('HTTP', v)}
|
onValueChange={(v) => handleSniffPortChange('HTTP', v)}
|
||||||
/>
|
/>
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
<SettingItem title="嗅探 TLS 端口" divider>
|
<SettingItem title="TLS 端口嗅探" divider>
|
||||||
<Input
|
<Input
|
||||||
size="sm"
|
size="sm"
|
||||||
className="w-[50%]"
|
className="w-[50%]"
|
||||||
@ -132,7 +144,7 @@ const Sniffer: React.FC = () => {
|
|||||||
onValueChange={(v) => handleSniffPortChange('TLS', v)}
|
onValueChange={(v) => handleSniffPortChange('TLS', v)}
|
||||||
/>
|
/>
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
<SettingItem title="嗅探 QUIC 端口" divider>
|
<SettingItem title="QUIC 端口嗅探" divider>
|
||||||
<Input
|
<Input
|
||||||
size="sm"
|
size="sm"
|
||||||
className="w-[50%]"
|
className="w-[50%]"
|
||||||
@ -141,7 +153,7 @@ const Sniffer: React.FC = () => {
|
|||||||
/>
|
/>
|
||||||
</SettingItem>
|
</SettingItem>
|
||||||
<div className="flex flex-col items-stretch">
|
<div className="flex flex-col items-stretch">
|
||||||
<h3 className="select-none">跳过嗅探</h3>
|
<h3 className="select-none">跳过嗅探域名</h3>
|
||||||
{[...values.skipDomain, ''].map((d, index) => (
|
{[...values.skipDomain, ''].map((d, index) => (
|
||||||
<div key={index} className="flex mt-2">
|
<div key={index} className="flex mt-2">
|
||||||
<Input
|
<Input
|
||||||
@ -167,7 +179,7 @@ const Sniffer: React.FC = () => {
|
|||||||
</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="select-none mb-2">强制嗅探</h3>
|
<h3 className="select-none mb-2">强制嗅探域名</h3>
|
||||||
{[...values.forceDomain, ''].map((d, index) => (
|
{[...values.forceDomain, ''].map((d, index) => (
|
||||||
<div key={index} className="flex mb-2">
|
<div key={index} className="flex mb-2">
|
||||||
<Input
|
<Input
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user