Warum ignoriert Android meine etc/hosts-Änderung im Browser?

Ich habe /sysals neu gemountet rw, einen Eintrag zu etc/hosts(z . B. 10.0.0.1 x.com www.x.com) hinzugefügt und mein Gerät neu gestartet.

Wenn ich nach dem Neustart ein Häkchen setze, etc/hostsist der Eintrag in Ordnung. Wenn ich pinge x.com, pingt es die richtige IP-Adresse, die ich eingegeben habe.

Aber wenn ich einen Webbrowser öffne (entweder Stock oder Dolphin) und zu navigiere x.com, wird er an die IP-Adresse weitergeleitet, zu der das DNS auflöst.

Was ist los?

(Mein Telefon ist ein Nexus One, auf dem das benutzerdefinierte Cyanogen 7.1-ROM basierend auf Android 2.3.7 ausgeführt wird.)

Update:
Auf der App ' LAN Droid ' bekomme ich die editierte Adresse (so 10.0.0.1) auch prima hin. Es scheint so, als ob es nur die Browser sind, wo es sich falsch verhält.

Nur neugierig: Was ist, wenn Sie es umgekehrt machen und stattdessen eine bekannte Domain (oder eine Werbeseite) so einstellen, dass sie localhost wird? Lässt es sich dann nicht laden? Und ist es wirklich so ein kurzer Domainname wie in Ihrem Beispiel? (Nicht so lustige Tatsache: Internet Explorer akzeptiert keine Cookies mehr für Zwei-Buchstaben-Domains . Natürlich ohne Bezug zu Ihrem Problem, aber vielleicht haben kurze Domainnamen in einigen Browsern andere seltsame Einschränkungen? Ich denke aber nicht.)
können Sie dies tun - ls -l /etc/hostsmöglicherweise ein Problem mit Berechtigungen / Eigentumsrechten?
@t0mm13b "-rw-r--r-- root root"
@t0mm13b du bist genau richtig! In meinem Fall waren es die Berechtigungen. chmod 644 /system/etc/hostsaussortiert

Antworten (7)

Das hört sich genau so an , bis hin zu Ping funktioniert, aber nicht der Browser. Seine letztendliche Lösung wird unten zitiert:

Dumme Frage, aber bearbeitest du die Datei auf dem Mobilteil oder pushst du nur die Datei, die du hier gepostet hast? Das von Ihnen gepostete ist im DOS-Format, daher enthält es am Ende der Zeile zusätzliche Zeilenvorschubzeichen, die ein Linux-System verwirren könnten.

Ich weiß nicht, was Sie verwendet haben, um es zu ändern, aber Sie möchten vielleicht überprüfen, welche Art von Zeilenvorschub-/Neuzeilenzeichen es verwendet.

bearbeitet mit vi auf dem Terminal-Emulator. versuchte, ff=unixjetzt zu erzwingen und set listeinen DOS-Zeilenumbruch zu sehen ... ging sogar weiter und führte einen regulären Ausdruck aus, als ob es einen DOS-Zeilenumbruch gäbe, nichts gefunden.

Ich bin mir nicht sicher, ob das hilft, aber ich hatte ein Problem mit einer ignorierten Hosts-Datei und es wurde von einem Typen in diesem Thread gelöst - die Antwort ist, eine leere neue Zeile am Ende der Datei einzufügen.

Können Sie strace installieren und die Ausgabe, die strace auf ping ausführt, mit strace im Browser vergleichen, um zu sehen, warum DNS-Lookups unterschiedlich gehandhabt werden?

Sind Sie sicher, dass kein dauerhaftes Caching stattfindet? Wie lautet die TTL in Ihren Domain-Einträgen?

Android scheint /etc/resolv.conf nicht zu verwenden, aber vielleicht gibt es einige Eigenschaften, die steuern, welche Apps /etc/hosts verwenden und welche direkt zur DNS-Suche gehen. https://groups.google.com/forum/?fromgroups#!topic/android-platform/K2Wr4WaEneI

gute Argumente. TTL ist 1h, die Standardeinstellung für die Catch-All-Regel, die ich habe. Im g.groups-Thread geht es hauptsächlich um die Entscheidung, auf welchen Nameserver bei DNS-Abfragen zugegriffen werden soll. Diese Logik erfolgt nach etc/hosts. Ich hoffe. Jetzt werde ich den Strace ausführen (herausfinden, wie es vorher geht) und Bericht erstatten.

Wenn Sie die Hosts-Datei auf einem Windows-Rechner erstellen, stellen Sie sicher, dass jede Zeile nur durch ein LF getrennt ist (nicht [CR][LF], nur [LF]). Sie können dies überprüfen und mit Notepad ++ eine geeignete Hosts-Datei erstellen.

Ich denke, Sie müssen DNS auf Ihrem Android leeren, überprüfen Sie diese Frage https://stackoverflow.com/questions/2101762/android-flush-dns , insbesondere "Gehen Sie zu Einstellungen -> Anwendungen -> Netzwerkstandort -> Daten löschen".

habe diese Option nicht einmal auf Android 2.3.7. Aber das Telefon ist seit Monaten mit dieser Änderung auf etc/hosts. und ich starte es häufig neu ... ich hoffe, DNS wird aus irgendeinem Grund nicht monatelang zwischengespeichert.

Mein Verdacht wäre, dass der Browser so konfiguriert ist, dass er über einen Proxy funktioniert.

Möglicherweise können Sie mit netstat -n oder einem Blick in /proc/net/tcp (oder noch besser /proc/#browser_pid#/net/tcp) feststellen, mit welcher Adresse es sich tatsächlich verbindet. Wenn dies nicht mit der Adresse Ihrer Website übereinstimmt, verwenden Sie wahrscheinlich einen Vermittler.

Ich würde normalerweise sagen (aber das trifft leider nicht auf Sie zu):

Versuchen Sie einfach einen Neustart, wenn Änderungen unbemerkt bleiben, weil die Dalvik-Maschineninstanz oder das zugrunde liegende System möglicherweise eine frühere DNS-Anfrage zwischengespeichert haben.

Sie könnten versuchen, AdAway manuell Einträge zu Ihrer Hosts-Datei hinzuzufügen (nur um zu überprüfen, ob es dasselbe tut wie Sie es manuell getan haben).