首页 > 代码库 > DNS设置错误,浏览器能够正常访问网站么?

DNS设置错误,浏览器能够正常访问网站么?

大家在看到这个问题,第一反应是不是都认为:不能?

嘿嘿,我料定大家的正常思路也该是这样。

起初我也认为应该是这样但是前段时间遇到一件事让我改变了这个固有观念:

前段时间机房的dhcp服务关闭,我们不得已开始使用静态IP,此时由于老师没说DNS服务器在另外一台机器上,我们想当然的认为DNS的IP就是原来DHCP的IP,因为我们使用的是360浏览器,我发现设置好静态IP并不影响我们正常上网查资料。之后由于51cto的视频看不了,就去问老师原因,老师看了IP说DNS设置错误。老师一改就恢复正常。我当时就困惑了,DNS设置错误不就解析不了域名了么,怎么还能正常登录网站呢?然后就这个问题问了老师,老师也很意外,开始用抓包工具进行检测:同时打开IE和360,将DNS故意设置错误,抓包工具看到,IE很规矩的按照我设置的DNS去找域名进行解析,而360则直接访问51cto的IP地址。看到这的时候,;老师也蒙了。他也困惑360到底具备什么工具怎么会直接去访问网站的IP呢。
之后回家也测试了一番,用了IE,遨游,360急速版。依旧是将DNS故意设置错误,结果发现只有360急速能正常访问网站,其余两个浏览器都无法访问。

我们先不去追究它的原理到底是什么,我们先通过实验验证一下。

我们一般的环境下都是用的DHCP分配的IP,DNS。

实验前,我们先将DNS设置为:主DNS:1.2.3.4,副DNS:5.6.7.8

浏览器:我采用IE,Firefox,chrome,百度,360,Opera这六个浏览器进行测试。

之所以选它们是有一定原因的。

大家都知道目前三大主流浏览器内核:

IETridentFirefoxGeckoChromeWebKit(现在貌似又改进为Blink)。

选它们就是为了检验浏览器的内核是否进行了DNS内置的这些设置,而另外的三款则是用的比较有代表性的三个,Opera性能,速度都不错的浏览器;360则是主攻安全;百度,仅仅是个人喜好。

360百度这两个的浏览器内核是基于开源的WebKit进行的二次开发。(如果错了还请指正

实验开始


准备工作:

wKioL1QATIbD-ftMAAF3669_Rs8038.jpg

wKiom1QAS2_zsFyuAAHeAwJ_Jqw476.jpg

            wKioL1QAT5vBPXz-AAOHM0r9ldA530.jpg

            我们主要对DNS进行分析,因此我们看的时候将其他的包过滤。只关注DNS

实验开始:

开启wireshark的抓包进程

wKioL1QATIbyU8MnAAJB0Bqh0oY866.jpg

             选择与外网连接的网卡class,之后点击start

先对IE,Chrome,Firefox进行测试:输入51cto网址

wKioL1QATIfwGhhyAADdTnA2hPo335.jpg

            IE未能打开网页

wKioL1QblNKRInJhAAC5_-7_nRw300.jpg

           Google加载过程

wKiom1QblLjTaK6SAABpr4NjFIQ507.jpg

           网页未能打开


wKioL1QjhsbzlJNnAALp8uMO0Js580.jpg

  Firefox加载过程

wKioL1Qjhsei9sbVAAMK96rFy1o222.jpg

  Firefox未能打开网页

wKioL1QjhsnwkR4gABEnvnaZlXc898.jpg

测试结果:失败

这三款内核的代表者很实在,在DNS设置错误的情况下老老实实的按照我设置的错误DNS查找对应的域名。网页没能打开。(其实这三者的DNS包都大同小异,因此就以一图表示了)


下面对Opera浏览器进行测试:输入51cto网址

wKioL1QjhsCgyuW_AAHZgQoOWIs723.jpg

  加载过程

wKiom1QjhpzQILTCAAHE4Di2o9k243.jpg

  加载结束,未能打开网页

wKiom1Qjhp7yEFJyABFX6E-hPLs814.jpg

结论:失败。Opera还是很实在的一款浏览器,依旧按我的设置进行查询。可惜了。


下面开始对百度进行测试:输入51cto网址

wKiom1QjhqeifbNWAAmUMqSvJ54411.jpg

  完美加载

wKioL1QjhsyBpP5WAAsCZC-Qxzs092.jpg

  百度成功打开网页

wKiom1QjhqrANugUABDWcuJm5sg860.jpg

  起初老老实实按规矩读取我设置的DNS

wKioL1QjhtDz2zkxABITHffuM3g164.jpg

  该图出现了144.144.144.144.

下面付了两张它http的包大家感兴趣可以看看,我是没看出什么特别的地方。

wKioL1QjhtKiOwyTABMTI6mSeMs057.jpg

wKiom1QjhrDTbZeDABHK60AswVw260.jpg

结论:成功。我们通过DNS包可以发现,起初百度也是老老实实按我设置的DNS进行域名查询,可没过多久突然蹦出了公共DNS:144.144.144.144。这是什么情况?我们先不讨论。

下面看看360的表现吧

依旧是输入51cto网站

wKiom1QjhraD_YOXAAcn6pXVXsQ967.jpg

   网页打开,但是图片看不到,加载的不够完美

wKiom1QjhreQDMrgAAp1ZnuWsmw872.jpg

wKioL1Qjht3A0kINABFEuPfUWEE303.jpg

  刚开始依旧按规矩来

wKioL1QjhuOwsQv4ABD8c3Ug_7c134.jpg

  这张图出现了公共IP8.8.8.8

wKioL1QjhuqQ83YqABDbLByzfto801.jpg

wKioL1QjhvDDXYHSABFZgrv6Jr4383.jpg

  下面也为360付了一张http的抓包图。

wKiom1Qjhs_R0AWDABS12t-IOHI726.jpg

结论:成功。起初360也是老老实实地按照我设置的DNS进行域名查询,没过多久,也是突然蹦出一个公共DNS:8.8.8.8

实验总结:

IE,Chrome,Firefox,Opera都失败。百度,360成功

IE,Chrome,Firefox的失败排斥了浏览器内核设置了DNS的这个可能。

百度,360的成功证明这个功能是他或他们独立开发出来的。

实验的结果可能让大家大感意外。最不被看好的两款浏览器反而在DNS设置错误的情况下不受影响的访问网站,为什么呢?

当初自己也对此很困惑,查了360所有的更新补丁说明也没有发现有DNS的相关说明,百度也是。

之后就在论坛发帖,没想到还有几位专家回复

他们的答案如下

你故意将DNS服务器地址设错,那么按照常理来说你不会有机会访问51cto。

但是请注意360安全浏览器是一个安全浏览器,作为浏览器最最忌讳的就是发生DNS劫持这会在根本上瓦解360的安全机制。换句话说,如果读取了本地设置作为默认DNS,那么如果这个DNS是被劫持的(也就是说,我可以把www.baidu.com,指向任意一个我伪造的IP地址或网站)那么就算360浏览器再牛,也没有办法保证用户安全。处于这个考虑,360必然内置安全的DNS服务器,直接使用360内置DNS IP来解析地址或者作为比对DNS是否被劫持的手段。由此可见。问题必然出现在360浏览器上。多说一句,DNS只提供域名解析功能所以,如果你直接使用IP地址进行访问,就算你没有配DNS一样可以得。因此如果360内置一个较为公正的DNS IP地址,然后所有在360浏览器的访问都有这个IP来解析,只有360能上网也就没有问题了。

我看后,有点懂了,之后又问了其他人。得出了一个目前自己比较信服的答案。

360和百度都是在开源浏览器内核上进行的2次开发与优化(很明显百度的优化做的更完善点),想到中国大多数人对DNS都不明白,更别提设置了。因此他们想到干脆我们的浏览器帮你把这个问题解决算了。之后他们就写了相应的策略,就是当本地的DNS服务器不能提供正常的服务时就将DNS指定到他们设置的比较公正安全的DNS上供解析域名。之后就出现了我们在上面看到的结果。之前好多人对360都有点抵触,其实客观来说,360的浏览器还是靠谱的。(真不是为360做广告啊)但是这两款浏览器的内部策略或者说内核到底是不是如此我就不知道了,如果360,百度浏览器的开发人员看到了,还请解释一下。这是目前我总结的自己信服的答案。大家有不同意见可以交流一下。


PS:我发现如果我们仔细观察生活的话,还是能发现不少有趣的问题的。

本文出自 “张帆-IT的奇幻漂流” 博客,请务必保留此出处http://chawan.blog.51cto.com/9179874/1558074

DNS设置错误,浏览器能够正常访问网站么?