From bb8465e1d6e7ef16b86cf0c060266ad037887ef5 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Thu, 21 Feb 2019 15:04:33 +0100 Subject: [PATCH] fix dns parsing for unknown header types --- app/dns/udpns.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/dns/udpns.go b/app/dns/udpns.go index 0e2967e58..bf4301034 100644 --- a/app/dns/udpns.go +++ b/app/dns/udpns.go @@ -5,7 +5,6 @@ package dns import ( "context" "encoding/binary" - fmt "fmt" "sync" "sync/atomic" "time" @@ -163,6 +162,7 @@ func (s *ClassicNameServer) HandleResponse(ctx context.Context, packet *udp_prot Expire: now.Add(time.Second * 600), } +L: for { header, err := parser.AnswerHeader() if err != nil { @@ -181,6 +181,10 @@ func (s *ClassicNameServer) HandleResponse(ctx context.Context, packet *udp_prot } if header.Type != recType { + if err := parser.SkipAnswer(); err != nil { + newError("failed to skip answer").Base(err).WriteToLog() + break L + } continue } @@ -189,19 +193,20 @@ func (s *ClassicNameServer) HandleResponse(ctx context.Context, packet *udp_prot ans, err := parser.AResource() if err != nil { newError("failed to parse A record for domain: ", domain).Base(err).WriteToLog() - break + break L } ipRecord.IP = append(ipRecord.IP, net.IPAddress(ans.A[:])) case dnsmessage.TypeAAAA: ans, err := parser.AAAAResource() if err != nil { newError("failed to parse A record for domain: ", domain).Base(err).WriteToLog() - break + break L } ipRecord.IP = append(ipRecord.IP, net.IPAddress(ans.AAAA[:])) default: if err := parser.SkipAnswer(); err != nil { newError("failed to skip answer").Base(err).WriteToLog() + break L } } } @@ -399,8 +404,6 @@ func (s *ClassicNameServer) findIPsForDomain(domain string, option IPOption) ([] ips = append(ips, aaaa...) } - fmt.Println("IPs for ", domain, ": ", ips) - if len(ips) > 0 { return toNetIP(ips), nil }