Wie kann ich den DNS-Cache leeren?

27

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

Im Idealfall suche ich einen Befehl, um einen Terminal-Emulator zu durchlaufen, ähnlich wie

ipconfig /flushdns

Auf einer Windows-Maschine.

Was ist die Linux-Version davon?

Steve Robbins
quelle
Müssen Sie dies für eine System-App, eine Drittanbieter-App oder Ihre App tun?
Onik
Dritte, denke ich? Ich brauche es, wenn ich einen Server über den Terminal-Emulator anpinge.
Steve Robbins
Bitte aktualisieren Sie Ihren Titel, um zu berücksichtigen, dass Sie eine CLI-basierte Antwort erhalten möchten. Dies ist ein Ranking in Google und 99% der Personen, die diesen Titel suchen, haben keine Root- oder CLI-Kenntnisse.
PJ Brunet

Antworten:

11

Auf einem typischen Linux-System wird der Cache durch Ausführen /etc/init.d/nscd restartgeleert, mein ROM verwendet jedoch nscd nicht zum Zwischenspeichern von DNS. Sie können nachsehen, ob dies bei Ihnen der Fall ist, aber ich bezweifle es. Ich habe Vorschläge gesehen, wonach das Löschen des Browser-Caches auch das Löschen des DNS-Caches zur Folge haben würde. Eine sichere Möglichkeit ist jedoch ein harter Neustart (Herunterfahren, 30 Sekunden lang Akku entfernen, Akku wieder einlegen und Booten).

onik
quelle
1
Mein ganzes Googeln bringt auch den "harten Neustart" -Vorschlag zum Vorschein.
Chahk
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 bin auch der Meinung, dass Matthew Read die Frage überdenken sollte, da dies absolut kein "abgeschlossener Deal" ist. DNS ist extrem komplex und es wird hier noch mehr legitime Antworten von Leuten ohne Android-Accounts geben, ich bin ein Beispiel dafür. FWIW Ich habe einen Ruf von 10+ und konnte die Frage immer noch nicht beantworten.
PJ Brunet
@PJBrunet Um genau zu sein, haben Sie 1 Wiederholung und 100 Wiederholung vom Assoziationsbonus, was nicht zählt, da Sie es auf dieser Site nicht verdient haben. Siehe Was ist eine "geschützte" Frage? für mehr Details. Was die Frage betrifft, werde ich sie vorerst ungeschützt lassen.
Onik
14

Adressen werden standardmäßig für 600 Sekunden (10 Minuten) zwischengespeichert. Fehlgeschlagene Suchvorgänge 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 dort der DNS-Cache gespeichert wird. Durch das Löschen des Browser-Cache wird das DNS nicht berührt, durch das "Hard-Reset" wird es gelöscht, da es einfach eine Zeitüberschreitung gibt.

Können wir nach dem Grund fragen, warum der DNS-Cache geleert werden muss? Vielleicht gibt es eine andere Lösung, die wir verpasst haben, weil wir nicht das Gesamtbild betrachten.

user8522
quelle
2
Ich bin mir nicht sicher über das OP, aber ich habe einen Anwendungsfall, in dem mein Heimnetzwerk Adressen wie server.home.mydomain.com bedient, aber mein ISP * .mydomain.com auflöst (für jeden Wert von "*" ist dies nicht bereits zugeordnet). Besuchen Sie www.meinedomain.com, wenn mein Telefon auf 3G / 4G geschaltet ist, sodass ich manchmal erst nach Ablauf des Cache-Zeitlimits auf mein Heimnetzwerk zugreifen kann.
TomG
Es sieht so aus, als ob das erzwungene 10-Minuten-Caching in JB behoben ist - sehen Sie sich dieses Commit an . Bei älteren Releases konnte das Java-Cache-Verhalten von networkaddress.cache.ttlund networkaddress.cache.negative.ttlnach angepasst werden build.prop.
Sergey Vlasov
Fwiw, es gibt auch in 4.3 noch einige (möglicherweise andere) DNS-Probleme - Tablets in WLAN erhalten möglicherweise keine IP-Adresse für Namen, die von Linux- und Windows-Computern (in dem Netzwerk, in dem das WLAN gehostet wird) behoben werden können.
Jon Shemitz
7

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

Dies ist zwar schmerzhaft, aber schneller als das 10-minütige Cache-Timeout.

Martin
quelle
Wie macht man das?
Steve Robbins
1
- Halten Sie die Ein / Aus-Taste gedrückt. - Wählen Sie "Ausschalten". - Schalten Sie das Telefon vollständig aus. - Nehmen Sie den Akku heraus und warten Sie 30 Sekunden. - Legen Sie den Akku wieder ein. - Schalten Sie das Telefon wieder ein. Nach meiner Erfahrung ist das Entfernen der Batterie nicht erforderlich, aber einige haben berichtet, dass es nicht funktioniert, wenn Sie diesen Schritt verpassen.
Martin
2
Das Entfernen des Akkus ist Unsinn. Neustart funktioniert. Ich vermute, dass die zusätzliche Zeit dafür einfach einige externe DNS-Cache-Timeout ermöglicht.
Matthias Urlichs
5

Es gibt auch Apps wie Internet Booster , die (unter anderem) versprechen, den DNS-Cache zu leeren. Ich habe es nicht selbst ausprobiert, und außerdem scheint es keine Möglichkeit zu geben, dies zu tun (nur ein "Optimierungs" -Button, der "Verbesserungen anwendet"). Auch die Auswirkungen können von Gerät zu Gerät unterschiedlich sein (siehe Beschreibung der App) - dies ist jedoch möglicherweise besser als ein Neustart. Übrigens: Wenngleich root nicht als Voraussetzung genannt wird, könnte es dennoch erforderlich sein.

Bei Google Play sind mehrere "ähnliche Apps" aufgeführt. Beachten Sie jedoch, dass die meisten davon Airpush-Anzeigen enthalten und / oder übermäßige Berechtigungen erfordern. Deshalb habe ich sie hier nicht genannt.


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

Die letzte Option, die für den Benutzer selbst am intensivsten ist, es sei denn, er möchte nur das Update abwarten: Lassen Sie Ihre Benutzer die Einstellungen -> Anwendungen -> Netzwerkspeicherort -> Daten löschen aufrufen

Ein weiteres kurzes Howto erwähnt einen anderen einfachen Weg, um DNS zu leeren (ich habe dies auch nicht selbst getestet): Wechseln Sie einfach in den Flugzeugmodus (oops, kein Netzwerk?) Und zurück (ah, da ist es) sollten Sie den Trick tun. Klingt vielleicht blöd, aber ich könnte mir vorstellen, dass Android beim Wechsel in den Flugzeugmodus etwas ähnliches macht /etc/init.d/networking stop, was einen DNS-Flush als Nebeneffekt hat.


Eine sehr einfache Lösung lieferte dtumaykin in den Kommentaren unten: Das einfache Umschalten in den Flugzeugmodus und zurück könnte dies bereits tun (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 selbst von n00bs problemlos durchzuführen.

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

Izzy
quelle
3
Es gibt Shell-Befehle ndc resolver flushdefaultifund ndc resolver flushif wlan0; Sie benötigen root. Es gibt auch die NetworkManagementService.flushDefaultDnsCache () -Methode, für die nur CHANGE_NETWORK_STATE vor JB erforderlich war, die dann jedoch auf CONNECTIVITY_INTERNAL gesperrt wurde. Es gab also anscheinend eine hackige Möglichkeit, den DNS-Cache ohne Root zu bereinigen (nachdem build.prop so eingestellt wurde, dass der Cache auf Java-Ebene gelöscht wird), aber in JB funktioniert dies nicht.
Sergey Vlasov
Vielen Dank für die zusätzlichen Informationen, @SergeyVlasov! Wissen Sie, ob eine der von Ihnen genannten Methoden durch die beiden zuletzt in meiner Antwort genannten Lösungsvorschläge ausgelöst wird (oder ob sie funktionieren, aber aus einem anderen Grund)?
Izzy
4
Flugzeug-Modus ein-aus hat für mich geklappt. Samsung Galaxy S4 Mini und CM12.1.
Dtumaykin
Ich kann nicht antworten, weil Matthew Read die Frage gesperrt hat. Bitte schlag ihn für mich :-) Ein harter Neustart funktionierte nicht für mich, der Flugzeugmodus funktionierte nicht, das Löschen von "Ort" (laut Antwort) funktionierte nicht, auch die Wartezeiten funktionierten nicht. In der Vergangenheit habe ich dies 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 Rootberechtigung (Google DNS). Ich kann jedoch keinen VPN-Zugriff gewähren, da ich bereits eine VPN-App habe, für die ich bezahlt habe. Die Lösung für mich war, die "virtuelle Position" des VPN zu ändern, oder mein VPN zu stoppen und zu starten. Angenommen, mein VPN hat einen eigenen DNS-Cache.
PJ Brunet
@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 gelangen). Aber es ist nicht zu schwierig, 10 Wiederholungen zu erzielen (stellen Sie eine gute Frage und erhalten Sie 2 positive Bewertungen, oder schreiben Sie eine Antwort und erhalten Sie 1 positive Bewertung). Komm hierher zurück und schreibe deine Antwort :) Danke fürs Teilen!
Izzy
2

In modernen Android-Versionen besteht die Möglichkeit, den DNS-Cache von Chrome unter chrome: // net-internals / # dns zu löschen

Joao Costa
quelle
hat bei mir nicht funktioniert, musste noch einen harten Neustart durchführen
Cerveser
0

In meinem Fall hatte ich nur einen Domainnamen, den ich löschen musste. Vorschläge wie das Umschalten des Flugzeugmodus, das Ausfü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 so geändert, dass der Nameserver von Google unter 8.8.8.8 verwendet wird.

Dies sind die Schritte, die ich unternommen habe:

  • Einstellungen -> WLAN -> Aktuelle Verbindung antippen und aktuelle IP-Adresse notieren
  • Klicken Sie lange auf die aktuelle Verbindung -> Netzwerk ändern
  • Überprüfen Sie "Erweiterte Einstellungen"
  • Ändern Sie "IP-Einstellungen" auf "statisch"
  • Stellen Sie ab dem ersten Schritt die "IP-Adresse" auf die aktuelle IP ein
  • Setze "Gateway" auf deine IP-Adresse, aber mit .1 als 4. Nummer (Dies ist nur eine Vermutung. Wenn du weißt, dass es etwas anderes ist, benutze das)
  • Stellen Sie "DNS 1" auf 8.8.8.8 ein

Nach diesen Schritten wurde pingder Domänenname in der Konsole in die richtige IP-Adresse aufgelöst und schien die alte zwischengespeicherte Adresse zu überschreiben. Vermutlich hat der Besuch der Domain in einem Browser den gleichen Effekt.

Als ich zu WiFi zurückgekehrt bin und "IP-Einstellungen" wieder auf "DHCP" gesetzt habe, wurde die korrekte Domäne weiterhin in die aktuelle IP-Adresse aufgelöst.

Dies ist auf einem Sony Xperia Z3 mit Android 5.1.1

pix
quelle
0

Auf einem Adroid 5.1-Handy, das falsches DNS verwendet hat, weil zwischen zwei WLANs zu viel gewechselt wurde (Ein Fragezeichen bei einer WLAN-Verbindung). Ich wollte mein Telefon nicht so wiederherstellen, wie ich es einmal getan habe. )

user237310
quelle