app: a DNS reply is not a DNS answer
The probe counted any well-formed packet from the server as "the server answers", checking only the transaction id and a minimum length. REFUSED and SERVFAIL are well-formed packets. So a server actively refusing this client would have been reported as healthy, and the finding — whose whole output is "the network is fine, your device is not" — would have pointed confidently at the wrong component. It now requires rcode 0 and at least one record, and reports a refusal as what it is: a working server saying no, which points back at the network. The rcode is named rather than numbered, because "REFUSED" is a fact an operator can act on and "rcode 5" is a lookup. Caught by decoding what fmr's router actually replied — ab cd 81 80 00 01 00 02, NOERROR with two answers — after realising the earlier check only counted bytes. The reply was genuinely good, so the finding on the tablet stands; the check was wrong regardless. The advice is broader too. That tablet's fault survived a reboot, which makes "toggle wifi and it clears" wrong as a flat claim: it now says what to look at when a restart does not fix it — something on the device filtering DNS, or a per-client rule on the router. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2ed4d1f478
commit
cfa58e8d60
@@ -681,11 +681,15 @@ class RunViewModel(app: Application) : AndroidViewModel(app) {
|
||||
confidence = Confidence.HIGH,
|
||||
title = "This device cannot resolve names, but the DNS server is fine ($where)",
|
||||
description = "A DNS query sent straight from this device was " +
|
||||
"answered by ${str("servers") ?: "the configured server"}, yet " +
|
||||
"asking Android to resolve the same name fails. The network is " +
|
||||
"working; this device's resolver is not. Turning wifi off and on " +
|
||||
"again, or rejoining the network, usually clears it. If it " +
|
||||
"returns after a restart, look at the network instead.",
|
||||
"answered by ${str("servers") ?: "the configured server"} with " +
|
||||
"a valid result, yet asking Android to resolve the same name " +
|
||||
"fails. Whatever is wrong sits between this device's resolver " +
|
||||
"and a server that demonstrably works. " +
|
||||
"Turning wifi off and on, or rejoining the network, clears the " +
|
||||
"common case. If it survives a restart it is not a stuck " +
|
||||
"resolver: look for something on this device that filters DNS " +
|
||||
"— an ad blocker, a private-DNS or VPN app — or a per-device " +
|
||||
"rule on the router aimed at this client.",
|
||||
evidenceRefs = listOf(EvidenceRef(t.id)),
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user