¿Cómo puedo vaciar la caché de DNS?

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

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

ipconfig /flushdns

En una máquina de Windows.

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

¿Necesita hacer esto para una aplicación del sistema, una aplicación de terceros o su aplicación?
¿Tercero supongo? Lo necesito para cuando hago ping a un servidor a través de Terminal Emulator.
Actualice su título para reflejar que desea una respuesta basada en CLI. Este es el ranking en Google y el 99% de las personas que buscan este título no tienen habilidades de root o CLI.
¿Alguna actualización aquí? como dijo @PJBrunet, tener root no es lo habitual, además los teléfonos actuales no permiten quitar batería. Busco vaciar el DSN porque al hacerlo solucioné mi "falla de IP" en Windows, está sucediendo lo mismo en mi teléfono, pero no hay shell en Android.

Respuestas (7)

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

Todas mis búsquedas en Google también muestran la sugerencia de "reinicio completo".
Estoy votando a la baja porque la respuesta requiere root y/o asume acceso de shell, lo cual no es realista para la mayoría de los usuarios de Android. El resto de la respuesta no resolvió mi problema. También creo que Matthew Read debería reconsiderar bloquear la pregunta porque esto no es un "trato hecho". El DNS es extremadamente complejo y habrá más respuestas legítimas de personas sin cuentas de Android aquí todavía, soy un ejemplo de eso. FWIW Tengo más de 10 de reputación y todavía no pude responder la pregunta.
@PJBrunet Para ser exactos, tiene 1 representante y 100 representantes de bonificación de asociación, que no cuenta ya que no lo ha ganado en este sitio. Consulte ¿Qué es una pregunta "protegida"? para más detalles. En cuanto a la pregunta, la desprotegeré por ahora.

Las direcciones se almacenan en caché durante 600 segundos (10 minutos) de forma predeterminada. Las búsquedas fallidas se almacenan en caché durante 10 segundos. Por todo lo que he visto, no hay nada incorporado para vaciar el caché. Aparentemente, este es un error informado en Android debido a la forma en que almacena el caché de DNS. Borrar el caché del navegador no toca el DNS, el "restablecimiento completo" lo borra porque simplemente se agota el tiempo de espera.

¿Podemos preguntar la razón subyacente por la que necesitamos borrar el caché de DNS? Tal vez hay otra solución que se pasa por alto porque no estamos viendo el panorama general.

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 "*" esto aún 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 se agota el tiempo de caché.
Parece que el almacenamiento en caché forzado de 10 minutos está arreglado en JB; consulte este compromiso . Para versiones anteriores, el comportamiento de la memoria caché de Java podría ajustarse mediante networkaddress.cache.ttly networkaddress.cache.negative.ttlen build.prop.
Fwiw, todavía hay algunos problemas de DNS (quizás diferentes) incluso en 4.3: es posible que las tabletas en wifi no obtengan una dirección IP para los nombres que las máquinas Linux y Windows (en la red que aloja el wifi) pueden resolver.

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

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

¿Cómo se realiza esto?
- Mantenga presionado el botón de encendido - Elija "Apagar" - Permita que el teléfono se apague por completo - Retire la batería y espere 30 segundos - Devuelva la batería - Vuelva a encender el teléfono. En mi experiencia, no es necesario quitar la batería, pero algunos han informado que no funciona si se salta este paso.
Quitar la batería es una tontería. Reiniciar funciona. Sospecho que el tiempo adicional para eso simplemente permite que se agote el tiempo de espera de un caché de DNS externo.

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

Hay varias "aplicaciones similares" enumeradas en Google Play, pero tenga en cuenta que la mayoría de ellas incluyen anuncios de Airpush y/o requieren permisos excesivos, razón por la cual no las nombré aquí.


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

La última opción, pero la más intensiva para el propio usuario, a menos que solo quiera esperar a que finalice la actualización: haga que sus usuarios vayan a configuración -> aplicaciones -> Ubicación de red -> Borrar datos

Otro breve tutorial menciona una manera diferente y fácil de vaciar el DNS (nuevamente, no lo probé yo mismo): Simplemente cambie al modo avión (¡vaya!, ¿no hay red?) y regrese (ah, ahí está) debería funcionar. Puede sonar estúpido, pero me imagino que cuando ingresa al modo avión, Android hace algo similar a /etc/init.d/networking stop, que tiene un DNS flush como efecto secundario.


dtumaykin proporcionó una solución muy fácil en los comentarios a continuación: simplemente cambiar al modo avión y volver ya podría ser suficiente (por supuesto, con el efecto secundario de que la red se cae 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 por n00bs.

Si alguien probó una de esas soluciones, la confirmación (o lo contrario) seguramente será bienvenida :)

Hay comandos de shell ndc resolver flushdefaultify ndc resolver flushif wlan0; requieren raíz. También existe el método NetworkManagementService.flushDefaultDnsCache() , que solo requería CHANGE_NETWORK_STATE antes de JB, pero luego se bloqueó en CONNECTIVITY_INTERNAL. Por lo tanto, aparentemente había una forma de limpiar el caché de DNS sin root (después de ajustar build.prop para eliminar el caché de nivel de Java), pero no funcionará en JB.
¡Gracias por la información adicional, @SergeyVlasov! ¿Sabe si alguno de los métodos que mencionó se activa con las dos soluciones propuestas mencionadas en último lugar en mi respuesta (o si funcionan, pero por una razón diferente)?
El encendido y apagado del modo avión funcionó para mí. Samsung Galaxy S4 Mini y CM12.1.
No puedo responder porque Matthew Read bloqueó la pregunta. Por favor, dale una bofetada por mí :-) El reinicio completo no funcionó para mí, el modo avión no funcionó, borrar la "ubicación" (según la respuesta) no funcionó, las horas de espera tampoco funcionaron. En el pasado, simplemente resolví esto cerrando la pestaña del navegador y abriendo una nueva pestaña. Hay una aplicación 8.8.8.8 "sin root" (DNS de Google); sin embargo, no puedo otorgar acceso VPN porque ya tengo una aplicación VPN por la que pagué. La solución para mí fue cambiar la configuración de "ubicación virtual" de la VPN o la solución fue detener e iniciar mi VPN. Asumiendo que mi VPN tiene su propio caché de DNS.
@PJBrunet No abofetearé a un mod (demasiado peligroso, podría cerrar mi cuenta;) y además, mis brazos no son lo suficientemente largos para llegar al extranjero). Pero obtener 10 repeticiones no es demasiado difícil (haga una buena pregunta y obtenga 2 votos a favor, o escriba una respuesta y obtenga 1 voto a favor); con eso, vuelve aquí y escribe tu respuesta :) ¡Gracias por compartir!
@Izzy Sí, es la parte dolorosa de StackExchange. Todas las reglas. Las conversaciones de comentarios están mal vistas. En cualquier caso, lo valioso es tener una buena respuesta para ayudar a la gente, que yo no puedo aportar. Mi respuesta "VPN" es sólida y posiblemente mejor que la respuesta aceptada que requiere root.
@PJBrunet luego ve a publicarlo, Matthew de alguna manera sintió la bofetada y quitó la barrera :)

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

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

En mi caso, solo tenía un nombre de dominio que necesitaba vaciar. Las sugerencias como alternar el Modo avión, realizar un reinicio completo o las acciones en chrome://net-internals/#dns no me funcionaron. En cambio, cambié temporalmente mi configuración de WiFi para usar el servidor de nombres de Google en 8.8.8.8.

Estos son los pasos que tomé:

  • Configuración -> WiFi -> toque la conexión actual y observe la dirección IP actual
  • Haga clic largo en la conexión actual -> Modificar red
  • Marque "Configuración avanzada"
  • Cambiar "Configuración de IP" a "estático"
  • Establezca "dirección IP" en la IP actual del primer paso
  • Establezca "Puerta de enlace" en su dirección IP pero con .1 como el cuarto número (Esto es solo una suposición. Si sabe que es algo diferente, utilícelo)
  • Establezca "DNS 1" en 8.8.8.8

Después de estos pasos, cuando pingedité el nombre de dominio en la consola, se resolvió en la dirección IP correcta y pareció escribir sobre la antigua en caché. Presumiblemente, visitar el dominio en un navegador tendrá el mismo efecto.

Cuando volví a WiFi y configuré "Configuración de IP" nuevamente en "DHCP", el dominio correcto continuó resolviéndose en la dirección IP actual.

Esto es en un Sony Xperia Z3 con Android 5.1.1

En un móvil Android 5.1 que tomó un DNS incorrecto ya que se cambió mucho entre dos WLAN; (un signo de interrogación en una conexión WLAN. No quería restaurar mi teléfono como lo hice una vez.. Engelsiz: DNS Changer lo arregló; )