Como posso liberar o cache do DNS?

27

Como posso limpar meu cache DNS no meu telefone Android? (Droid3, Gingerbread, enraizado para ser específico)

Idealmente, estou procurando um comando para executar através de um emulador de terminal, algo semelhante a

ipconfig /flushdns

Em uma máquina Windows.

Qual é a versão Linux disso?

Steve Robbins
fonte
Você precisa fazer isso para um aplicativo do sistema, aplicativo de terceiros ou seu aplicativo?
onik 01/09/11
Terceiro eu acho? Preciso disso quando faço ping em um servidor via Emulador de Terminal.
Steve Robbins
Atualize seu título para refletir que deseja uma resposta baseada em CLI. Isso está classificado no Google e 99% das pessoas que pesquisam este título não têm habilidades de raiz ou CLI.
PJ Brunet

Respostas:

11

Em um sistema Linux típico, o cache é limpo pela execução /etc/init.d/nscd restart, mas pelo menos minha ROM não usa o nscd para armazenar em cache o DNS. Você pode verificar se o seu faz, mas duvido. Eu já vi sugestões de que limpar o cache do navegador também limparia o cache do DNS, mas uma maneira certa é fazer uma reinicialização completa (desligamento, remova a bateria por 30 anos, reconecte a bateria e inicialize).

onik
fonte
11
Todo o meu Google também traz a sugestão de "reinicialização completa".
Chahk 01/09/11
Estou com voto negativo porque a resposta requer root e / ou assume acesso ao shell, o que não é realista para a maioria dos usuários do Android. O restante da resposta não resolveu meu problema. Também acredito que Matthew Read deve reconsiderar bloquear a pergunta, porque isso absolutamente não é um "acordo fechado". O DNS é extremamente complexo e ainda haverá respostas mais legítimas de pessoas sem contas do Android, sou um exemplo disso. FWIW Tenho mais de 10 reputação e ainda não consegui responder à pergunta.
PJ Brunet
@PJBrunet Para ser exato, você tem 1 representante e 100 representantes do bônus de associação, o que não conta, pois você não o ganhou neste site. Consulte O que é uma pergunta "protegida"? para mais detalhes. Quanto à questão, vou desprotegê-la por enquanto.
Onik
14

Os endereços são armazenados em cache por 600 segundos (10 minutos) por padrão. As pesquisas com falha são armazenadas em cache por 10 segundos. De tudo o que vi, não há nada incorporado para liberar o cache. Aparentemente, esse é um bug relatado no Android devido à maneira como ele armazena o cache do DNS. A limpeza do cache do navegador não toca no DNS, a "reinicialização forçada" o limpa porque simplesmente atinge o tempo limite.

Podemos perguntar o motivo subjacente da necessidade de limpar o cache do DNS? Talvez exista outra solução perdida, porque não estamos olhando para o quadro geral.

user8522
fonte
2
Não tenho certeza sobre o OP, mas tenho um caso de uso em que minha rede doméstica atende endereços como server.home.mydomain.com, mas meu ISP resolve * .mydomain.com (para qualquer valor de "*" isso ainda não está mapeado) para www.mydomain.com, se meu telefone estiver em 3G / 4G, então às vezes não consigo acessar minha rede doméstica até o tempo limite do cache.
TomG
Parece que o cache forçado de 10 minutos foi corrigido no JB - veja este commit . Para versões mais antigas, o comportamento do cache Java poderia ser ajustado por networkaddress.cache.ttle networkaddress.cache.negative.ttldentro build.prop.
Sergey Vlasov
Fwiw, ainda existem alguns problemas de DNS (talvez diferentes), mesmo no 4.3 - os tablets no wifi podem não obter um endereço IP para nomes que as máquinas Linux e Windows (na rede que hospeda o wifi) podem resolver.
22814 Jon Jones
7

A única maneira de fazer isso no Android é fazer uma reinicialização completa. As ferramentas de linha de comando necessárias normalmente não estão disponíveis, no entanto, em meus testes, uma reinicialização rígida sempre fez o truque para mim (Galaxy Nexus e HTC Desire, várias ROMs).

Isso é trabalhoso, mas é mais rápido que o tempo limite do cache de 10 minutos.

Martin
fonte
Como alguém faz isso?
Steve Robbins
11
- Mantenha pressionado o botão liga / desliga - Escolha "Desligar" - Permita que o telefone desligue completamente - Remova a bateria e aguarde 30s - Retorne a bateria - Ligue o telefone novamente. Na minha experiência, remover a bateria não é necessário, mas alguns relataram que não funcionará se você perder esta etapa.
Martin
2
Remover a bateria é um absurdo. Reiniciar funciona. Eu suspeito que o tempo adicional para isso simplesmente permita que um cache DNS externo se esgote.
Matthias Urlichs
5

Também existem aplicativos como o Internet Booster prometendo "limpar o cache do DNS" (entre outras coisas). Eu não tentei fazer isso sozinho e, além disso, parece que não há maneira de fazer apenas isso (apenas um botão "otimizar" que "aplica melhorias"); também seus efeitos podem diferir entre os dispositivos (diz a descrição do aplicativo) - mas pode ser melhor do que uma reinicialização. Btw: apesar de não mencionar raiz como requisito, ainda pode ser necessário.

Existem vários "aplicativos semelhantes" listados no Google Play - mas lembre-se de que a maioria deles inclui anúncios Airpush e / ou deseja permissões excessivas, por isso não os nomeiei aqui.


Outra solução possível (não testada por mim) que encontrei no MadPC , aparentemente citando a resposta do user8522 antes de declarar:

A última opção, mas mais intensiva para o usuário, a menos que ele queira apenas esperar a atualização: faça com que os usuários acessem as configurações -> aplicativos -> local da rede -> limpar dados

Outro breve tutorial menciona uma maneira fácil e diferente de liberar o DNS (novamente, eu mesmo não testei isso): basta alternar para o modo avião (oops, sem rede?) E voltar (ah, aí está) deve fazer o truque. Pode parecer estúpido, mas eu poderia imaginar que ao entrar no modo avião, o Android faz algo semelhante ao /etc/init.d/networking stopque tem um DNS flush como efeito colateral.


Uma solução muito fácil foi fornecida por dtumaykin nos comentários abaixo: basta alternar para o modo avião e voltar já (é claro, com o efeito colateral da rede sendo desativado por alguns segundos;) Embora possa não funcionar em alguns dispositivos, vale a pena tentar: sem instalações extras e facilmente executadas até pelo n00bs.

Se alguém tentou uma dessas soluções, a confirmação (ou o oposto) é certamente bem-vinda :)

Izzy
fonte
3
Existem comandos shell ndc resolver flushdefaultife ndc resolver flushif wlan0; eles exigem raiz. Há também o método NetworkManagementService.flushDefaultDnsCache () , que exigiu apenas CHANGE_NETWORK_STATE antes do JB, mas foi bloqueado para CONNECTIVITY_INTERNAL. Aparentemente, havia uma maneira hackeada de limpar o cache DNS sem raiz (após o ajuste build.prop para eliminar o cache no nível do Java), mas não funcionará no JB.
Sergey Vlasov
Obrigado pelas informações adicionais, @SergeyVlasov! Você sabe se algum dos métodos mencionados foi acionado pelas duas soluções propostas mencionadas por último na minha resposta (ou se elas funcionam, mas por um motivo diferente)?
Izzy
4
O modo avião ligado / desligado funcionou para mim. Samsung Galaxy S4 Mini e CM12.1.
Dtumaykin
Não posso responder porque Matthew Read bloqueou a pergunta. Dê um tapa nele para mim :-) A reinicialização difícil não funcionou para mim, o modo avião não funcionou, a limpeza de "local" (conforme a resposta) não funcionou, o horário de espera também não funcionou. No passado, eu simplesmente resolvi isso fechando a guia do navegador e abrindo uma nova guia. No entanto, não há um aplicativo 8.8.8.8 "no root" (DNS do Google). Não posso conceder acesso à VPN porque já tenho um aplicativo VPN pelo qual paguei. A solução para mim foi alterar a configuração de "local virtual" da VPN ou a solução foi parar e iniciar minha VPN. Supondo que minha VPN tenha seu próprio cache DNS.
PJ Brunet
@PJBrunet Não vou dar um tapa em um mod (muito perigoso, ele pode fechar minha conta;) e, além disso, meus braços não são longos o suficiente para chegar ao exterior. Mas ganhar 10 repetições não é muito difícil (faça uma boa pergunta recebendo 2 votos positivos ou escreva uma resposta recebendo 1 voto positivo); com isso, volte aqui e escreva sua resposta :) Obrigado por compartilhar!
Izzy
2

Nas versões modernas do Android, há uma opção para limpar o cache DNS do Chrome em chrome: // net-internals / # dns

João Costa
fonte
não funcionou para mim, ainda tinha que fazer um hard reboot
Cerveser
0

No meu caso, eu tinha apenas um nome de domínio que precisava liberado. Sugestões como alternar o modo avião, executar uma reinicialização forçada ou as ações no chrome: // net-internals / # dns não funcionaram para mim. Em vez disso, alterei temporariamente minhas configurações de WiFi para usar o servidor de nomes do Google em 8.8.8.8.

Estes são os passos que tomei:

  • Configurações -> WiFi -> toque na conexão atual e observe o endereço IP atual
  • Longo clique em conexão atual -> Modificar rede
  • Marque "Configurações avançadas"
  • Altere "configurações de IP" para "estático"
  • Defina "Endereço IP" para o IP atual desde o primeiro passo
  • Defina "Gateway" como seu endereço IP, mas com 0,1 como o quarto número (isso é apenas um palpite. Se você sabe que é algo diferente, use isso)
  • Defina "DNS 1" como 8.8.8.8

Após essas etapas, quando pingeditei o nome de domínio no console, ele foi resolvido para o endereço IP correto e parecia escrever sobre o antigo em cache. Presumivelmente, visitar o domínio em um navegador terá o mesmo efeito.

Quando voltei ao WiFi e defina "Configurações de IP" de volta para "DHCP", o domínio correto continuou a ser resolvido para o endereço IP atual.

Este é um Sony Xperia Z3 executando o Android 5.1.1

pix
fonte
0

Em um Adroid 5.1 Mobile que adotou um DNS errado, pois é alternado entre duas WLANs (um ponto de interrogação em uma conexão WLAN. Eu não queria restaurar meu telefone como o fiz uma vez .. Engelsiz: DNS Changer o corrigiu; )

user237310
fonte