Il modulo resolver DNS offre protezione all'utente per l'intercettazione DNS e aggiornamenti della configurazione, nonché un miglioramento delle prestazioni di rete per DNS risoluzioni. Il modulo contiene il codice che implementa lo stub DNS resolver, che traduce nomi quali www.google.com in IP come 2001:db8::1. Il resolver stub DNS esegue il backup Elementi dell'API Java come InetAddress#getAllByName e Network#getAllByName e funzioni di networking native e implementa l'invio e la riceve query DNS e memorizza i risultati nella cache.
Modifiche in Android 10
Sui dispositivi con Android 9 e versioni precedenti, il codice resolver DNS è distribuito
Bionico e netd
. Le ricerche DNS sono centralizzate
netd
daemon per consentire la memorizzazione nella cache a livello di sistema, mentre le app
funzioni di chiamata (ad esempio getaddrinfo
) in Bionic. La query viene inviata
tramite un socket UNIX per /dev/socket/dnsproxyd
al
netd
daemon, che analizza la richiesta e le chiamate
getaddrinfo
per eseguire di nuovo ricerche DNS, quindi memorizza i risultati nella cache
in modo che altre app possano usarle. L'implementazione del resolver DNS era per lo più
contenuto in bionic/libc/dns/
e in parte
system/netd/server/dns
.
Android 10 sposta il codice del resolver DNS in
system/netd/resolv,
lo converte in C++, quindi modernizza e
esegue il refactoring del codice. Il codice in Bionic continua a esistere per l'app
per motivi di compatibilità, ma non viene più chiamato dal sistema. Queste fonti
sono interessati dal refactoring:
bionic/libc/dns
system/netd/client
system/netd/server/dns
system/netd/server/DnsProxyListener
system/netd/server/ResolverController
system/netd/resolv
Formato e dipendenze
Il modulo resolver DNS ("com.android.resolv") viene fornito come
APEX ed è collegato dinamicamente da
netd
; tuttavia, netd
non è un
quando il modulo gestisce il socket locale
/dev/socket/dnsproxyd
direttamente. L'endpoint Binder per
la configurazione del resolver è stata spostata da netd
al resolver
vale a dire che il servizio di sistema può chiamare direttamente il modulo resolver
senza passare per netd
.
Il modulo resolver DNS dipende da libc
(Bionic) e
collega staticamente le sue dipendenze; non sono necessarie altre librerie.
Risoluzione .local mDNS
A partire da novembre 2021, il resolver Android supporta la risoluzione .local mDNS, che implementa
"5.1 Query DNS multicast One-Shot" in RFC 6762 per inviare automaticamente query DNS standard
224.0.0.251:5353 o [FF02::FB]:5353. La risoluzione mDNS è supportata in modo trasparente
chiamando getaddrinfo()
con un nome host che termina con *.local
.
La risoluzione .local mDNS aumenta la funzionalità esistente di getaddrinfo()
per ottenere gli indirizzi. Se un dispositivo supporta la risoluzione .local mDNS, il
L'API getaddrinfo()
invia le query mDNS a 224.0.0.251:5353 o [FF02::FB]:5353
e restituisce gli indirizzi locali. Se un dispositivo non supporta mDNS .local
risoluzione del problema, il metodo API getaddrinfo()
invia una query DNS al DNS
o server web.
Il codice è in formato AOSP, si trova in packages/modules/DnsResolver
. Gli utenti possono mantenere
design mDNS attuale per ottenere gli indirizzi oppure usa getaddrinfo()
. Il comportamento di
Questa funzionalità è simile a una normale query DNS inviata agli indirizzi multicast mDNS. Questa funzione non ha
l'impatto sull'integrità del sistema.
Gli utenti possono usare il comando adb shell ping6 HOSTNAME.local
,
dove HOSTNAME è il nome host di un dispositivo di destinazione sulla LAN, ad esempio
adb shell ping6 ipad.local
.
Le connessioni dati mobili e VPN sono escluse dalla risoluzione .local.