Perché Android ignora le mie modifiche etc / hosts nel browser?


19

Ho rimontato /syscome rw, aggiunto una voce a etc/hosts(ad esempio 10.0.0.1 x.com www.x.com) e riavviato il mio dispositivo.

Dopo il riavvio, se seleziono etc/hosts, la voce va bene. Se x.comeseguo il ping , esegue il ping dell'indirizzo IP corretto che ho inserito.

Ma, se apro un browser Web (stock o Dolphin) e sfoglio x.com, andrà all'indirizzo IP a cui il DNS si risolve.

Cosa sta succedendo?

(Il mio telefono è un Nexus One, che esegue la ROM Cyanogen 7.1 personalizzata basata su Android 2.3.7)

Aggiornamento:
sull'app ' LAN Droid ' ottengo l'indirizzo modificato (quindi 10.0.0.1) anche bene. Sembra che siano solo i browser a comportarsi in modo errato.


Solo curioso: cosa succede se lo fai al contrario e imposti un dominio ben noto (o qualche sito pubblicitario) per diventare invece localhost? Non riesce a caricarlo allora? Ed è davvero un nome di dominio così breve come quello usato nel tuo esempio? (Non è così divertente: Internet Explorer ha smesso di accettare i cookie per domini di due lettere . Naturalmente, non correlato al tuo problema, ma forse i nomi di dominio brevi hanno altre strane limitazioni in alcuni browser? Immagino di no però.)
Arjan

2
puoi farlo - ls -l /etc/hosts, possibilmente problema di autorizzazioni / proprietà?
t0mm13b,

@ t0mm13b "-rw-r - r-- root root"
gcb

@ t0mm13b sei perfetto! Nel mio caso erano le autorizzazioni. chmod 644 /system/etc/hostsrisolto il problema
KalenGi il

Risposte:


6

Questo suona esattamente come questo , in calo per il ping di lavoro ma non il browser. La sua eventuale soluzione è citata di seguito:

Domanda stupida, ma stai modificando il file sul portatile o stai semplicemente spingendo il file che hai pubblicato qui? Quello che hai pubblicato è in formato DOS, quindi ha caratteri di avanzamento riga extra alla fine della riga che potrebbero confondere un sistema Linux.

Non so che cosa hai usato per modificarlo, ma potresti voler controllare quale tipo di avanzamento riga / caratteri di nuova riga sta usando.


modificato con vi sull'emulatore di terminale. ho provato a forzare ff=unixora e set listvedere qualsiasi interruzione di riga DOS ... è persino andato avanti ed eseguiva una regexp come se ci fosse un'interruzione di riga DOS, non è stato trovato nulla.
gcb,

4

Non sono sicuro se questo aiuta, ma ho avuto un problema con un file hosts ignorato ed è stato risolto da un ragazzo su questo thread - la risposta è mettere una nuova riga vuota alla fine del file.


2

È possibile installare strace e confrontare l'output che esegue strace su ping con strace sul browser per capire perché le ricerche DNS vengono gestite in modo diverso?

Sei sicuro che non ci sia cache persistente in corso? Qual è il TTL nei tuoi record di dominio?

Android non sembra usare /etc/resolv.conf, ma forse ci sono alcune proprietà che controllano quali app usano / etc / hosts e che vanno direttamente alla ricerca DNS. https://groups.google.com/forum/?fromgroups#!topic/android-platform/K2Wr4WaEneI


punti buoni. TTL è 1h, il valore predefinito per la regola catch all have. Il thread g.groups riguarda principalmente la decisione di quale nameserver colpire durante le query DNS, questa logica si verifica dopo etc / hosts. io spero. Ora eseguirò la traccia (scopri come fare prima) e riferirò indietro.
gcb,

2

Se si sta creando il file hosts su un computer Windows, assicurarsi che ogni riga sia separata solo da un LF (non [CR] [LF], solo [LF]). Puoi verificarlo e creare i file host corretti usando notepad ++.


0

Penso che devi scaricare DNS sul tuo Android, controlla questa domanda /programming/2101762/android-flush-dns , in particolare "vai in impostazioni -> applicazioni -> Posizione di rete -> Cancella dati".


non ho nemmeno questa opzione su Android 2.3.7. Ma il telefono è con questo cambiamento su etc / hosts da mesi ormai. e lo riavvio di frequente ... spero che il DNS non venga memorizzato nella cache per mesi per nessun motivo.
gcb,

0

Il mio sospetto sarebbe che il browser sia configurato per funzionare attraverso un proxy.

Potresti essere in grado di dire usando netstat -n o guardando in / proc / net / tcp (o meglio, / proc / # browser_pid # / net / tcp) a quale indirizzo si sta effettivamente connettendo. Se ciò non corrisponde all'indirizzo del tuo sito Web, è probabile che tu stia attraversando un intermediario.


-2

Normalmente direi (ma questo non si applica a te, ahimè):

Prova a riavviare se le modifiche passano inosservate perché l'istanza della macchina Dalvik o il sistema sottostante potrebbero aver memorizzato nella cache una precedente richiesta DNS.

Potresti provare AdAway per aggiungere manualmente voci al tuo file hosts (solo per un controllo incrociato se fa lo stesso che hai fatto manualmente).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.