Как очистить кэш DNS?


27

Как я могу очистить кэш DNS на моем телефоне Android? (Droid3, Gingerbread, чтобы быть точным)

В идеале я ищу команду для запуска через эмулятор терминала, что-то похожее на

ipconfig /flushdns

На машине Windows.

Что это за версия для Linux?


Вам нужно сделать это для системного приложения, стороннего приложения или вашего приложения?
onik

Третья сторона, я думаю? Мне это нужно, когда я пингую сервер через эмулятор терминала.
Стив Роббинс

Обновите название, чтобы отразить, что вы хотите получить ответ на основе CLI. Это рейтинг в Google, и 99% людей, ищущих этот заголовок, не имеют навыков root или CLI.
PJ Brunet

Ответы:


11

В типичной системе Linux кэш очищается при запуске /etc/init.d/nscd restart, но, по крайней мере, мое ПЗУ не использует nscd для кеширования DNS. Вы можете проверить, если ваш, но я сомневаюсь. Я видел предположения о том, что очистка кэша браузера также очистит кэш DNS, но один верный способ - выполнить полную перезагрузку (выключение, удаление батареи на 30 секунд, повторное подключение батареи и загрузка).


1
Все мои поиски в Google также приводят к предложению «жесткой перезагрузки».
Чахк

Я не одобряю, потому что для ответа требуется root и / или предполагает доступ к оболочке, что нереально для большинства пользователей Android. Остальная часть ответа не решила мою проблему. Также я считаю, что Мэтью Рид должен пересмотреть вопрос о блокировке, потому что это абсолютно не «сделка». DNS чрезвычайно сложен, и здесь будет еще больше законных ответов от людей, у которых нет аккаунтов Android, я пример этого. FWIW У меня 10+ репутация и я до сих пор не могу ответить на вопрос.
PJ Brunet

@PJBrunet Чтобы быть точным, у вас есть 1 повтор и 100 повторений от бонуса ассоциации, который не считается, так как вы не заработали его на этом сайте. Смотрите Что такое "защищенный" вопрос? Больше подробностей. Что касается вопроса, я сниму его сейчас.
onik

14

По умолчанию адреса кэшируются на 600 секунд (10 минут). Неудачные поиски кэшируются на 10 секунд. Из всего, что я видел, нет ничего встроенного для очистки кеша. Это, очевидно, сообщаемая ошибка в Android из-за способа хранения DNS-кэша. Очистка кэша браузера не затрагивает DNS, «жесткий сброс» очищает его, потому что он просто истекает.

Можем ли мы задать основную причину необходимости очищать кэш DNS? Возможно, есть другое решение, которое пропущено, потому что мы не смотрим на общую картину.


2
Не уверен насчет OP, но у меня есть случай использования, когда моя домашняя сеть обслуживает адреса, такие как server.home.mydomain.com, но мой провайдер разрешает * .mydomain.com (для любого значения «*» это еще не сопоставлено) на www.mydomain.com, если мой телефон работает на 3G / 4G, поэтому иногда я не могу получить доступ к домашней сети, пока не истечет время ожидания кэша.
TomG

Похоже, принудительное 10-минутное кэширование исправлено в JB - посмотрите этот коммит . Для более старых выпусков поведение кэша Java может быть настроено на networkaddress.cache.ttlи networkaddress.cache.negative.ttlв build.prop.
Сергей Власов

Кстати, есть некоторые (возможно, другие) проблемы с DNS даже в 4.3 - планшеты на Wi-Fi могут не получить IP-адрес для имен, которые могут решить машины с Linux и Windows (в сети, где размещается Wi-Fi).
Джон Шемитц

7

Единственный способ сделать это в Android - это выполнить полную перезагрузку. Необходимые инструменты командной строки обычно недоступны, однако в моих тестах полная перезагрузка всегда выполняла мои задачи (Galaxy Nexus и HTC Desire, различные ПЗУ).

Это боль, но она быстрее, чем тайм-аут 10 минут.


Как это сделать?
Стив Роббинс

1
- Нажмите и удерживайте кнопку питания. - Выберите «Выключить». - Дайте телефону полностью отключиться. - Извлеките аккумулятор и подождите 30 секунд. - Верните аккумулятор. - Включите телефон снова. По моему опыту удаление батареи не является необходимым, но некоторые сообщают, что это не работает, если вы пропустите этот шаг.
Мартин

2
Снимать батарею - это чепуха. Перезагрузка работает. Я подозреваю, что дополнительное время для этого просто позволяет некоторому внешнему кешу DNS истечь.
Матиас Урликс

5

Существуют также приложения, такие как Internet Booster, обещающие «очистить кэш DNS» (среди прочего). Я не пробовал сам, и, кроме того, кажется, что нет способа сделать это (только одна кнопка «оптимизировать», которая «применяет улучшения»); Кроме того, его эффекты могут отличаться для разных устройств (говорит описание приложения), но это может быть лучше, чем перезагрузка. Кстати: хотя и не упоминается root как требование, оно все равно может понадобиться.

В Google Play есть несколько «похожих приложений», но имейте в виду, что большинство из них содержат рекламу Airpush и / или требуют чрезмерных разрешений, поэтому я не назвал их здесь.


Другое возможное решение (не проверенное мной) я нашел на MadPC , по-видимому цитируя ответ user8522, прежде чем заявить:

Последний вариант, но наиболее интенсивный для самих пользователей, если они не хотят просто ждать обновления: пусть ваши пользователи зайдут в настройки -> приложения -> сетевое расположение -> очистить данные

В другом коротком руководстве рассказывается о другом простом способе очистки DNS (опять же, я сам этого не проверял): просто переключитесь в режим полета (упс, нет сети?), И обратно (ах, вот оно) должно сработать. Звучит глупо, но я мог представить, что при входе в режим полета Android делает нечто похожее /etc/init.d/networking stop, что имеет побочный эффект DNS-сброса.


Dtumaykin предоставил очень простое решение в комментариях ниже: простое переключение в режим полета и обратно может уже сделать это (конечно, с побочным эффектом сети, падающей на пару секунд;) Хотя это может не сработать на некоторых устройствах стоит попробовать: никаких дополнительных инсталляций и легко выполняется даже на n00bs.

Если кто-нибудь попробовал одно из этих решений, то подтверждение (или обратное) обязательно приветствуется :)


3
Есть команды оболочки ndc resolver flushdefaultifи ndc resolver flushif wlan0; они требуют root. Существует также метод NetworkManagementService.flushDefaultDnsCache () , который требовал просто CHANGE_NETWORK_STATE до JB, но затем был заблокирован до CONNECTIVITY_INTERNAL. Так что, очевидно, был хакерский способ очистки DNS-кэша без рута (после настройки build.prop для уничтожения кэша уровня Java), но он не будет работать в JB.
Сергей Власов

Спасибо за дополнительную информацию, @SergeyVlasov! Знаете ли вы, если какой-либо из упомянутых вами методов запускается двумя предлагаемыми решениями, упомянутыми последними в моем ответе (или они работают, но по другой причине)?
Иззи

4
У меня сработал режим полета. Samsung Galaxy S4 Mini и CM12.1.
дтумайкин

Я не могу ответить, потому что Мэтью Рид заблокировал вопрос. Пожалуйста, дайте ему пощечину :-) Жесткая перезагрузка у меня не сработала, режим самолета не сработал, очистка "местоположения" (согласно ответу) не сработала, часы ожидания тоже не сработали. В прошлом я просто решил эту проблему, закрыв вкладку браузера и открыв новую вкладку. Существует приложение 8.8.8.8 «без рута» (Google DNS), однако я не могу предоставить доступ VPN, потому что у меня уже есть приложение VPN, за которое я заплатил. Решением для меня было изменить настройку «виртуального местоположения» VPN или остановить и запустить мой VPN. Предполагая, что мой VPN имеет свой собственный кэш DNS.
Пи Джей Брюнет

@PJBrunet Я не буду шлепать мод (слишком опасно, он может закрыть мою учетную запись;) и, кроме того, мои руки не достаточно длинные, чтобы добраться за границу). Но набрать 10 повторений не так уж сложно (задайте хороший вопрос, получив 2 отзыва, или напишите ответ, получив 1 ответ); с этим, иди сюда и напиши свой ответ :) Спасибо за обмен!
Иззи

2

В современных версиях Android есть возможность очистить DNS-кеш Chrome в chrome: // net-internals / # dns


у меня не сработало, все равно пришлось делать жесткую перезагрузку
Cerveser

0

В моем случае у меня было только одно доменное имя, которое мне нужно было сбросить. Такие предложения, как переключение в режим «В самолете», выполнение принудительной перезагрузки или действия в chrome: // net-internals / # dns, у меня не сработали. Вместо этого я временно изменил настройки WiFi, чтобы использовать сервер имен Google на 8.8.8.8.

Вот шаги, которые я предпринял:

  • Настройки -> WiFi -> нажмите на текущее соединение и запишите текущий IP-адрес
  • Длительное нажатие на текущее соединение -> Изменить сеть
  • Проверьте «Расширенные настройки»
  • Измените «настройки IP» на «статические»
  • Установите «IP-адрес» на текущий IP с первого шага
  • Установите «Шлюз» на свой IP-адрес, но с .1 в качестве 4-го числа (это только предположение. Если вы знаете, что это что-то другое, используйте это)
  • Установите «DNS 1» на 8.8.8.8

После этих шагов, когда я pingредактировал доменное имя в консоли, оно преобразовывалось в правильный IP-адрес и казалось, что записывалось поверх старого кэшированного. Предположительно, посещение домена в браузере будет иметь тот же эффект.

Когда я вернулся к WiFi и установил «Настройки IP» обратно на «DHCP», правильный домен продолжал преобразовываться в текущий IP-адрес.

Это на Sony Xperia Z3 под управлением Android 5.1.1


0

На Adroid 5.1 Mobile, который принял неправильный DNS, так как переключается на много между двумя WLAN; (Вопросительный знак на WLAN Connexion. Я не хотел восстанавливать свой телефон, как я делал это однажды .. Engelsiz: DNS Changer исправил это; )

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.