Hello,你好呀,我是
灰小猿
!一个超会写bug的程序猿!
用坚持缔造技术、用指尖敲动未来!
和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者
”。也想靠技术来改未来,改变世界!因为我们坚信每一次敲动键盘都能让生活变得更智能、世界变得更有趣
!
在此专栏《Java核心面试宝典》记录我们备战梦想的【day 20】
!
DNS大家都听说过吧?但是你知道他们的具体查询方式以及如何实现劫持吗?
一、说一下DNS域名解析查询的两种方式?
(1)递归查询: 如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户端的身份,向其他根域名服务器继续发出查询请求报文,即代替主机继续查询,而不是让主机查询。
(2)迭代查询: 当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应该找哪个域名服务器进行查询。然后让本地服务器进行后续查询。
IP地址的查询过程如下:
二、DNS使用什么传输协议?
DNS既使用TCP协议又使用UDP协议。
当进行区域传送(主域名服务器向辅助域名服务器传送变化的那部分数据)的时候会使用TCP协议,因为数据同步传输的数据量比一个请求和应答的数据量更多,而TCP允许的报文长度更长,因此为了保证数据的正确性,会使用基于可靠连接的TCP。
当客户端向服务器查询域名(域名解析)的时候,一般返回的内容不会超过UDP报文的最大长度,即512字节。同时用UDP传输时不需要经过TCP的三次握手,大大的提高了响应速度。但是这也要求域名解析器和域名服务器能够自己解决超时和重传,从而保证可靠性。
三、如何实现DNS劫持?
DNS 劫持即域名劫持,是通过将原域名对应的 IP 地址进行替换从而使得用户访问到错误的网站或者使得用户无法正常访问网站的一种攻击方式。域名劫持往往只能在特定的网络范围内进行,范围外的 DNS 服务器能够返回正常的 IP 地址。攻击者可以冒充原域名所属机构,通过电子邮件的方式修改组织机构的域名注册信息,或者将域名转让给其它组织,并将新的域名信息保存在所指定的 DNS 服务器中,从而使得用户无法通过对原域名进行解析来访问目的网址。
具体实施步骤如下:
- 获取要劫持的域名信息:攻击者首先会访问域名查询站点查询要劫持的域名信息。
- 控制域名相应的 e-mail账号:在获取到域名信息后,攻击者通过暴力破解或者专门的方法破解公司注册域名时使用的 e-mail账号所对应的密码。更高级的攻击者甚至能够直接对 e-mail 进行信息窃取。
- 修改注册信息:当攻击者破解了 e-mail后,会利用相关的更改功能修改该域名的注册信息,包括域名拥有者信息,DNS 服务器信息等。
- 使用e-mail收发确认函:在修改完注册信息后,攻击者在 e-mail真正拥有者之前收到修改域名注册信息的相关确认信息,并回复确认修改文件,待网络公司恢复已成功修改信件后,攻击者便成功完成 DNS 劫持。
四、追问:用户端有哪些预防手段?
- 直接通过 IP 地址访问网站,避开 DNS 劫持。
- 由于域名劫持往往只能在特定的网络范围内进行,因此一些高级用户可以通过网络设置让 DNS指向正常的域名服务器以实现对目的网址的正常访问,例如将计算机首选 DNS 服务器的地址固定为 8.8.8.8。
今日总结
今天主要就是要了解DNS域名解析的过程
,了解所使用的传输协议
,了解如何进行DNS劫持
,,以及如何避免和预防
等。
如果小伙伴们有遇到其他相关的面试题,欢迎在评论区留言提出,我会把大家提出的总结到文章内, 欢迎小伙伴们一起评论区打卡学习!小伙伴们可也在左方加我好友一起探讨学习!
我是灰小猿,我们下期见!