Skip to content

Commit 6dd22be

Browse files
committed
More heuristics to detect valid plain DNS responses
1 parent f332394 commit 6dd22be

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

dnscrypt-proxy/serversInfo.go

+21-17
Original file line numberDiff line numberDiff line change
@@ -620,25 +620,29 @@ func fetchDNSCryptServerInfo(proxy *Proxy, name string, stamp stamps.ServerStamp
620620
&name,
621621
false,
622622
)
623-
if err == nil {
624-
if msg.Id != 0xcafe {
625-
dlog.Infof("[%s] handling of DNS message identifiers is broken", name)
626-
}
627-
for _, rr := range msg.Answer {
628-
if rr.Header().Rrtype == dns.TypeA || rr.Header().Rrtype == dns.TypeAAAA {
629-
dlog.Warnf("[%s] may be a lying resolver -- skipping", name)
630-
return ServerInfo{}, fmt.Errorf("[%s] unexpected record: [%s]", name, rr.String())
623+
if err == nil && len(msg.Question) > 0 {
624+
question := msg.Question[0]
625+
if question.Qtype == query.Question[0].Qtype && strings.EqualFold(question.Name, query.Question[0].Name) {
626+
dlog.Debugf("[%s] also serves plaintext DNS", name)
627+
if msg.Id != 0xcafe {
628+
dlog.Infof("[%s] handling of DNS message identifiers is broken", name)
631629
}
632-
}
633-
for _, rr := range msg.Extra {
634-
if rr.Header().Rrtype == dns.TypeTXT {
635-
dlog.Warnf("[%s] may be a dummy resolver -- skipping", name)
636-
txts := rr.(*dns.TXT).Txt
637-
cause := ""
638-
if len(txts) > 0 {
639-
cause = txts[0]
630+
for _, rr := range msg.Answer {
631+
if rr.Header().Rrtype == dns.TypeA || rr.Header().Rrtype == dns.TypeAAAA {
632+
dlog.Warnf("[%s] may be a lying resolver -- skipping", name)
633+
return ServerInfo{}, fmt.Errorf("[%s] unexpected record: [%s]", name, rr.String())
634+
}
635+
}
636+
for _, rr := range msg.Extra {
637+
if rr.Header().Rrtype == dns.TypeTXT {
638+
dlog.Warnf("[%s] may be a dummy resolver -- skipping", name)
639+
txts := rr.(*dns.TXT).Txt
640+
cause := ""
641+
if len(txts) > 0 {
642+
cause = txts[0]
643+
}
644+
return ServerInfo{}, fmt.Errorf("[%s] unexpected record: [%s]", name, cause)
640645
}
641-
return ServerInfo{}, fmt.Errorf("[%s] unexpected record: [%s]", name, cause)
642646
}
643647
}
644648
}

0 commit comments

Comments
 (0)