如何刷新DNS缓存?


27

如何清除Android手机上的DNS缓存?(Droid3,姜饼,植根于特定对象)

理想情况下,我正在寻找要通过终端仿真器运行的命令,类似于

ipconfig /flushdns

在Windows机器上。

这是什么Linux版本?


您是否需要针对系统应用程序,第三方应用程序或您的应用程序执行此操作?
onik 2011年

我猜是第三方吗?通过终端仿真器ping服务器时需要它。
史蒂夫·罗宾斯

请更新标题以反映您想要基于CLI的答案。这是在Google中的排名,搜索此标题的人中有99%的人没有root或CLI技能。
2015年

Answers:


11

在典型的Linux系统上,可以通过运行清除缓存/etc/init.d/nscd restart,但是至少我的ROM不使用nscd缓存DNS。您可以检查您是否这样做,但我对此表示怀疑。我已经看到一些建议,清除浏览器缓存也将清除DNS缓存,但是一种可靠的方法是进行硬重启(关机,取出电池30秒钟,重新连接电池并重新启动)。


1
我所有的搜索都提出了“硬重启”建议。
Chahk 2011年

我之所以投票,是因为答案需要root用户和/或假定对大多数Android用户来说不现实的shell访问。其余的答案并不能解决我的问题。我也相信马修·里德(Matthew Read)应该重新考虑锁定问题,因为这绝对不是“完成的交易”。DNS非常复杂,这里还没有Android帐户的人会提供更多合理的答案,我就是一个例子。FWIW我确实有10多个声誉,但仍然无法回答问题。
PJ Brunet,2015年

@PJBrunet准确地说,您有1个代表和100个代表的协会奖金,由于您在此网站上尚未获得奖励,所以这不计。请参阅什么是“受保护的”问题?更多细节。至于问题,我现在将其取消保护。
onik 2015年

14

默认情况下,地址被缓存600秒(10分钟)。查找失败将被缓存10秒钟。从我所看到的一切来看,没有内置任何刷新缓存的内容。这显然是Android中已报告的错误,因为它存储DNS缓存的方式。清除浏览器缓存不会影响DNS,“硬重置”会清除它,因为它只是超时。

我们能否问一下需要清除DNS缓存的根本原因?也许还有其他解决方案被遗漏了,因为我们没有考虑更大的范围。


2
不确定OP,但是我有一个用例,其中我的家庭网络服务于server.home.mydomain.com之类的地址,但是我的ISP解析* .mydomain.com(对于任何“ *”值,尚未映射)如果我的手机是3G / 4G,请访问www.mydomain.com,因此有时我无法访问我的家庭网络,直到缓存超时。
TomG

看起来强制性的10分钟缓存已在JB中修复-请参阅此commit。对于老版本Java高速缓存行为,可以通过以下方式调整networkaddress.cache.ttlnetworkaddress.cache.negative.ttlbuild.prop
谢尔盖·弗拉索夫

首先,即使在4.3版本中,仍然存在一些(也许有所不同)DNS问题-wifi上的平板电脑可能无法获得Linux和Windows计算机(在托管wifi的网络上)可以解析的名称的IP地址。
乔恩·谢米兹

7

在Android中执行此操作的唯一方法是进行硬重启。必要的命令行工具通常不可用,但是在我的测试中,硬重启始终为我解决了问题(Galaxy Nexus和HTC Desire,各种ROM)。

这很痛苦,但是比10分钟的缓存超时要快。


如何执行此操作?
史蒂夫·罗宾斯

1
-按住电源按钮-选择“关闭电源”-允许手机完全关闭-取出电池并等待30秒-退回电池-重新打开手机电源。根据我的经验,没有必要卸下电池,但是有些人报告说,如果您错过此步骤,则无法使用。
马丁

2
拆电池是无稽之谈。重新启动工程。我怀疑这样做的额外时间只会使某些外部DNS缓存超时。
Matthias Urlichs

5

还有Internet Booster之类的应用程序,它们承诺“清除DNS缓存”(以及其他功能)。我没有亲自尝试过,而且似乎没有办法只做那个(只有一个“优化”按钮“应用改进”);此外,其效果可能在设备之间有所不同(例如应用程序的说明),但它可能比重启更好。顺便说一句:虽然没有提到root是必需的,但仍然可能需要它。

Google Play上列出了几种“类似的应用”,但请注意,其中大多数都包含Airpush广告和/或需要过多的权限,这就是为什么我在这里未将其命名的原因。


我在MadPC上找到了另一种可能的解决方案(未经我自己测试),似乎在引用user8522的答案之前就说过

最后一个选项,但是对用户本身来说最耗费精力,除非他们只想等待更新:让用户进入设置->应用程序->网络位置->清除数据

另一个简短的操作方法提到了刷新DNS的一种简单方法(再次,我自己也没有进行测试):只需切换到飞行模式(糟糕,没有网络?)然后再返回(啊,有)就可以解决问题。听起来可能很愚蠢,但是我可以想象进入飞行模式时,Android会执行与相似的操作/etc/init.d/networking stop,该操作具有DNS刷新的副作用。


提供了一个非常简单的解决方案 dtumaykin在下面的评论中:只需切换为飞行模式并返回即可(当然,网络的副作用会持续几秒钟;)尽管可能不起作用在某些设备上,值得一试:无需额外安装,即使n00bs也可以轻松执行。

如果有人尝试了其中一种解决方案,那么肯定欢迎(或相反):)


3
有shell命令ndc resolver flushdefaultifndc resolver flushif wlan0; 他们需要root。还有NetworkManagementService.flushDefaultDnsCache()方法,该方法仅在JB之前需要CHANGE_NETWORK_STATE,但是随后被锁定为CONNECTIVITY_INTERNAL。因此,显然存在一种无需root即可清除DNS缓存的黑客方式(在build.prop调整后杀死了Java级别的缓存之后),但它在JB中不起作用。
谢尔盖·弗拉索夫

感谢您提供其他信息,@SergeyVlasov!您是否知道您提到的任何方法是否由我的答案中最后提到的两个建议的解决方案触发(或者它们是否起作用,但原因不同)?
伊兹

4
飞行模式的开关对我有效。三星Galaxy S4 Mini和CM12.1。
dtumaykin

我无法回答,因为Matthew Read锁定了问题。请为我打他一巴掌:-)硬重启对我不起作用,飞行模式不起作用,清除“位置”(按照答案)也不起作用,等待时间也不起作用。过去,我只是通过关闭浏览器选项卡并打开一个新选项卡来解决此问题。有一个“没有根”的8.8.8.8应用程序(Google DNS),但是我无法授予VPN访问权限,因为我已经有一个付费的VPN应用程序。对我来说,解决方案是更改VPN的“虚拟位置”设置,或者解决方案是停止并启动我的VPN。假设我的VPN有自己的DNS缓存。
PJ Brunet

@PJBrunet我不会拍mod(太危险了,他可能会关闭我的帐户;)而且,我的手臂还不够长,无法伸到国外。但是获得10个代表并不是很难(问一个好问题得到2个投票,或者写一个答案获得1个投票);这样,回到这里写下您的答案:)感谢您的分享!
伊兹

2

在现代版本的Android中,可以选择清除chrome:// net-internals /#dns下的Chrome的DNS缓存


不适用于我,仍然必须进行硬重启
Cerveser

0

就我而言,我只有一个需要刷新的域名。诸如切换飞行模式,执行硬重启或chrome:// net-internals /#dns中的操作之类的建议对我不起作用。相反,我暂时将WiFi设置更改为使用8.8.8.8的Google名称服务器。

这些是我采取的步骤:

  • 设置-> WiFi->点击当前连接并记下当前IP地址
  • 长按当前连接->修改网络
  • 检查“高级设置”
  • 将“ IP设置”更改为“静态”
  • 从第一步开始将“ IP地址”设置为当前IP
  • 将“网关”设置为您的IP地址,但第4个数字为.1(这只是一个猜测。如果您知道它有所不同,请使用该名称)。
  • 将“ DNS 1”设置为8.8.8.8

完成这些步骤后,当我ping在控制台中编辑域名时,它解析为正确的IP地址,并且似乎覆盖了旧的缓存地址。大概在浏览器中访问该域将具有相同的效果。

当我返回WiFi并将“ IP设置”设置回“ DHCP”时,正确的域继续解析为当前IP地址。

这是在运行Android 5.1.1的Sony Xperia Z3上


0

在采用错误DNS且在两个WLAN之间切换到很多DNS的Adroid 5.1 Mobile上;(WLAN Connexion上的问号。我不想像以前那样恢复手机。 )

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.