Wie kann ich den DNS-Cache leeren?

Wie kann ich meinen DNS-Cache auf meinem Android-Telefon löschen? (Droid3, Gingerbread, verwurzelt um genau zu sein)

Idealerweise suche ich nach einem Befehl, der durch einen Terminalemulator ausgeführt werden kann, ähnlich wie

ipconfig /flushdns

Auf einem Windows-Rechner.

Was ist die Linux-Version davon?

Müssen Sie dies für eine System-App, Drittanbieter-App oder Ihre App tun?
Drittanbieter, denke ich? Ich brauche es, wenn ich einen Server über Terminal Emulator anpinge.
Bitte aktualisieren Sie Ihren Titel, um anzugeben, dass Sie eine CLI-basierte Antwort wünschen. Dies ist ein Ranking in Google und 99 % der Personen, die nach diesem Titel suchen, haben keine Root- oder CLI-Kenntnisse.
Gibt es hier ein Update? Wie @PJBrunet sagte, ist Root nicht der übliche Fall, außerdem erlauben aktuelle Telefone nicht, den Akku zu entfernen. Ich suche nach dem Leeren des DSN, weil es meinen "IP-Fehler" unter Windows behoben hat, es passiert dasselbe in meinem Telefon, aber es gibt keine Shell auf Android.

Antworten (7)

Auf einem typischen Linux-System wird der Cache gelöscht, indem ausgeführt /etc/init.d/nscd restartwird, aber zumindest verwendet mein ROM nscd nicht zum Cachen von DNS. Sie können überprüfen, ob es bei Ihnen der Fall ist, aber ich bezweifle es. Ich habe Vorschläge gesehen, dass das Löschen des Browser-Cache auch den DNS-Cache löschen würde, aber ein sicherer Weg ist ein harter Neustart (Herunterfahren, Batterie für 30 Sekunden entfernen, Batterie wieder anschließen und booten).

Bei all meinem Googeln wird auch der Vorschlag "harter Neustart" angezeigt.
Ich stimme ab, weil die Antwort Root erfordert und/oder Shell-Zugriff voraussetzt, was für die meisten Android-Benutzer unrealistisch ist. Der Rest der Antwort hat mein Problem nicht gelöst. Ich glaube auch, dass Matthew Read es sich noch einmal überlegen sollte, die Frage zu sperren, da dies absolut kein "abgeschlossener Deal" ist. DNS ist extrem komplex und es wird hier noch legitimere Antworten von Leuten ohne Android-Konten geben, ich bin ein Beispiel dafür. FWIW Ich habe einen Ruf von 10+ und konnte die Frage immer noch nicht beantworten.
@PJBrunet Um genau zu sein, haben Sie 1 Wiederholung und 100 Wiederholungen aus dem Assoziationsbonus, der nicht zählt, da Sie ihn auf dieser Seite nicht verdient haben. Siehe Was ist eine „geschützte“ Frage? für mehr Details. Was die Frage betrifft, werde ich den Schutz vorerst aufheben.

Adressen werden standardmäßig für 600 Sekunden (10 Minuten) zwischengespeichert. Fehlgeschlagene Suchen werden 10 Sekunden lang zwischengespeichert. Nach allem, was ich gesehen habe, ist nichts eingebaut, um den Cache zu leeren. Dies ist anscheinend ein gemeldeter Fehler in Android, da es den DNS-Cache speichert. Das Löschen des Browser-Cache berührt das DNS nicht, das "Hard Reset" löscht es, weil es einfach abläuft.

Können wir nach dem zugrunde liegenden Grund für die Notwendigkeit fragen, den DNS-Cache zu löschen? Vielleicht gibt es eine andere Lösung, die übersehen wird, weil wir nicht auf das Gesamtbild schauen.

Ich bin mir über das OP nicht sicher, aber ich habe einen Anwendungsfall, bei dem mein Heimnetzwerk Adressen wie server.home.mydomain.com bedient, aber mein ISP löst *.mydomain.com auf (für jeden Wert von "*" ist dies noch nicht zugeordnet). an www.mydomain.com, wenn mein Telefon 3G/4G verwendet, sodass ich manchmal nicht auf mein Heimnetzwerk zugreifen kann, bis das Cache-Zeitlimit abgelaufen ist.
Sieht so aus, als wäre das erzwungene 10-Minuten-Caching in JB behoben – siehe diesen Commit . Für ältere Releases könnte das Java-Cache-Verhalten von networkaddress.cache.ttlund networkaddress.cache.negative.ttlin angepasst werden build.prop.
Fwiw, selbst in 4.3 gibt es noch einige (vielleicht andere) DNS-Probleme - Tablets im WLAN erhalten möglicherweise keine IP-Adresse für Namen, die Linux- und Windows-Computer (im Netzwerk, das das WLAN hostet) auflösen können.

Die einzige Möglichkeit, dies in Android zu tun, ist ein harter Neustart. Die notwendigen Kommandozeilen-Tools sind normalerweise nicht verfügbar, aber in meinen Tests hat ein harter Neustart immer den Trick für mich getan (Galaxy Nexus und HTC Desire, verschiedene ROMs).

Dies ist ein Schmerz, aber es ist schneller als das 10-Minuten-Cache-Timeout.

Wie führt man das durch?
- Halten Sie die Einschalttaste gedrückt - Wählen Sie "Ausschalten" - Lassen Sie das Telefon vollständig herunterfahren - Entfernen Sie den Akku und warten Sie 30 Sekunden - Geben Sie den Akku zurück - Schalten Sie das Telefon wieder ein. Nach meiner Erfahrung ist das Entfernen des Akkus nicht erforderlich, aber einige haben berichtet, dass es nicht funktioniert, wenn Sie diesen Schritt verpassen.
Batterie ausbauen ist Blödsinn. Neustart funktioniert. Ich vermute, dass die zusätzliche Zeit dafür einfach die Zeitüberschreitung eines externen DNS-Cache ermöglicht.

Es gibt auch Apps wie Internet Booster , die unter anderem versprechen, den DNS-Cache zu löschen. Ich habe es nicht selbst ausprobiert, und außerdem scheint es keine Möglichkeit zu geben, nur das zu tun (nur eine Schaltfläche "Optimieren", die "Verbesserungen anwendet"); Auch die Auswirkungen können sich zwischen den Geräten unterscheiden (sagt die Beschreibung der App) - aber es könnte besser sein als ein Neustart. Übrigens: Obwohl root nicht als Voraussetzung erwähnt wird, könnte es dennoch benötigt werden.

Es gibt mehrere „ähnliche Apps“, die bei Google Play gelistet sind – aber seien Sie sich bewusst, dass die meisten von ihnen Airpush-Anzeigen enthalten und/oder übermäßige Berechtigungen wünschen, weshalb ich sie hier nicht genannt habe.


Eine andere mögliche Lösung (nicht von mir selbst getestet), die ich bei MadPC gefunden habe , wobei ich scheinbar die Antwort von user8522 zitierte, bevor ich sagte:

Die letzte Option, aber am intensivsten für den Benutzer selbst, es sei denn, er möchte das Update einfach abwarten: Lassen Sie Ihre Benutzer zu Einstellungen -> Anwendungen -> Netzwerkstandort -> Daten löschen gehen

Ein weiteres kurzes Howto erwähnt einen anderen einfachen Weg, um DNS zu leeren (wiederum habe ich das nicht selbst getestet): Einfach in den Flugzeugmodus wechseln (oops, kein Netzwerk?) und zurück (ah, da ist es) sollte den Trick machen. Klingt vielleicht blöd, aber ich könnte mir vorstellen, dass Android beim Aufrufen des Flugzeugmodus etwas Ähnliches tut /etc/init.d/networking stop, was als Nebeneffekt einen DNS-Flush hat.


Eine sehr einfache Lösung wurde von dtumaykin in den Kommentaren unten bereitgestellt: Das einfache Umschalten in den Flugzeugmodus und zurück könnte bereits ausreichen (natürlich mit dem Nebeneffekt, dass das Netzwerk für ein paar Sekunden ausfällt;) Obwohl es möglicherweise nicht funktioniert Auf einigen Geräten ist es einen Versuch wert: keine zusätzlichen Installationen und sogar von n00bs leicht durchzuführen.

Wenn jemand eine dieser Lösungen ausprobiert hat, ist eine Bestätigung (oder das Gegenteil) sicherlich willkommen :)

Es gibt Shell-Befehle ndc resolver flushdefaultifund ndc resolver flushif wlan0; sie erfordern root. Es gibt auch die Methode NetworkManagementService.flushDefaultDnsCache() , die vor JB nur CHANGE_NETWORK_STATE benötigte, dann aber auf CONNECTIVITY_INTERNAL gesperrt war. Es gab also anscheinend einen Hacker-Weg, um den DNS-Cache ohne Root zu bereinigen (nach der Anpassung von build.prop, um den Cache auf Java-Ebene zu beenden), aber er funktioniert nicht in JB.
Danke für die zusätzlichen Informationen, @SergeyVlasov ! Wissen Sie, ob eine der von Ihnen erwähnten Methoden durch die beiden zuletzt in meiner Antwort erwähnten Lösungsvorschläge ausgelöst wird (oder ob sie funktionieren, aber aus einem anderen Grund)?
Flugmodus an-aus hat bei mir geklappt. Samsung Galaxy S4 Mini und CM12.1.
Ich kann nicht antworten, weil Matthew Read die Frage gesperrt hat. Bitte schlagen Sie ihn für mich :-) Harter Neustart hat bei mir nicht funktioniert, Flugzeugmodus hat nicht funktioniert, "Standort" löschen (gemäß Antwort) hat nicht funktioniert, Wartezeiten haben auch nicht funktioniert. In der Vergangenheit habe ich das einfach gelöst, indem ich den Browser-Tab geschlossen und einen neuen Tab geöffnet habe. Es gibt eine 8.8.8.8-App ohne Root (Google DNS), aber ich kann keinen VPN-Zugriff gewähren, da ich bereits eine VPN-App habe, für die ich bezahlt habe. Die Lösung für mich bestand darin, die Einstellung „virtueller Standort“ des VPN zu ändern, oder die Lösung bestand darin, mein VPN zu stoppen und zu starten. Angenommen, mein VPN hat einen eigenen DNS-Cache.
@PJBrunet Ich werde keinen Mod schlagen (zu gefährlich, er könnte mein Konto schließen ;) und außerdem sind meine Arme nicht lang genug, um nach Übersee zu reichen). Aber 10 Wiederholungen zu gewinnen ist nicht allzu schwer (stellen Sie eine gute Frage, die 2 positive Stimmen erhält, oder schreiben Sie eine Antwort, die 1 positive Stimme erhält); Kommen Sie damit hierher zurück und schreiben Sie Ihre Antwort :) Danke fürs Teilen!
@Izzy Ja, das ist der schmerzhafte Teil von StackExchange. Alle Regeln. Kommentargespräche sind verpönt. Auf jeden Fall ist es wertvoll, eine gute Antwort zu haben, um den Menschen zu helfen, zu der ich nichts beitragen kann. Meine „VPN“-Antwort ist solide und wohl besser als die akzeptierte Antwort, die Root erfordert.
@PJBrunet dann poste es, Matthew hat irgendwie den Schlag gespürt und die Barriere entfernt :)

In modernen Android-Versionen gibt es eine Option zum Löschen des DNS-Cache von Chrome unter chrome://net-internals/#dns

hat bei mir nicht funktioniert, musste noch einen harten Neustart durchführen

In meinem Fall hatte ich nur einen Domainnamen, den ich spülen musste. Vorschläge wie das Umschalten des Flugzeugmodus, das Durchführen eines harten Neustarts oder die Aktionen in chrome://net-internals/#dns haben bei mir nicht funktioniert. Stattdessen habe ich meine WLAN-Einstellungen vorübergehend geändert, um den Nameserver von Google unter 8.8.8.8 zu verwenden.

Dies sind die Schritte, die ich unternommen habe:

  • Einstellungen -> WLAN -> Aktuelle Verbindung antippen und aktuelle IP-Adresse notieren
  • Klicken Sie lange auf aktuelle Verbindung -> Netzwerk ändern
  • Überprüfen Sie "Erweiterte Einstellungen"
  • „IP-Einstellungen“ auf „statisch“ ändern
  • Stellen Sie "IP-Adresse" auf die aktuelle IP aus dem ersten Schritt ein
  • Stellen Sie "Gateway" auf Ihre IP-Adresse ein, aber mit .1 als 4. Zahl (Dies ist nur eine Vermutung. Wenn Sie wissen, dass es etwas anderes ist, verwenden Sie das)
  • Setzen Sie "DNS 1" auf 8.8.8.8

Als ich nach diesen Schritten pingden Domänennamen in der Konsole eingab, löste er sich in die richtige IP-Adresse auf und schien die alte zwischengespeicherte zu überschreiben. Vermutlich hat der Besuch der Domain in einem Browser den gleichen Effekt.

Als ich zurück zu WiFi ging und "IP-Einstellungen" wieder auf "DHCP" einstellte, löste sich die richtige Domain weiterhin in die aktuelle IP-Adresse auf.

Dies ist auf einem Sony Xperia Z3 mit Android 5.1.1

Auf einem Adroid 5.1 Mobile, das einen falschen DNS genommen hat, da zu viel zwischen zwei WLANs gewechselt wird; ( Ein Fragezeichen bei einer WLAN-Verbindung. Ich wollte mein Telefon nicht wie früher wiederherstellen. Engelsiz: DNS Changer hat es behoben; )