¿Por qué Android ignora mis cambios de etc / hosts en el navegador?

19

He a montar /syscomo rw, añadido a una entrada etc/hosts(por ejemplo 10.0.0.1 x.com www.x.com) y reinicia el dispositivo.

Después de reiniciar, si verifico etc/hosts, la entrada está bien. Si hago ping x.com, hace sonar la dirección IP correcta que ingresé.

Pero, si abro un navegador web (ya sea stock o Dolphin), y busco x.com, irá a la dirección IP que resuelve el DNS.

¿Qué esta pasando?

(Mi teléfono es un Nexus One, que ejecuta la ROM personalizada Cyanogen 7.1 basada en Android 2.3.7)

Actualización:
en la aplicación ' LAN Droid ', obtengo la dirección editada (así que 10.0.0.1) también está bien. Parece que solo en los navegadores se comporta mal.

gcb
fuente
Solo curiosidad: ¿qué pasa si lo haces al revés y configuras un dominio bien conocido (o algún sitio de publicidad) para que se convierta en localhost? ¿No puede cargar eso entonces? ¿Y es realmente un nombre de dominio tan corto como el usado en su ejemplo? (No es tan divertido: Internet Explorer dejó de aceptar cookies para dominios de dos letras . Por supuesto, no está relacionado con su problema, pero ¿ quizás los nombres de dominio cortos tienen otras limitaciones extrañas en algunos navegadores? Supongo que no).
Arjan
2
¿Puedes hacer esto? ¿ ls -l /etc/hostsPosiblemente un problema de permisos / propiedad?
t0mm13b
@ t0mm13b "-rw-r - r-- raíz raíz"
gcb
@ t0mm13b estás en el clavo! En mi caso fueron los permisos. chmod 644 /system/etc/hostsresuelto
KalenGi

Respuestas:

6

Esto suena exactamente como este , por debajo de trabajo de ping pero no el navegador. Su solución final se cita a continuación:

Pregunta estúpida, pero ¿estás editando el archivo en el teléfono o simplemente presionando el archivo que publicaste aquí? El que publicó está en formato DOS, por lo que tiene caracteres de salto de línea adicionales al final de la línea que podrían confundir a un sistema Linux.

No sé qué utilizó para modificarlo, pero es posible que desee comprobar qué tipo de caracteres de salto de línea / nueva línea está utilizando.

Egobits
fuente
editado con vi en el emulador de terminal. Intenté forzar ff=unixahora y set listver cualquier salto de línea de DOS ... incluso seguí adelante y ejecuté una expresión regular como si hubiera algún salto de línea de DOS, no se encontró nada.
gcb
4

No estoy seguro de si esto ayuda, pero tuve un problema de un archivo de hosts ignorado y fue resuelto por un chico en este hilo ; la respuesta es poner una nueva línea en blanco al final del archivo.

Fletch
fuente
2

¿Puede instalar strace y comparar la salida ejecutando strace en ping con strace en el navegador para ver por qué las búsquedas de DNS se manejan de manera diferente?

¿Estás seguro de que no hay almacenamiento en caché persistente? ¿Cuál es el TTL en sus registros de dominio?

Parece que Android no usa /etc/resolv.conf, pero tal vez hay algunas propiedades que controlan qué aplicaciones usan / etc / hosts y cuáles van directamente a la búsqueda de DNS. https://groups.google.com/forum/?fromgroups#!topic/android-platform/K2Wr4WaEneI

Kieran Tully
fuente
Buenos puntos. TTL es 1 h, el valor predeterminado para la captura de todas las reglas que tengo. El hilo de g.groups se trata principalmente de la decisión de qué servidor de nombres golpear durante las consultas DNS, esta lógica ocurre después de etc / hosts. espero. Ahora ejecutaré el strace (descubra cómo hacerlo antes) e informaré de nuevo.
gcb
2

Si está creando el archivo hosts en una máquina con Windows, asegúrese de que cada línea esté separada solo por un LF (no [CR] [LF], solo [LF]). Puede verificar eso y crear un archivo de host adecuado usando notepad ++.

Tom Teman
fuente
0

Creo que necesita vaciar DNS en su Android. Consulte esta pregunta /programming/2101762/android-flush-dns , especialmente "vaya a configuración -> aplicaciones -> Ubicación de red -> Borrar datos".

Comunidad
fuente
Ni siquiera tengo esta opción en Android 2.3.7. Pero el teléfono está con este cambio en etc / hosts desde hace meses. y lo reinicio con frecuencia ... espero que DNS no se almacene en caché durante meses por cualquier motivo.
gcb
0

Mi sospecha sería que el navegador está configurado para funcionar a través de un proxy.

Es posible que pueda saber usando netstat -n o buscando en / proc / net / tcp (o mejor aún, / proc / # browser_pid # / net / tcp) a qué dirección se está conectando realmente. Si eso no coincide con la dirección de su sitio web, es probable que esté pasando por un intermediario.

Chris Stratton
fuente
-2

Normalmente diría (pero esto no se aplica a usted, por desgracia):

Simplemente intente reiniciar si los cambios pasan desapercibidos porque la instancia de la máquina Dalvik o el sistema subyacente podrían haber almacenado en caché una solicitud de DNS anterior.

Puede intentar AdAway para agregar entradas manualmente a su archivo de hosts (solo para verificar si hace lo mismo que lo hizo manualmente).

ce4
fuente