Skip to content

Commit f332394

Browse files
committed
More heuristics to detect lying resolvers
1 parent b74b46c commit f332394

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

dnscrypt-proxy/serversInfo.go

+19-4
Original file line numberDiff line numberDiff line change
@@ -621,11 +621,26 @@ func fetchDNSCryptServerInfo(proxy *Proxy, name string, stamp stamps.ServerStamp
621621
false,
622622
)
623623
if err == nil {
624-
if msg.Rcode != dns.RcodeNameError && msg.Id == 0xcafe {
625-
dlog.Warnf("[%s] may be a lying resolver -- skipping", name)
626-
return ServerInfo{}, fmt.Errorf("[%s] unexpected catchall response", name)
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())
631+
}
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]
640+
}
641+
return ServerInfo{}, fmt.Errorf("[%s] unexpected record: [%s]", name, cause)
642+
}
627643
}
628-
dlog.Debugf("[%s] seems to be also accessible over plain DNS", name)
629644
}
630645
}
631646

0 commit comments

Comments
 (0)