O módulo do resolvedor de DNS fornece proteção ao usuário para interceptação de DNS de atualização de configuração e melhor desempenho de rede para DNS e resoluções. O módulo contém o código que implementa o stub DNS resolvedor, que traduz nomes como www.google.com em endereços IP endereços IP, como 2001:db8::1. O resolvedor de stubs DNS retorna Elementos da API Java, como InetAddress#getAllByName e Network#getAllByName, além do funções de rede nativas e implementa o envio e receber consultas DNS e armazenar os resultados em cache.
Mudanças no Android 10
Em dispositivos com o Android 9 e versões anteriores, o código do resolvedor de DNS é distribuído
Bionic e netd
. As buscas DNS são centralizadas no
Daemon netd
para permitir o armazenamento em cache de todo o sistema, enquanto os apps
chamar funções (como getaddrinfo
) no Bionic. A consulta é enviada
por um soquete UNIX para /dev/socket/dnsproxyd
ao
Daemon netd
, que analisa a solicitação e chama
getaddrinfo
novamente para emitir buscas DNS e depois armazena os resultados em cache
para que outros apps possam usá-las. A implementação do resolvedor de DNS foi principalmente
contido em bionic/libc/dns/
e parcialmente em
system/netd/server/dns
.
O Android 10 move o código do resolvedor de DNS para
O system/netd/resolv,
a converte para C++, depois moderniza e
refatora o código. O código do Bionic continua existindo para o app
motivos de compatibilidade, mas não é mais chamado pelo sistema. Essas fontes
os caminhos são afetados pela refatoração:
bionic/libc/dns
system/netd/client
system/netd/server/dns
system/netd/server/DnsProxyListener
system/netd/server/ResolverController
system/netd/resolv
Formato e dependências
O módulo do resolvedor de DNS (`com.android.resolv`) é entregue como uma
arquivo APEX e está dinamicamente vinculado por
netd
No entanto, netd
não é um
uma dependência, já que o módulo fornece ao soquete local
/dev/socket/dnsproxyd
diretamente. O endpoint Binder para o
a configuração do resolvedor foi movida de netd
para o resolvedor,
o que significa que o serviço do sistema pode chamar diretamente o módulo do resolvedor
sem passar por netd
.
O módulo do resolvedor de DNS depende do libc
(Bionic) e
vincula estaticamente as dependências. nenhuma outra biblioteca é necessária.
Resolução .local mDNS
Desde novembro de 2021, o resolvedor do Android oferece suporte à resolução mDNS .local, que implementa
"5.1 Consultas DNS multicast únicas" na RFC 6762 para enviar consultas DNS padrão cegamente para
224.0.0.251:5353 ou [FF02::FB]:5353. A resolução de mDNS é compatível com transparência
chamando getaddrinfo()
com um nome de host terminado em *.local
.
A resolução mDNS .local aumenta a funcionalidade atual do getaddrinfo()
para conseguir os endereços. Se um dispositivo oferecer suporte à resolução mDNS .local, o
A API getaddrinfo()
envia consultas mDNS para 224.0.0.251:5353 ou [FF02::FB]:5353
e retorna os endereços locais. Se um dispositivo não oferecer suporte a mDNS .local
a resolução, o método da API getaddrinfo()
enviará uma consulta DNS ao DNS
servidor.
O código está no AOSP, localizado em packages/modules/DnsResolver
. Os usuários podem manter
o design atual do mDNS para receber os endereços ou use getaddrinfo()
. O comportamento
esse recurso é como uma consulta DNS normal enviada aos endereços multicast do mDNS. Este recurso não tem
na integridade do sistema.
Os usuários podem usar o comando adb shell ping6 HOSTNAME.local
,
em que HOSTNAME é o nome do host de um dispositivo de destino na LAN, por exemplo,
adb shell ping6 ipad.local
VPNs e conexões de dados móveis são excluídas da resolução .local.