mirror of
https://github.com/v2fly/v2ray-core.git
synced 2025-09-22 22:53:30 +00:00
added fake dns + others matching logic
This commit is contained in:
parent
94ab10fce3
commit
488f9845c6
@ -186,6 +186,11 @@ func shouldOverride(result SniffResult, domainOverride []string) bool {
|
|||||||
if strings.HasPrefix(protocolString, p) {
|
if strings.HasPrefix(protocolString, p) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
if resultSubset, ok := result.(SnifferIsProtoSubsetOf); ok {
|
||||||
|
if resultSubset.IsProtoSubsetOf(p) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ package dispatcher
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"strings"
|
||||||
|
|
||||||
core "github.com/v2fly/v2ray-core/v4"
|
core "github.com/v2fly/v2ray-core/v4"
|
||||||
"github.com/v2fly/v2ray-core/v4/common"
|
"github.com/v2fly/v2ray-core/v4/common"
|
||||||
@ -69,6 +70,14 @@ type ipAddressInRangeOpt struct {
|
|||||||
|
|
||||||
type DNSThenOthersSniffResult struct {
|
type DNSThenOthersSniffResult struct {
|
||||||
domainName string
|
domainName string
|
||||||
|
protocolOriginalName string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f DNSThenOthersSniffResult) IsProtoSubsetOf(protocolName string) bool {
|
||||||
|
if strings.HasPrefix(protocolName, f.protocolOriginalName) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (DNSThenOthersSniffResult) Protocol() string {
|
func (DNSThenOthersSniffResult) Protocol() string {
|
||||||
@ -93,7 +102,7 @@ func newFakeDNSThenOthers(ctx context.Context, fakeDNSSniffer protocolSnifferWit
|
|||||||
for _, v := range others {
|
for _, v := range others {
|
||||||
if v.metadataSniffer || bytes != nil {
|
if v.metadataSniffer || bytes != nil {
|
||||||
if result, err := v.protocolSniffer(ctx, bytes); err == nil {
|
if result, err := v.protocolSniffer(ctx, bytes); err == nil {
|
||||||
return DNSThenOthersSniffResult{result.Domain()}, nil
|
return DNSThenOthersSniffResult{domainName: result.Domain(), protocolOriginalName: result.Protocol()}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -107,6 +116,6 @@ func newFakeDNSThenOthers(ctx context.Context, fakeDNSSniffer protocolSnifferWit
|
|||||||
return nil, common.ErrNoClue
|
return nil, common.ErrNoClue
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
metadataSniffer: true,
|
metadataSniffer: false,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
@ -42,8 +42,8 @@ func NewSniffer(ctx context.Context) *Sniffer {
|
|||||||
others := ret.sniffer
|
others := ret.sniffer
|
||||||
ret.sniffer = append(ret.sniffer, sniffer)
|
ret.sniffer = append(ret.sniffer, sniffer)
|
||||||
fakeDNSThenOthers, err := newFakeDNSThenOthers(ctx, sniffer, others)
|
fakeDNSThenOthers, err := newFakeDNSThenOthers(ctx, sniffer, others)
|
||||||
if err != nil {
|
if err == nil {
|
||||||
ret.sniffer = append(ret.sniffer, fakeDNSThenOthers)
|
ret.sniffer = append([]protocolSnifferWithMetadata{fakeDNSThenOthers}, ret.sniffer...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
@ -128,3 +128,7 @@ func (c compositeResult) ProtocolForDomainResult() string {
|
|||||||
type SnifferResultComposite interface {
|
type SnifferResultComposite interface {
|
||||||
ProtocolForDomainResult() string
|
ProtocolForDomainResult() string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SnifferIsProtoSubsetOf interface {
|
||||||
|
IsProtoSubsetOf(protocolName string) bool
|
||||||
|
}
|
||||||
|
@ -75,6 +75,8 @@ func (c *SniffingConfig) Build() (*proxyman.SniffingConfig, error) {
|
|||||||
p = append(p, "tls")
|
p = append(p, "tls")
|
||||||
case "fakedns":
|
case "fakedns":
|
||||||
p = append(p, "fakedns")
|
p = append(p, "fakedns")
|
||||||
|
case "fakedns+others":
|
||||||
|
p = append(p, "fakedns+others")
|
||||||
default:
|
default:
|
||||||
return nil, newError("unknown protocol: ", domainOverride)
|
return nil, newError("unknown protocol: ", domainOverride)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user