diff --git a/app/dispatcher/default.go b/app/dispatcher/default.go index d363b35284d..9925ea05c3b 100644 --- a/app/dispatcher/default.go +++ b/app/dispatcher/default.go @@ -183,7 +183,7 @@ func shouldOverride(result SniffResult, domainOverride []string) bool { protocolString = resComp.ProtocolForDomainResult() } for _, p := range domainOverride { - if strings.HasPrefix(protocolString, p) || strings.HasSuffix(protocolString, p) { + if strings.HasPrefix(protocolString, p) || strings.HasPrefix(p, protocolString) { return true } if resultSubset, ok := result.(SnifferIsProtoSubsetOf); ok { @@ -223,6 +223,9 @@ func (d *DefaultDispatcher) Dispatch(ctx context.Context, destination net.Destin result, err := sniffer(ctx, cReader, sniffingRequest.MetadataOnly, destination.Network) if err == nil { content.Protocol = result.Protocol() + if resultSubset, ok := result.(SnifferGetProtoSubset); ok { + content.Protocol = resultSubset.GetProtoSubset() + } } if err == nil && shouldOverride(result, sniffingRequest.OverrideDestinationForProtocol) { if domain, err := strmatcher.ToDomain(result.Domain()); err == nil { diff --git a/app/dispatcher/fakednssniffer.go b/app/dispatcher/fakednssniffer.go index 6bbef038798..ff42026fab5 100644 --- a/app/dispatcher/fakednssniffer.go +++ b/app/dispatcher/fakednssniffer.go @@ -76,7 +76,11 @@ type DNSThenOthersSniffResult struct { } func (f DNSThenOthersSniffResult) IsProtoSubsetOf(protocolName string) bool { - return strings.HasPrefix(protocolName, f.protocolOriginalName) + return strings.HasPrefix(f.protocolOriginalName, protocolName) +} + +func (f DNSThenOthersSniffResult) GetProtoSubset() string { + return f.protocolOriginalName } func (DNSThenOthersSniffResult) Protocol() string { diff --git a/app/dispatcher/sniffer.go b/app/dispatcher/sniffer.go index b08397befa6..fb1ef6e5d8a 100644 --- a/app/dispatcher/sniffer.go +++ b/app/dispatcher/sniffer.go @@ -61,7 +61,7 @@ func (s *Sniffer) Sniff(c context.Context, payload []byte, network net.Network) if si.metadataSniffer { continue } - if si.network != network { + if si.network != network && si.network != net.Network_Unknown { continue } result, err := s(c, payload) @@ -138,3 +138,7 @@ type SnifferResultComposite interface { type SnifferIsProtoSubsetOf interface { IsProtoSubsetOf(protocolName string) bool } + +type SnifferGetProtoSubset interface { + GetProtoSubset() string +}