addDnsServer Bad Address: ohun ti Android n ṣayẹwo gan
Aṣilẹ Bad address lati addDnsServer jẹ ayẹwo fọmati ibilẹ, kii ṣe ikuna DNS. Ṣayẹwo literal naa, yọ loopback ati wildcard kuro, lẹhinna dan iwọle wo.
Iye naa de VpnService.Builder.addDnsServer gẹgẹbi okun ati builder kọ o nibẹ ṣaaju ki a to fi ohunkohun mulẹ. Ikọ yii jẹ ti ibilẹ: ko si resolver ti a kan, ko si tunnel, ati ohun ti o kuna ni ayẹwo fọmati, kii ṣe DNS.
Eyi ṣe pataki nitori app VPN deede ni awọn igbewọle DNS mẹta ti o jọra: iye ninu profaili, iye ti server fi ranṣẹ, ati Private DNS ni ipele eto. Awọn meji akọkọ nikan ni o de ipe yii.
Ohun elo igbaradi ṣayẹwo ariyanjiyan lẹsẹkẹsẹ
VpnService.Builder kii ṣe tunnel. O jẹ ohun elo igbaradi ti o kojọ awọn adirẹsi, awọn ipa-ọna ati awọn server, ati establish() nikan ni o yi awọn atokọ pada si ParcelFileDescriptor alaaye ati interface. A ṣayẹwo titẹsi DNS nigbati o pe addDnsServer.
Awọn abajade meji: ipa-ọna kukuru ati laini alaye mọọmọ, ati catch alaibikita fi tunnel laisi resolver silẹ.
Builder tọju eyikeyi atokọ ti o fun; fifi server kan kun ti o kọja ayẹwo jẹri nikan pe a ṣayẹwo okun naa gẹgẹbi literal adirẹsi nigba ikole.
Kini ariyanjiyan le jẹ
Paramita jẹ adirẹsi, kii ṣe endpoint. Itọkasi Builder gba literal IPv4 tabi IPv6, ati ayẹwo jẹ ti nọmba nikan: android.net.InetAddresses.parseNumericAddress ni oju gbangba ti parser yẹn lati API 29.
Iṣiro ti o wu ni o dabi eyi:
| Input | Result | Reason |
|---|---|---|
10.8.0.1 | accepted | IPv4 literal |
2606:4700:4700::1111 | accepted | IPv6 literal |
dns.example.com | rejected | hostname; numeric parsing does not resolve it |
10.8.0.1:53 | rejected | port belongs to your own config model |
https://dns.example.com/dns-query | rejected | DoH URL, a different configuration path |
127.0.0.1 | rejected | loopback is not a remote resolver |
0.0.0.0 or :: | accepted by the builder | parses fine, but names no destination; only your own validator rejects it |
Ẹya naa ni ipa lori bii o ṣe ṣayẹwo, kii ṣe ohun ti builder gba. InetAddresses wa lati API 29, nitorinaa lori Android 10 ayẹwo jẹ ipe kan; addDnsServer(InetAddress) ni irisi atilẹba, String ni afikun tuntun. Labẹ API 29 InetAddress.getByName yoo yanju orukọ host pẹlu wiwa nẹtiwọki ti o dina.
A kọ loopback nibi, wildcard kii ṣe bẹẹ
Awọn alabara VPN ori tabili maa nfi stub resolver wọn ranṣẹ si 127.0.0.1:53; didakọ eyi sinu profaili Android mu iye kan wa ti o ṣalaye ẹrọ ibilẹ, ati nibẹ ko si ẹrọ ibilẹ. Builder kọ iru ọran yii nikan: adirẹsi null tabi loopback ju IllegalArgumentException.
Wildcard ni ọran idakeji ati nibẹ ni ọpọlọpọ awọn kika ti ṣe aṣiṣe. 0.0.0.0 ati :: kii ṣe loopback, nitorinaa builder gba wọn; a ko ju ohunkohun nigba ikole. Lẹhinna interface dide pẹlu titẹsi ti ko darukọ ibi-afẹde. Mimua eyi jẹ iṣẹ validator rẹ: ka isAnyLocalAddress si igbewọle aitọ.
Ṣayẹwo lẹẹkan ni opin iṣeto
Atunṣe poku ni lati ṣayẹwo nibiti okun naa ti wọ inu awoṣe rẹ:
import android.net.InetAddresses
import java.net.InetAddress
private fun dnsLiteralOrNull(raw: String?): InetAddress? {
val text = raw?.trim().orEmpty()
if (text.isEmpty()) return null
val address = try {
InetAddresses.parseNumericAddress(text)
} catch (e: IllegalArgumentException) {
return null
}
return address.takeUnless { it.isAnyLocalAddress || it.isLoopbackAddress }
}
Abajade null di aṣiṣe ipele aaye ti o gbe ọrọ ti o jẹbi, ati pe o jẹ irisi nikan ti atilẹyin le ṣiṣẹ lori. Ni ọna aṣeyọri ohun elo naa wọ taara sinu builder.addDnsServer(address), ki o mu IllegalArgumentException pataki, kii ṣe Exception.
Maṣe rọpo pẹlu resolver gbangba nigbati a kọ iye ti a pinnu; profaili ti o fi DNS gbangba han ni idakẹjẹ yoo sopọ, ṣugbọn awọn orukọ inu yoo dawọ yanju.
Jẹrisi iwọle nigbati interface ba wa
Gbigba builder jẹ aaye ayẹwo akọkọ, kii ṣe eyi ti o kẹhin. Nigbati interface ba dide LinkProperties.getDnsServers() royin ohun ti nẹtiwọki gba gan, ati adb shell dumpsys connectivity tẹ awọn ohun-ini kanna jade lati ita.
Private DNS jẹ iṣakoso lọtọ ati ko kọja ninu ariyanjiyan yii; orukọ host ti olupese DoT jẹ ti eto eto, kii ṣe aaye IP.
Ṣaaju ki o to yi parser profaili pada lẹẹkansi, ṣe igbasilẹ okun aise ati orisun rẹ, jẹrisi pe o jẹ literal kii ṣe orukọ host, pe kii ṣe loopback tabi wildcard, ki o si fi ohun elo ti a ṣayẹwo ranṣẹ.