30 votos

¿Cómo puedo vaciar la caché DNS?

¿Cómo puedo borrar la caché de DNS en mi teléfono Android? (Droid3, Gingerbread, con root para ser específico)

Idealemente estoy buscando un comando para ejecutar a través de un emulador de terminal, algo similar a

ipconfig /flushdns

En una máquina con Windows.

¿Cuál es la versión de Linux de esto?

0 votos

¿Necesitas hacer esto para una aplicación del sistema, una aplicación de terceros o tu propia aplicación?

0 votos

¿Tercero, supongo? Lo necesito para cuando hago ping a un servidor a través del Emulador de Terminal.

0 votos

Por favor, actualiza tu título para reflejar que deseas una respuesta basada en CLI. Esto está clasificado en Google y el 99% de las personas que buscan este título no tienen habilidades de root o CLI.

15voto

memius Puntos 1529

Las direcciones se almacenan en caché durante 600 segundos (10 minutos) por defecto. Las búsquedas fallidas se almacenan en caché durante 10 segundos. Por lo que he visto, no hay nada integrado para vaciar la caché. Aparentemente, esto es un error reportado en Android debido a la forma en que almacena la caché DNS. Al limpiar la caché del navegador no se elimina la caché DNS, el "reset duro" la elimina porque simplemente expira.

¿Podemos preguntar cuál es la razón subyacente para necesitar vaciar la caché DNS? Quizás hay otra solución que se nos ha pasado por alto porque no estamos viendo el panorama completo.

2 votos

No estoy seguro sobre el OP, pero tengo un caso de uso en el que mi red doméstica sirve direcciones como server.home.mydomain.com, pero mi ISP resuelve *.mydomain.com (para cualquier valor de "*" que no esté asignado) a www.mydomain.com si mi teléfono está en 3G/4G, por lo que a veces no puedo acceder a mi red doméstica hasta que el caché se agote.

0 votos

Parece que el almacenamiento en caché forzado de 10 minutos está arreglado en JB — ver este commit. Para versiones antiguas, el comportamiento de caché de Java se podía ajustar con networkaddress.cache.ttl y networkaddress.cache.negative.ttl en build.prop.

0 votos

Para lo que vale, todavía hay algunos problemas de DNS (tal vez diferentes) incluso en 4.3: las tabletas en wifi pueden no obtener una dirección IP para los nombres que las máquinas Linux y Windows (en la red que aloja el wifi) pueden resolver.

11voto

Chris Roberts Puntos 7543

En un sistema Linux típico, la caché se borra ejecutando /etc/init.d/nscd restart, pero al menos mi ROM no utiliza nscd para cachear DNS. Puedes verificar si el tuyo lo hace, pero lo dudo. He visto sugerencias de que borrar la caché del navegador también borraría la caché de DNS, pero una forma segura es hacer un reinicio completo (apagar, quitar la batería durante 30 segundos, volver a colocar la batería e iniciar).

1 votos

Todas mis búsquedas en Google también sugieren la opción de "reinicio forzado".

0 votos

Estoy votando en negativo porque la respuesta requiere acceso root y/o asume acceso a la terminal, lo cual no es realista para la mayoría de los usuarios de Android. El resto de la respuesta no resolvió mi problema. Además, creo que Matthew Read debería reconsiderar cerrar la pregunta porque esto no es absolutamente un "acuerdo cerrado". DNS es extremadamente complejo y habrá más respuestas legítimas de personas que no tienen cuentas de Android aquí todavía, yo soy un ejemplo de eso. Por cierto, tengo una reputación de más de 10 y aún así no pude responder la pregunta.

0 votos

@a PJBrunet Para ser preciso, tienes 1 reputación y 100 reputación de bonificación de asociación, la cual no cuenta ya que no la has ganado en este sitio. Mira ¿Qué es una pregunta "protegida"? para más detalles. En cuanto a la pregunta, la desprotegeré por ahora.

7voto

Martin Puntos 794

La única forma de hacer esto en Android es hacer un reinicio duro. Las herramientas de línea de comandos necesarias normalmente no están disponibles, sin embargo en mis pruebas un reinicio duro siempre ha funcionado para mí (Galaxy Nexus, y HTC Desire, varias ROMs).

Esto es molesto, pero es más rápido que el tiempo de espera de caché de 10 minutos.

0 votos

¿Cómo se realiza esto?

1 votos

- Mantén presionado el botón de encendido - Elige "Apagar" - Permite que el teléfono se apague completamente - Retira la batería y espera 30 segundos - Vuelve a colocar la batería - Enciende el teléfono nuevamente. En mi experiencia, no es necesario quitar la batería, pero algunos han reportado que no funciona si se omite este paso.

4 votos

Eliminar la batería es absurdo. Reiniciar funciona. Sospecho que el tiempo adicional para eso simplemente permite que alguna caché de DNS externa caduque.

6voto

Izzy Puntos 45544

También hay aplicaciones como Internet Booster que prometen "limpiar la caché de DNS" (entre otras cosas). No lo probé por mí mismo, y además no parece haber una forma de hacer solo eso (solo un botón de "optimizar" que "aplica mejoras"); además, sus efectos pueden diferir entre dispositivos (según la descripción de la aplicación) - pero podría ser mejor que reiniciar. Por cierto: aunque no se menciona el acceso root como requisito, podría ser necesario.

En Google Play hay varias "aplicaciones similares" listadas - pero ten en cuenta que la mayoría de ellas incluyen anuncios de Airpush y/o solicitan permisos excesivos, por eso no las nombro aquí.


Otra posible solución (no probada por mí) que encontré en MadPC, aparentemente citando la respuesta de user8522 antes de afirmar:

La última opción pero más intensiva en el usuario mismo a menos que quieran solo esperar la actualización: Haz que tus usuarios vayan a configuración -> aplicaciones -> Ubicación de red -> Borrar datos

Otro breve howto menciona una forma fácil diferente de limpiar DNS (una vez más, no probé esto por mí mismo): Simplemente cambiar al modo avión (¡ups, ¿sin red?) y luego volver (¡ahí está) debería funcionar. Puede sonar estúpido, pero podría imaginar que al entrar en modo avión Android hace algo similar a /etc/init.d/networking stop, lo cual tiene un efecto secundario de limpiar DNS.


Una solución muy fácil fue proporcionada por dtumaykin en los comentarios a continuación: simplemente cambiar al modo avión y volver podría solucionarlo (por supuesto, con el efecto secundario de que la red se caiga durante un par de segundos ;) Aunque podría no funcionar en algunos dispositivos, vale la pena intentarlo: sin instalaciones adicionales y fácil de realizar incluso para los novatos.

Si alguien ha probado una de esas soluciones, ¡la confirmación (o lo contrario) es bienvenida :)

3 votos

Hay comandos de shell ndc resolver flushdefaultif y ndc resolver flushif wlan0; requieren acceso de root. También está el método NetworkManagementService.flushDefaultDnsCache(), que solo requería CHANGE_NETWORK_STATE antes de JB, pero luego se bloqueó a CONNECTIVITY_INTERNAL. Aparentemente, había una forma hackeada de limpiar la caché de DNS sin acceso de root (después de ajustar el build.prop para eliminar la caché a nivel de Java), pero no funcionará en JB.

0 votos

¡Gracias por la información adicional, @SergeyVlasov! ¿Sabes si alguno de los métodos que mencionaste se activa por las dos soluciones propuestas mencionadas al final de mi respuesta (o si funcionan, pero por una razón diferente)?

5 votos

El modo avión encendido-apagado funcionó para mí. Samsung Galaxy S4 Mini y CM12.1.

2voto

Joao Costa Puntos 121

En las versiones modernas de Android hay una opción para borrar la caché DNS de Chrome en chrome://net-internals/#dns

0 votos

No funcionó para mí, todavía tuve que hacer un reinicio completo

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X