From 72665dc416dffd9092b80164ed59323f4a51f2fa Mon Sep 17 00:00:00 2001 From: feng Date: Wed, 15 Jan 2025 09:11:00 +0800 Subject: [PATCH] feat(sniffer): ensure forced domains are always sniffed When a domain matches forceDomain: - SkipList is not checked - Failed attempts are not cached - Sniffing is attempted every time This ensures forced domains are always sniffed regardless of previous failures. --- component/sniffer/dispatcher.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/component/sniffer/dispatcher.go b/component/sniffer/dispatcher.go index ada43176..6cc8cee2 100644 --- a/component/sniffer/dispatcher.go +++ b/component/sniffer/dispatcher.go @@ -48,6 +48,10 @@ func (sd *Dispatcher) shouldOverride(metadata *C.Metadata) bool { if metadata.DNSMode == C.DNSMapping && sd.forceDnsMapping { return true } + return sd.forceSniff(metadata) +} + +func (sd *Dispatcher) forceSniff(metadata *C.Metadata) bool { for _, matcher := range sd.forceDomain { if matcher.MatchDomain(metadata.Host) { return true @@ -98,16 +102,21 @@ func (sd *Dispatcher) TCPSniff(conn *N.BufferedConn, metadata *C.Metadata) bool if !inWhitelist { return false } + forceSniffer := sd.forceSniff(metadata) dst := metadata.AddrPort() - if count, ok := sd.skipList.Get(dst); ok && count > 5 { - log.Debugln("[Sniffer] Skip sniffing[%s] due to multiple failures", dst) - return false + if !forceSniffer { + if count, ok := sd.skipList.Get(dst); ok && count > 5 { + log.Debugln("[Sniffer] Skip sniffing[%s] due to multiple failures", dst) + return false + } } host, err := sd.sniffDomain(conn, metadata) if err != nil { + if !forceSniffer { sd.cacheSniffFailed(metadata) + } log.Debugln("[Sniffer] All sniffing sniff failed with from [%s:%d] to [%s:%d]", metadata.SrcIP, metadata.SrcPort, metadata.String(), metadata.DstPort) return false }