草庐IT

DNS协议

Webkio 2023-03-28 原文

最近在进行信息收集的时候,尝试漏洞挖掘时。使用了DNSlog外带方法,发现自己对DNS该协议的理解比较浅,故今日发一篇对DNS协议详解,加深自己对DNS的理解
如有不足和缺陷,望指正


0x01 什么是DNS?


DNS协议默认端口:TCP和UDP协议号的端口53
DNS是域名解析协议,基于TCP和UDP协议组的应用层协议。它在网络中起着"翻译官的角色"。

0x02 DNS协议的作用及机制

DNS协议是用来将域名解析转换为IP地址(也可以将IP地址解析成对应的域名地址),一个公网IP对应一个域名。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人们更方便地访问互联网

举个例子:
我们现在访问百度时,输入网址"www.baidu.com" 我们就能进入"百度一下,就知道"的网页

但是浏览器是不能直接识别域名的,域名的存在是为了用户方便记忆而诞生的。

比如说我们访问www.baidu.com 时,本机会先向本地DNS服务查询发起递归查询,本地DNS服务器会向根DNS服务器,顶级域名 DNS 服务器;域名 DNS服务器发起迭代查询。
从不同DNS服务器查询的结果即为"www.baidu.com" 的IP地址,第一次查询后,该IP地址会保存在本地DNS服务器的缓存中,便于下一次的访问。

那么有了这么一串IP地址,我们的电脑才能读懂我们要访问的网站,要去的地方。

0x03 DNS协议查询内容分类:

■ 正向解析:

通过已知域名,访问本地DNS服务器缓存,解析IP地址。

由上图可见我们ping "www.baidu.com" 的网址时,返回了一个36.152.44.96的IP地址,这就是DNS协议的功劳。

当我们访问百度首页时,客户端会向本地服务器发送查询域名的请求,本地服务器则会通过访问缓存表或迭代查询根、域名DNS服务器。去查询该域名的解析记录,并一层层返回查询结果至客户端。

观察这里的IP地址,百度的IP可以是很多个,但是真实IP只有一个。我们又可以衍生出另一个知识点:"CDN(内容分发网络)",这里我提个引子,放在下一章节来描述

■ 反向解析:

由上述正向解析可知,反向解析即为通过已知IP地址,访问本地DNS服务器缓存,解析域名。

此致,敬礼!

有关DNS协议的更多相关文章

  1. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  2. ruby - HTTP POST 上的 SSL 错误(未知协议(protocol)) - 2

    尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify

  3. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  4. 网络实验之RIPV2协议(一) - 2

    一、RIPV2协议简介  RIP(RoutingInformationProtocol)路由协议是一种相对古老,在小型以及同介质网络中得到了广泛应用的一种路由协议。RIP采用距离向量算法,是一种距离向量协议。RIP-1是有类别路由协议(ClassfulRoutingProtocol),它只支持以广播方式发布协议报文。RIP-1的协议报文无法携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1不支持非连续子网(DiscontiguousSubnet)。RIP-2是一种无类别路由协议(ClasslessRoutingProtocol),支持路由标记,在路由策略中可根据路由标记对

  5. ruby - 协议(protocol)族不支持的地址族 - 2

    我尝试执行此页面中显示的ruby示例:http://tomayko.com/writings/unicorn-is-unix但我得到的只是echo.rb:9:in`bind':Addressfamilynotsupportedbyprotocolfamily-bind(2)(Errno::EAFNOSUPPORT)fromecho.rb:9:in`'有什么想法吗? 最佳答案 我遇到了同样的问题。只需将localhost更改为0.0.0.0:address=Socket.pack_sockaddr_in(4242,'0.0.0.0')

  6. ruby-on-rails - 在 Github 上 fork Ruby/Rails gem 的正确协议(protocol)/礼仪是什么,可以作为持续的并行 fork 进行维护? - 2

    最近我使用了一个由单个开发人员创建的不错的gem,它托管在Github上。在我的工作中,我不得不对它进行一些实质性的修改,添加一些改进。有些是特定于项目的,有些是特定于gem的,还有一些是独立的改进。对于特定于gem的改进(例如,错误修复),我fork了存储库,应用了修复,并提出了拉取请求。然后,然而,我注意到独立的改进有点属于原始gem的并行、持续的分支类别。更清楚地说,你以前见过它;我重写了原始gem的View以使用TwitterBootstrap框架。因此,我也将它推送到了Github,但是,当然,我没有提出拉取请求——相反,我更新了README以解释不同之处,并感谢gem的原作

  7. ruby-on-rails - OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=unknown 状态:未知协议(protocol) - 2

    我关注了很多关于这个问题的帖子,但没有一个对我有帮助。我正在尝试使用最简单的irb命令进行连接:require'open-uri'open('https://aristo4stu3.bgu.ac.il')奇怪的是,对于我尝试过的任何其他httpsuri,它都工作正常(即https://google.com)。出于调试目的,我什至尝试使用以下方法禁用SSL验证:OpenSSL::SSL::VERIFY_PEER=OpenSSL::SSL::VERIFY_NONE这似乎也没有帮助。我的设置是(在AWS上):$rvm-vrvm1.21.3(stable)byWayneE.Seguin,Mic

  8. ruby-on-rails - 如何使用rails输出当前协议(protocol)和url? - 2

    我有一个共享对话框。在开发中它看起来像:http://xxxxxx.com/stuff产品上:https://yyyyyyyyyyy.com/stuff输出#Protocol##URL#的最佳Rails方式是什么我可以在哪里设置它们?谢谢 最佳答案 request.protocolrequest.url参见requestobject. 关于ruby-on-rails-如何使用rails输出当前协议(protocol)和url?,我们在StackOverflow上找到一个类似的问题:

  9. ruby - 在 Ruby 中获取 DNS TXT 记录 - 2

    我需要从DNS记录中获取txt字段。是否有任何ruby​​api可以做这样的事情?nslookup-q=txtxxxx.com 最佳答案 尝试安装dnsrubygem。代码得到积极维护,并在一些重要的生产系统中使用。require'rubygems'require'dnsruby'includeDnsruby#Usethesystemconfigurednameserverstorunaqueryres=Dnsruby::Resolver.newret=res.query("google.com",Types.TXT)printre

  10. ruby - 在 Ruby 中反向 DNS? - 2

    我处在一个有很多计算机的环境中适当盘点。基本上,没有人知道哪个IP对应哪个mac地址和哪个主机名。所以我写了以下内容:#ThisscriptgoesdowntheentireIPrangeandattemptsto#retrievetheHostnameandmacaddressandoutputsthem#intoafile.Yay!require"socket"TwoOctets="10.26"defcomputer_exists?(computerip)system("ping-c1-W1#{computerip}")enddefappend_to_file(line)file=

随机推荐