Fix sniffer logic

This commit is contained in:
reF1nd 2025-05-26 15:19:38 +08:00
parent c5ecca3938
commit 37ef4c8b58

View File

@ -497,12 +497,9 @@ func (r *Router) actionSniff(
r.logger.DebugContext(ctx, "duplicate sniff skipped") r.logger.DebugContext(ctx, "duplicate sniff skipped")
return return
} }
if inputConn != nil { streamSniffers := action.StreamSniffers
sniffBuffer := buf.NewPacket() packetSniffers := action.PacketSniffers
var streamSniffers []sniff.StreamSniffer if len(streamSniffers) == 0 && len(packetSniffers) == 0 {
if len(action.StreamSniffers) > 0 {
streamSniffers = action.StreamSniffers
} else {
streamSniffers = []sniff.StreamSniffer{ streamSniffers = []sniff.StreamSniffer{
sniff.TLSClientHello, sniff.TLSClientHello,
sniff.HTTPHost, sniff.HTTPHost,
@ -511,7 +508,17 @@ func (r *Router) actionSniff(
sniff.SSH, sniff.SSH,
sniff.RDP, sniff.RDP,
} }
packetSniffers = []sniff.PacketSniffer{
sniff.DomainNameQuery,
sniff.QUICClientHello,
sniff.STUNMessage,
sniff.UTP,
sniff.UDPTracker,
sniff.DTLSRecord,
} }
}
if inputConn != nil && len(streamSniffers) > 0 {
sniffBuffer := buf.NewPacket()
err := sniff.PeekStream( err := sniff.PeekStream(
ctx, ctx,
metadata, metadata,
@ -542,7 +549,7 @@ func (r *Router) actionSniff(
} else { } else {
sniffBuffer.Release() sniffBuffer.Release()
} }
} else if inputPacketConn != nil { } else if inputPacketConn != nil && len(packetSniffers) > 0 {
if metadata.PacketSniffError != nil && !errors.Is(metadata.PacketSniffError, sniff.ErrNeedMoreData) { if metadata.PacketSniffError != nil && !errors.Is(metadata.PacketSniffError, sniff.ErrNeedMoreData) {
r.logger.DebugContext(ctx, "packet sniff skipped due to previous error: ", metadata.PacketSniffError) r.logger.DebugContext(ctx, "packet sniff skipped due to previous error: ", metadata.PacketSniffError)
return return
@ -586,19 +593,6 @@ func (r *Router) actionSniff(
sniff.QUICClientHello, sniff.QUICClientHello,
) )
} else { } else {
var packetSniffers []sniff.PacketSniffer
if len(action.PacketSniffers) > 0 {
packetSniffers = action.PacketSniffers
} else {
packetSniffers = []sniff.PacketSniffer{
sniff.DomainNameQuery,
sniff.QUICClientHello,
sniff.STUNMessage,
sniff.UTP,
sniff.UDPTracker,
sniff.DTLSRecord,
}
}
err = sniff.PeekPacket( err = sniff.PeekPacket(
ctx, metadata, ctx, metadata,
sniffBuffer.Bytes(), sniffBuffer.Bytes(),