Pourquoi Android ignore-t-il mes changements etc / hosts dans le navigateur?

19

J'ai remonté en /systant que rw, ajouté une entrée etc/hosts(par exemple 10.0.0.1 x.com www.x.com) et redémarré mon appareil.

Après le redémarrage, si je vérifie etc/hosts, l'entrée est correcte. Si je fais un ping x.com, il envoie un ping à l'adresse IP correcte que j'ai entrée.

Mais, si j'ouvre un navigateur Web (stock ou Dolphin) et que je le navigue x.com, il ira à l'adresse IP à laquelle le DNS se résout.

Que ce passe-t-il?

(Mon téléphone est un Nexus One, qui exécute la ROM Cyanogen 7.1 personnalisée basée sur Android 2.3.7)

Mise à jour:
sur l'application « LAN Droid », je reçois l'adresse modifiée (donc 10.0.0.1) très bien aussi. Il semble que ce ne soit que les navigateurs où il se comporte mal.

gcb
la source
Juste curieux: que se passe-t-il si vous le faites dans l'autre sens et définissez un domaine bien connu (ou un site de publicité) pour devenir localhost à la place? Ne parvient-il pas à charger cela alors? Et est-ce vraiment un nom de domaine aussi court que celui utilisé dans votre exemple? (Pas si amusant: Internet Explorer a cessé d'accepter les cookies pour les domaines à deux lettres . Bien sûr, sans rapport avec votre problème, mais peut-être que les noms de domaine courts ont d'autres limitations étranges dans certains navigateurs? Je suppose que non.)
Arjan
2
pouvez-vous faire cela ls -l /etc/hosts, éventuellement un problème de permissions / propriété?
t0mm13b
@ t0mm13b "-rw-r - r-- root root"
gcb
@ t0mm13b vous êtes sur place! Dans mon cas, ce sont les autorisations. chmod 644 /system/etc/hoststrié
KalenGi

Réponses:

6

Cela ressemble exactement à ceci , pour que le ping fonctionne, mais pas le navigateur. Sa solution éventuelle est citée ci-dessous:

Question stupide, mais éditez-vous le fichier sur le combiné ou poussez-vous simplement le fichier que vous avez publié ici? Celui que vous avez publié est au format DOS, donc il a des caractères de saut de ligne supplémentaires à la fin de la ligne qui pourraient confondre un système Linux.

Je ne sais pas ce que vous avez utilisé pour le modifier, mais vous voudrez peut-être vérifier quel type de caractères de saut de ligne / de nouvelle ligne il utilise.

Egobits
la source
édité avec vi sur l'émulateur de terminal. essayé de forcer ff=unixmaintenant et set listde voir tout saut de ligne DOS ... même allé de l'avant et exécuter une expression rationnelle comme s'il y avait un saut de ligne DOS, rien trouvé.
gcb
4

Je ne sais pas si cela aide, mais j'ai eu un problème de fichier d'hôtes ignoré et il a été résolu par un gars sur ce fil - la réponse est de mettre une nouvelle ligne vierge à la fin du fichier.

Fletch
la source
2

Pouvez-vous installer strace et comparer la sortie exécutant strace sur ping avec strace sur le navigateur pour voir pourquoi les recherches DNS sont traitées différemment?

Êtes-vous sûr qu'il n'y a pas de mise en cache persistante? Quel est le TTL sur vos enregistrements de domaine?

Android ne semble pas utiliser /etc/resolv.conf, mais il existe peut-être des propriétés qui contrôlent les applications qui utilisent / etc / hosts et qui vont directement à la recherche DNS. https://groups.google.com/forum/?fromgroups#!topic/android-platform/K2Wr4WaEneI

Kieran Tully
la source
bons points. TTL est 1h, la valeur par défaut pour la règle catch all que j'ai. Le thread g.groups concerne principalement la décision du serveur de noms à frapper pendant les requêtes DNS, cette logique se produit après les etc / hosts. J'espère. Maintenant, je vais exécuter la strace (savoir comment faire avant) et faire rapport.
gcb
2

Si vous créez le fichier d'hôtes sur une machine Windows, assurez-vous que chaque ligne est séparée par un LF uniquement (pas [CR] [LF], seulement [LF]). Vous pouvez vérifier cela et créer des fichiers hôtes appropriés à l'aide de notepad ++.

Tom Teman
la source
0

Je pense que vous devez vider le DNS sur votre Android. Vérifiez cette question /programming/2101762/android-flush-dns , en particulier "allez dans les paramètres -> applications -> Emplacement réseau -> Effacer les données".

Communauté
la source
n'ont même pas cette option sur android 2.3.7. Mais le téléphone est avec ce changement sur etc / hosts depuis des mois maintenant. et je le redémarre fréquemment ... j'espère que DNS n'est pas mis en cache pendant des mois pour une raison quelconque.
gcb
0

Je soupçonne que le navigateur est configuré pour fonctionner via un proxy.

Vous pourrez peut-être dire en utilisant netstat -n ou en regardant dans / proc / net / tcp (ou mieux encore, / proc / # browser_pid # / net / tcp) à quelle adresse il se connecte réellement. Si cela ne correspond pas à l'adresse de votre site Web, il est probable que vous passiez par un intermédiaire.

Chris Stratton
la source
-2

Je dirais normalement (mais cela ne s'applique pas à vous, hélas):

Essayez simplement de redémarrer si les modifications passent inaperçues car l'instance de la machine Dalvik ou le système sous-jacent peut avoir mis en cache une ancienne requête DNS.

Vous pouvez essayer AdAway pour ajouter manuellement des entrées à votre fichier d'hôtes (juste pour vérifier s'il fait la même chose que vous avez fait manuellement).

ce4
la source